Mercurial > projects > dwt-addons
annotate dwtx/jface/window/ToolTip.d @ 71:4878bef4a38e
Some fixing
author | Frank Benoit <benoit@tionex.de> |
---|---|
date | Thu, 22 May 2008 04:03:58 +0200 |
parents | 46a6e0e6ccd4 |
children | 5df4896124c7 |
rev | line source |
---|---|
7
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1 /******************************************************************************* |
70
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
39
diff
changeset
|
2 * Copyright (c) 2006, 2008 IBM Corporation and others. |
7
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
3 * All rights reserved. This program and the accompanying materials |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
4 * are made available under the terms of the Eclipse Public License v1.0 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
5 * which accompanies this distribution, and is available at |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
6 * http://www.eclipse.org/legal/epl-v10.html |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
7 * |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
8 * Contributors: |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
9 * Tom Schindl <tom.schindl@bestsolution.at> - initial API and implementation |
70
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
39
diff
changeset
|
10 * bugfix in: 195137, 198089, 225190 |
7
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
11 * Port to the D programming language: |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
12 * Frank Benoit <benoit@tionex.de> |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
13 *******************************************************************************/ |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
14 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
15 module dwtx.jface.window.ToolTip; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
16 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
17 import tango.util.collection.HashMap; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
18 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
19 import dwt.DWT; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
20 import dwt.events.DisposeEvent; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
21 import dwt.events.DisposeListener; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
22 import dwt.graphics.Point; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
23 import dwt.graphics.Rectangle; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
24 import dwt.layout.FillLayout; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
25 import dwt.widgets.Composite; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
26 import dwt.widgets.Control; |
70
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
39
diff
changeset
|
27 import dwt.widgets.Display; |
7
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
28 import dwt.widgets.Event; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
29 import dwt.widgets.Listener; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
30 import dwt.widgets.Monitor; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
31 import dwt.widgets.Shell; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
32 // import dwtx.jface.viewers.ColumnViewer; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
33 // import dwtx.jface.viewers.ViewerCell; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
34 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
35 import dwt.dwthelper.utils; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
36 import dwt.dwthelper.Runnable; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
37 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
38 /** |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
39 * This class gives implementors to provide customized tooltips for any control. |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
40 * |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
41 * @since 3.3 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
42 */ |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
43 public abstract class ToolTip { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
44 private Control control; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
45 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
46 private int xShift = 3; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
47 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
48 private int yShift = 0; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
49 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
50 private int popupDelay = 0; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
51 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
52 private int hideDelay = 0; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
53 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
54 private ToolTipOwnerControlListener listener; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
55 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
56 private HashMap!(String,Object) data; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
57 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
58 // Ensure that only one tooltip is active in time |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
59 private static Shell CURRENT_TOOLTIP; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
60 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
61 /** |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
62 * Recreate the tooltip on every mouse move |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
63 */ |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
64 public static const int RECREATE = 1; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
65 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
66 /** |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
67 * Don't recreate the tooltip as long the mouse doesn't leave the area |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
68 * triggering the Tooltip creation |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
69 */ |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
70 public static const int NO_RECREATE = 1 << 1; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
71 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
72 private TooltipHideListener hideListener; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
73 |
70
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
39
diff
changeset
|
74 private Listener shellListener; |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
39
diff
changeset
|
75 |
7
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
76 private bool hideOnMouseDown = true; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
77 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
78 private bool respectDisplayBounds = true; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
79 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
80 private bool respectMonitorBounds = true; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
81 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
82 private int style; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
83 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
84 private Object currentArea; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
85 |
70
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
39
diff
changeset
|
86 private static final bool IS_OSX = DWT.getPlatform().equals("carbon"); //$NON-NLS-1$ |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
39
diff
changeset
|
87 |
7
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
88 /** |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
89 * Create new instance which add TooltipSupport to the widget |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
90 * |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
91 * @param control |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
92 * the control on whose action the tooltip is shown |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
93 */ |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
94 public this(Control control) { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
95 this(control, RECREATE, false); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
96 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
97 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
98 /** |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
99 * @param control |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
100 * the control to which the tooltip is bound |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
101 * @param style |
70
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
39
diff
changeset
|
102 * style passed to control tooltip behavior |
7
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
103 * |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
104 * @param manualActivation |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
105 * <code>true</code> if the activation is done manually using |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
106 * {@link #show(Point)} |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
107 * @see #RECREATE |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
108 * @see #NO_RECREATE |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
109 */ |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
110 public this(Control control, int style, bool manualActivation) { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
111 this.control = control; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
112 this.style = style; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
113 this.hideListener = new TooltipHideListener(); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
114 this.control.addDisposeListener(new class DisposeListener { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
115 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
116 public void widgetDisposed(DisposeEvent e) { |
70
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
39
diff
changeset
|
117 data = null; |
7
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
118 deactivate(); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
119 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
120 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
121 }); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
122 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
123 this.listener = new ToolTipOwnerControlListener(); |
71 | 124 this.shellListener = new class Listener { |
70
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
39
diff
changeset
|
125 public void handleEvent(final Event event) { |
71 | 126 if( this.outer.control !is null && ! this.outer.control.isDisposed() ) { |
127 this.outer.control.getDisplay().asyncExec(new class Runnable { | |
70
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
39
diff
changeset
|
128 |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
39
diff
changeset
|
129 public void run() { |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
39
diff
changeset
|
130 // Check if the new active shell is the tooltip itself |
71 | 131 if( this.outer.control.getDisplay().getActiveShell() !is CURRENT_TOOLTIP) { |
70
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
39
diff
changeset
|
132 toolTipHide(CURRENT_TOOLTIP, event); |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
39
diff
changeset
|
133 } |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
39
diff
changeset
|
134 } |
71 | 135 |
136 }); | |
70
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
39
diff
changeset
|
137 } |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
39
diff
changeset
|
138 } |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
39
diff
changeset
|
139 }; |
7
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
140 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
141 if (!manualActivation) { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
142 activate(); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
143 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
144 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
145 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
146 /** |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
147 * Restore arbitary data under the given key |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
148 * |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
149 * @param key |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
150 * the key |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
151 * @param value |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
152 * the value |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
153 */ |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
154 public void setData(String key, Object value) { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
155 if (data is null) { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
156 data = new HashMap!(String,Object); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
157 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
158 data.add(key, value); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
159 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
160 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
161 /** |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
162 * Get the data restored under the key |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
163 * |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
164 * @param key |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
165 * the key |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
166 * @return data or <code>null</code> if no entry is restored under the key |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
167 */ |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
168 public Object getData(String key) { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
169 if (data !is null) { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
170 return data.get(key); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
171 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
172 return null; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
173 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
174 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
175 /** |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
176 * Set the shift (from the mouse position triggered the event) used to |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
177 * display the tooltip. By default the tooltip is shifted 3 pixels to the |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
178 * left |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
179 * |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
180 * @param p |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
181 * the new shift |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
182 */ |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
183 public void setShift(Point p) { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
184 xShift = p.x; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
185 yShift = p.y; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
186 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
187 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
188 /** |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
189 * Activate tooltip support for this control |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
190 */ |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
191 public void activate() { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
192 deactivate(); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
193 control.addListener(DWT.Dispose, listener); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
194 control.addListener(DWT.MouseHover, listener); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
195 control.addListener(DWT.MouseMove, listener); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
196 control.addListener(DWT.MouseExit, listener); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
197 control.addListener(DWT.MouseDown, listener); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
198 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
199 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
200 /** |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
201 * Deactivate tooltip support for the underlying control |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
202 */ |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
203 public void deactivate() { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
204 control.removeListener(DWT.Dispose, listener); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
205 control.removeListener(DWT.MouseHover, listener); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
206 control.removeListener(DWT.MouseMove, listener); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
207 control.removeListener(DWT.MouseExit, listener); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
208 control.removeListener(DWT.MouseDown, listener); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
209 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
210 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
211 /** |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
212 * Return whther the tooltip respects bounds of the display. |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
213 * |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
214 * @return <code>true</code> if the tooltip respects bounds of the display |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
215 */ |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
216 public bool isRespectDisplayBounds() { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
217 return respectDisplayBounds; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
218 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
219 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
220 /** |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
221 * Set to <code>false</code> if display bounds should not be respected or |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
222 * to <code>true</code> if the tooltip is should repositioned to not |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
223 * overlap the display bounds. |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
224 * <p> |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
225 * Default is <code>true</code> |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
226 * </p> |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
227 * |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
228 * @param respectDisplayBounds |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
229 */ |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
230 public void setRespectDisplayBounds(bool respectDisplayBounds) { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
231 this.respectDisplayBounds = respectDisplayBounds; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
232 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
233 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
234 /** |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
235 * Return whther the tooltip respects bounds of the monitor. |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
236 * |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
237 * @return <code>true</code> if tooltip respects the bounds of the monitor |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
238 */ |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
239 public bool isRespectMonitorBounds() { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
240 return respectMonitorBounds; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
241 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
242 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
243 /** |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
244 * Set to <code>false</code> if monitor bounds should not be respected or |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
245 * to <code>true</code> if the tooltip is should repositioned to not |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
246 * overlap the monitors bounds. The monitor the tooltip belongs to is the |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
247 * same is control's monitor the tooltip is shown for. |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
248 * <p> |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
249 * Default is <code>true</code> |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
250 * </p> |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
251 * |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
252 * @param respectMonitorBounds |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
253 */ |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
254 public void setRespectMonitorBounds(bool respectMonitorBounds) { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
255 this.respectMonitorBounds = respectMonitorBounds; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
256 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
257 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
258 /** |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
259 * Should the tooltip displayed because of the given event. |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
260 * <p> |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
261 * <b>Subclasses may overwrite this to get custom behaviour</b> |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
262 * </p> |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
263 * |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
264 * @param event |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
265 * the event |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
266 * @return <code>true</code> if tooltip should be displayed |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
267 */ |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
268 protected bool shouldCreateToolTip(Event event) { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
269 if ((style & NO_RECREATE) !is 0) { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
270 Object tmp = getToolTipArea(event); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
271 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
272 // No new area close the current tooltip |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
273 if (tmp is null) { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
274 hide(); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
275 return false; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
276 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
277 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
278 bool rv = !tmp.opEquals(currentArea); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
279 return rv; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
280 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
281 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
282 return true; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
283 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
284 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
285 /** |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
286 * This method is called before the tooltip is hidden |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
287 * |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
288 * @param event |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
289 * the event trying to hide the tooltip |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
290 * @return <code>true</code> if the tooltip should be hidden |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
291 */ |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
292 private bool shouldHideToolTip(Event event) { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
293 if (event !is null && event.type is DWT.MouseMove |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
294 && (style & NO_RECREATE) !is 0) { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
295 Object tmp = getToolTipArea(event); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
296 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
297 // No new area close the current tooltip |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
298 if (tmp is null) { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
299 hide(); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
300 return false; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
301 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
302 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
303 bool rv = !tmp.opEquals(currentArea); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
304 return rv; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
305 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
306 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
307 return true; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
308 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
309 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
310 /** |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
311 * This method is called to check for which area the tooltip is |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
312 * created/hidden for. In case of {@link #NO_RECREATE} this is used to |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
313 * decide if the tooltip is hidden recreated. |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
314 * |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
315 * <code>By the default it is the widget the tooltip is created for but could be any object. To decide if |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
316 * the area changed the {@link Object#equals(Object)} method is used.</code> |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
317 * |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
318 * @param event |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
319 * the event |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
320 * @return the area responsible for the tooltip creation or |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
321 * <code>null</code> this could be any object describing the area |
70
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
39
diff
changeset
|
322 * (e.g. the {@link Control} onto which the tooltip is bound to, a |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
39
diff
changeset
|
323 * part of this area e.g. for {@link ColumnViewer} this could be a |
7
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
324 * {@link ViewerCell}) |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
325 */ |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
326 protected Object getToolTipArea(Event event) { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
327 return control; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
328 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
329 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
330 /** |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
331 * Start up the tooltip programmatically |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
332 * |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
333 * @param location |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
334 * the location relative to the control the tooltip is shown |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
335 */ |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
336 public void show(Point location) { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
337 Event event = new Event(); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
338 event.x = location.x; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
339 event.y = location.y; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
340 event.widget = control; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
341 toolTipCreate(event); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
342 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
343 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
344 private Shell toolTipCreate(Event event) { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
345 if (shouldCreateToolTip(event)) { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
346 Shell shell = new Shell(control.getShell(), DWT.ON_TOP | DWT.TOOL |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
347 | DWT.NO_FOCUS); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
348 shell.setLayout(new FillLayout()); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
349 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
350 toolTipOpen(shell, event); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
351 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
352 return shell; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
353 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
354 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
355 return null; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
356 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
357 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
358 private void toolTipShow(Shell tip, Event event) { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
359 if (!tip.isDisposed()) { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
360 currentArea = getToolTipArea(event); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
361 createToolTipContentArea(event, tip); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
362 if (isHideOnMouseDown()) { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
363 toolTipHookBothRecursively(tip); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
364 } else { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
365 toolTipHookByTypeRecursively(tip, true, DWT.MouseExit); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
366 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
367 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
368 tip.pack(); |
70
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
39
diff
changeset
|
369 Point size = tip.getSize(); |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
39
diff
changeset
|
370 Point location = fixupDisplayBounds(size, getLocation(size, event)); |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
39
diff
changeset
|
371 |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
39
diff
changeset
|
372 // Need to adjust a bit more if the mouse cursor.y is tip.y and |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
39
diff
changeset
|
373 // the cursor.x is inside the tip |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
39
diff
changeset
|
374 Point cursorLocation = tip.getDisplay().getCursorLocation(); |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
39
diff
changeset
|
375 |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
39
diff
changeset
|
376 if( cursorLocation.y is location.y && location.x < cursorLocation.x && location.x + size.x > cursorLocation.x ) { |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
39
diff
changeset
|
377 location.y -= 2; |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
39
diff
changeset
|
378 } |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
39
diff
changeset
|
379 |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
39
diff
changeset
|
380 tip.setLocation(location); |
7
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
381 tip.setVisible(true); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
382 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
383 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
384 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
385 private Point fixupDisplayBounds(Point tipSize, Point location) { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
386 if (respectDisplayBounds || respectMonitorBounds) { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
387 Rectangle bounds; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
388 Point rightBounds = new Point(tipSize.x + location.x, tipSize.y |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
389 + location.y); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
390 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
391 dwt.widgets.Monitor.Monitor[] ms = control.getDisplay().getMonitors(); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
392 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
393 if (respectMonitorBounds && ms.length > 1) { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
394 // By default present in the monitor of the control |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
395 bounds = control.getMonitor().getBounds(); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
396 Point p = new Point(location.x, location.y); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
397 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
398 // Search on which monitor the event occurred |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
399 Rectangle tmp; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
400 for (int i = 0; i < ms.length; i++) { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
401 tmp = ms[i].getBounds(); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
402 if (tmp.contains(p)) { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
403 bounds = tmp; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
404 break; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
405 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
406 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
407 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
408 } else { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
409 bounds = control.getDisplay().getBounds(); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
410 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
411 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
412 if (!(bounds.contains(location) && bounds.contains(rightBounds))) { |
70
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
39
diff
changeset
|
413 if (rightBounds.x > bounds.x + bounds.width) { |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
39
diff
changeset
|
414 location.x -= rightBounds.x - (bounds.x + bounds.width); |
7
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
415 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
416 |
70
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
39
diff
changeset
|
417 if (rightBounds.y > bounds.y + bounds.height) { |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
39
diff
changeset
|
418 location.y -= rightBounds.y - (bounds.y + bounds.height); |
7
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
419 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
420 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
421 if (location.x < bounds.x) { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
422 location.x = bounds.x; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
423 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
424 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
425 if (location.y < bounds.y) { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
426 location.y = bounds.y; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
427 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
428 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
429 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
430 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
431 return location; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
432 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
433 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
434 /** |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
435 * Get the display relative location where the tooltip is displayed. |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
436 * Subclasses may overwrite to implement custom positioning. |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
437 * |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
438 * @param tipSize |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
439 * the size of the tooltip to be shown |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
440 * @param event |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
441 * the event triggered showing the tooltip |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
442 * @return the absolute position on the display |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
443 */ |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
444 public Point getLocation(Point tipSize, Event event) { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
445 return control.toDisplay(event.x + xShift, event.y + yShift); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
446 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
447 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
448 private void toolTipHide(Shell tip, Event event) { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
449 if (tip !is null && !tip.isDisposed() && shouldHideToolTip(event)) { |
70
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
39
diff
changeset
|
450 control.getShell().removeListener(DWT.Deactivate, shellListener); |
7
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
451 currentArea = null; |
70
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
39
diff
changeset
|
452 passOnEvent(tip,event); |
7
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
453 tip.dispose(); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
454 CURRENT_TOOLTIP = null; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
455 afterHideToolTip(event); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
456 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
457 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
458 |
70
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
39
diff
changeset
|
459 private void passOnEvent(Shell tip,Event event) { |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
39
diff
changeset
|
460 if ( control !is null && ! control.isDisposed() && event !is null && event.widget !is control && event.type is DWT.MouseDown) { |
71 | 461 Display display = control.getDisplay(); |
70
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
39
diff
changeset
|
462 Point newPt = display.map(tip, null, new Point(event.x, event.y)); |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
39
diff
changeset
|
463 |
71 | 464 Event newEvent = new Event(); |
70
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
39
diff
changeset
|
465 newEvent.button=event.button; |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
39
diff
changeset
|
466 newEvent.character=event.character; |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
39
diff
changeset
|
467 newEvent.count = event.count; |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
39
diff
changeset
|
468 newEvent.data=event.data; |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
39
diff
changeset
|
469 newEvent.detail=event.detail; |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
39
diff
changeset
|
470 newEvent.display=event.display; |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
39
diff
changeset
|
471 newEvent.doit=event.doit; |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
39
diff
changeset
|
472 newEvent.end=event.end; |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
39
diff
changeset
|
473 newEvent.gc=event.gc; |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
39
diff
changeset
|
474 newEvent.height=event.height; |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
39
diff
changeset
|
475 newEvent.index=event.index; |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
39
diff
changeset
|
476 newEvent.item=event.item; |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
39
diff
changeset
|
477 newEvent.keyCode=event.keyCode; |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
39
diff
changeset
|
478 newEvent.start=event.start; |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
39
diff
changeset
|
479 newEvent.stateMask=event.stateMask; |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
39
diff
changeset
|
480 newEvent.text=event.text; |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
39
diff
changeset
|
481 newEvent.time=event.time; |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
39
diff
changeset
|
482 newEvent.type=event.type; |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
39
diff
changeset
|
483 newEvent.widget=event.widget; |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
39
diff
changeset
|
484 newEvent.width=event.width; |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
39
diff
changeset
|
485 newEvent.x = newPt.x; |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
39
diff
changeset
|
486 newEvent.y = newPt.y; |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
39
diff
changeset
|
487 |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
39
diff
changeset
|
488 tip.close(); |
71 | 489 display.asyncExec(new class(display,newEvent) Runnable { |
490 Display display_; | |
491 Event newEvent_; | |
492 this( Display a, Event b ){ | |
493 display_=a; | |
494 newEvent_=b; | |
495 } | |
70
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
39
diff
changeset
|
496 public void run() { |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
39
diff
changeset
|
497 if( IS_OSX ) { |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
39
diff
changeset
|
498 try { |
71 | 499 Thread.sleep(0.300); |
70
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
39
diff
changeset
|
500 } catch (InterruptedException e) { |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
39
diff
changeset
|
501 |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
39
diff
changeset
|
502 } |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
39
diff
changeset
|
503 |
71 | 504 display_.post(newEvent_); |
505 newEvent_.type = DWT.MouseUp; | |
506 display_.post(newEvent_); | |
70
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
39
diff
changeset
|
507 } else { |
71 | 508 display_.post(newEvent_); |
70
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
39
diff
changeset
|
509 } |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
39
diff
changeset
|
510 } |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
39
diff
changeset
|
511 }); |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
39
diff
changeset
|
512 } |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
39
diff
changeset
|
513 } |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
39
diff
changeset
|
514 |
7
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
515 private void toolTipOpen(Shell shell, Event event) { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
516 // Ensure that only one Tooltip is shown in time |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
517 if (CURRENT_TOOLTIP !is null) { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
518 toolTipHide(CURRENT_TOOLTIP, null); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
519 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
520 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
521 CURRENT_TOOLTIP = shell; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
522 |
70
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
39
diff
changeset
|
523 control.getShell().addListener(DWT.Deactivate, shellListener); |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
39
diff
changeset
|
524 |
7
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
525 if (popupDelay > 0) { |
39 | 526 control.getDisplay().timerExec(popupDelay, new class(shell,event) Runnable { |
7
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
527 Shell shell_; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
528 Event event_; |
39 | 529 this(Shell a,Event b){ shell_=a; event_=b; } |
7
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
530 public void run() { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
531 toolTipShow(shell_, event_); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
532 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
533 }); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
534 } else { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
535 toolTipShow(CURRENT_TOOLTIP, event); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
536 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
537 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
538 if (hideDelay > 0) { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
539 control.getDisplay().timerExec(popupDelay + hideDelay, |
39 | 540 new class(shell) Runnable { |
7
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
541 Shell shell_; |
39 | 542 this(Shell a){ shell_=a; } |
7
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
543 public void run() { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
544 toolTipHide(shell, null); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
545 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
546 }); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
547 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
548 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
549 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
550 private void toolTipHookByTypeRecursively(Control c, bool add, int type) { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
551 if (add) { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
552 c.addListener(type, hideListener); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
553 } else { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
554 c.removeListener(type, hideListener); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
555 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
556 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
557 if ( auto c2 = cast(Composite)c ) { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
558 Control[] children = c2.getChildren(); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
559 for (int i = 0; i < children.length; i++) { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
560 toolTipHookByTypeRecursively(children[i], add, type); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
561 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
562 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
563 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
564 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
565 private void toolTipHookBothRecursively(Control c) { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
566 c.addListener(DWT.MouseDown, hideListener); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
567 c.addListener(DWT.MouseExit, hideListener); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
568 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
569 if ( auto comp = cast(Composite) c ) { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
570 Control[] children = comp.getChildren(); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
571 for (int i = 0; i < children.length; i++) { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
572 toolTipHookBothRecursively(children[i]); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
573 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
574 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
575 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
576 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
577 /** |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
578 * Creates the content area of the the tooltip. |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
579 * |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
580 * @param event |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
581 * the event that triggered the activation of the tooltip |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
582 * @param parent |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
583 * the parent of the content area |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
584 * @return the content area created |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
585 */ |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
586 protected abstract Composite createToolTipContentArea(Event event, |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
587 Composite parent); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
588 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
589 /** |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
590 * This method is called after a Tooltip is hidden. |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
591 * <p> |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
592 * <b>Subclasses may override to clean up requested system resources</b> |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
593 * </p> |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
594 * |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
595 * @param event |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
596 * event triggered the hiding action (may be <code>null</code> |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
597 * if event wasn't triggered by user actions directly) |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
598 */ |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
599 protected void afterHideToolTip(Event event) { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
600 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
601 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
602 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
603 /** |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
604 * Set the hide delay. |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
605 * |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
606 * @param hideDelay |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
607 * the delay before the tooltip is hidden. If <code>0</code> |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
608 * the tooltip is shown until user moves to other item |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
609 */ |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
610 public void setHideDelay(int hideDelay) { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
611 this.hideDelay = hideDelay; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
612 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
613 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
614 /** |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
615 * Set the popup delay. |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
616 * |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
617 * @param popupDelay |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
618 * the delay before the tooltip is shown to the user. If |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
619 * <code>0</code> the tooltip is shown immediately |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
620 */ |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
621 public void setPopupDelay(int popupDelay) { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
622 this.popupDelay = popupDelay; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
623 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
624 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
625 /** |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
626 * Return if hiding on mouse down is set. |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
627 * |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
628 * @return <code>true</code> if hiding on mouse down in the tool tip is on |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
629 */ |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
630 public bool isHideOnMouseDown() { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
631 return hideOnMouseDown; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
632 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
633 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
634 /** |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
635 * If you don't want the tool tip to be hidden when the user clicks inside |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
636 * the tool tip set this to <code>false</code>. You maybe also need to |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
637 * hide the tool tip yourself depending on what you do after clicking in the |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
638 * tooltip (e.g. if you open a new {@link Shell}) |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
639 * |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
640 * @param hideOnMouseDown |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
641 * flag to indicate of tooltip is hidden automatically on mouse |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
642 * down inside the tool tip |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
643 */ |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
644 public void setHideOnMouseDown(bool hideOnMouseDown) { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
645 // Only needed if there's currently a tooltip active |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
646 if (CURRENT_TOOLTIP !is null && !CURRENT_TOOLTIP.isDisposed()) { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
647 // Only change if value really changed |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
648 if (hideOnMouseDown !is this.hideOnMouseDown) { |
39 | 649 control.getDisplay().syncExec(new class(hideOnMouseDown) Runnable { |
7
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
650 bool hideOnMouseDown_; |
39 | 651 this(bool a){ hideOnMouseDown_=a; } |
7
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
652 public void run() { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
653 if (CURRENT_TOOLTIP !is null |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
654 && CURRENT_TOOLTIP.isDisposed()) { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
655 toolTipHookByTypeRecursively(CURRENT_TOOLTIP, |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
656 hideOnMouseDown_, DWT.MouseDown); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
657 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
658 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
659 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
660 }); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
661 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
662 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
663 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
664 this.hideOnMouseDown = hideOnMouseDown; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
665 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
666 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
667 /** |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
668 * Hide the currently active tool tip |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
669 */ |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
670 public void hide() { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
671 toolTipHide(CURRENT_TOOLTIP, null); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
672 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
673 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
674 private class ToolTipOwnerControlListener : Listener { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
675 public void handleEvent(Event event) { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
676 switch (event.type) { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
677 case DWT.Dispose: |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
678 case DWT.KeyDown: |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
679 case DWT.MouseDown: |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
680 case DWT.MouseMove: |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
681 toolTipHide(CURRENT_TOOLTIP, event); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
682 break; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
683 case DWT.MouseHover: |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
684 toolTipCreate(event); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
685 break; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
686 case DWT.MouseExit: |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
687 /* |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
688 * Check if the mouse exit happend because we move over the |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
689 * tooltip |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
690 */ |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
691 if (CURRENT_TOOLTIP !is null && !CURRENT_TOOLTIP.isDisposed()) { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
692 if (CURRENT_TOOLTIP.getBounds().contains( |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
693 control.toDisplay(event.x, event.y))) { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
694 break; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
695 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
696 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
697 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
698 toolTipHide(CURRENT_TOOLTIP, event); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
699 break; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
700 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
701 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
702 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
703 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
704 private class TooltipHideListener : Listener { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
705 public void handleEvent(Event event) { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
706 if ( auto c = cast(Control)event.widget ) { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
707 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
708 Shell shell = c.getShell(); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
709 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
710 switch (event.type) { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
711 case DWT.MouseDown: |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
712 if (isHideOnMouseDown()) { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
713 toolTipHide(shell, event); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
714 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
715 break; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
716 case DWT.MouseExit: |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
717 /* |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
718 * Give some insets to ensure we get exit informations from |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
719 * a wider area ;-) |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
720 */ |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
721 Rectangle rect = shell.getBounds(); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
722 rect.x += 5; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
723 rect.y += 5; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
724 rect.width -= 10; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
725 rect.height -= 10; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
726 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
727 if (!rect.contains(c.getDisplay().getCursorLocation())) { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
728 toolTipHide(shell, event); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
729 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
730 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
731 break; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
732 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
733 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
734 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
735 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
736 } |