annotate dwtx/novocode/ishell/internal/CustomDrawnButton.d @ 188:e3780acbbf80

Added ported sources from Novocode, thanks to WasserDragoon
author Frank Benoit <benoit@tionex.de>
date Sun, 26 Oct 2008 14:54:39 +0100
parents
children df4e66472aff
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
188
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1 /*******************************************************************************
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2 * Copyright (c) 2005 Stefan Zeiger and others.
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
3 * All rights reserved. This program and the accompanying materials
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
4 * are made available under the terms of the Eclipse Public License v1.0
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
5 * which accompanies this distribution, and is available at
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
6 * http://www.novocode.com/legal/epl-v10.html
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
7 *
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
8 * Contributors:
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
9 * Stefan Zeiger (szeiger@novocode.com) - initial API and implementation
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
10 *******************************************************************************/
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
11
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
12 module dwtx.novocode.ishell.internal.CustomDrawnButton;
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
13
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
14 import dwt.DWT;
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
15 import dwt.graphics.Point;
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
16 import dwt.widgets.Canvas;
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
17 import dwt.widgets.Composite;
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
18 import dwt.widgets.Display;
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
19 import dwt.widgets.Event;
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
20 import dwt.widgets.Listener;
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
21
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
22
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
23 /**
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
24 * A simple button control which needs to be subclassed to draw a specific
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
25 * kind of button. This base class provides the event handling.
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
26 *
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
27 * @author Stefan Zeiger (szeiger@novocode.com)
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
28 * @since Jan 30, 2005
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
29 * @version $Id: CustomDrawnButton.java 320 2005-02-26 13:37:02 +0000 (Sat, 26 Feb 2005) szeiger $
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
30 */
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
31
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
32 class CustomDrawnButton : Canvas
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
33 {
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
34 private bool pressed;
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
35 private Display display;
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
36 private bool drawnMouseIn = false;
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
37
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
38
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
39 this(Composite parent, int style)
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
40 {
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
41 super(parent, style);
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
42 this.display = getDisplay();
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
43
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
44 addListener(DWT.Paint, dgListener(&paintListener));
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
45
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
46 addListener(DWT.MouseDown, dgListener(&onMouseDown));
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
47
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
48 addListener(DWT.MouseUp, dgListener(&onMouseUp));
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
49
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
50 addListener(DWT.MouseMove, dgListener(&onMouseMove));
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
51 }
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
52
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
53
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
54 private void paintListener(Event event)
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
55 {
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
56 bool mouseIn = mouseIn();
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
57 onPaint(event, pressed && mouseIn);
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
58 drawnMouseIn = mouseIn;
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
59 }
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
60
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
61
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
62 private void onMouseDown(Event event)
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
63 {
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
64 if(event.button is 1)
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
65 {
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
66 pressed = true;
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
67 redraw();
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
68 }
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
69 else if(event.button is 3 && (event.stateMask & DWT.BUTTON1) !is 0) // chord click
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
70 {
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
71 pressed = false;
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
72 redraw();
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
73 }
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
74 }
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
75
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
76
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
77 private void onMouseUp(Event event)
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
78 {
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
79 if(pressed && (event.stateMask & DWT.BUTTON1) !is 0)
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
80 {
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
81 pressed = false;
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
82 if(mouseIn())
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
83 {
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
84 Event selectionEvent = new Event();
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
85 notifyListeners(DWT.Selection, selectionEvent);
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
86 }
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
87 if(!isDisposed()) redraw();
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
88 }
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
89 }
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
90
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
91
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
92 private void onMouseMove(Event event)
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
93 {
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
94 if(!pressed) return;
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
95 bool mouseIn = mouseIn();
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
96 if(mouseIn is drawnMouseIn) return;
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
97 redraw();
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
98 }
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
99
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
100
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
101 private bool mouseIn()
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
102 {
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
103 Point p = toControl(display.getCursorLocation());
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
104 if(p.x < -1 || p.y < -1) return false;
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
105 Point size = getSize();
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
106 return p.x <= size.x+1 && p.y <= size.y+1;
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
107 }
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
108
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
109
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
110 public Point computeSize(int wHint, int hHint, bool changed)
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
111 {
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
112 checkWidget();
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
113 if(wHint is DWT.DEFAULT) wHint = 0;
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
114 if(hHint is DWT.DEFAULT) hHint = 0;
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
115 return new Point(wHint, hHint);
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
116 }
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
117
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
118
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
119 public bool setFocus()
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
120 {
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
121 checkWidget();
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
122 return false;
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
123 }
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
124
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
125
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
126 public bool isReparentable ()
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
127 {
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
128 checkWidget();
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
129 return false;
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
130 }
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
131
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
132
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
133 protected abstract void onPaint(Event event, bool pressed);
e3780acbbf80 Added ported sources from Novocode, thanks to WasserDragoon
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
134 }