Mercurial > projects > dwt-addons
annotate dwtx/jface/window/ToolTip.d @ 72:5df4896124c7
JFace and its examples do compile
author | Frank Benoit <benoit@tionex.de> |
---|---|
date | Thu, 22 May 2008 17:56:17 +0200 |
parents | 4878bef4a38e |
children | 7ffeace6c47f |
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; |
72
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
71
diff
changeset
|
37 import tango.core.Thread; |
7
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 */ |
72
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
71
diff
changeset
|
110 public this(Control control_, int style, bool manualActivation) { |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
71
diff
changeset
|
111 this.control = control_; |
7
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 { |
72
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
71
diff
changeset
|
125 public void handleEvent(Event event) { |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
71
diff
changeset
|
126 if( control_ !is null && ! control_.isDisposed() ) { |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
71
diff
changeset
|
127 control_.getDisplay().asyncExec( dgRunnable( (Event event_){ |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
71
diff
changeset
|
128 // Check if the new active shell is the tooltip itself |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
71
diff
changeset
|
129 if( control_.getDisplay().getActiveShell() !is CURRENT_TOOLTIP) { |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
71
diff
changeset
|
130 toolTipHide(CURRENT_TOOLTIP, event_); |
70
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
39
diff
changeset
|
131 } |
72
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
71
diff
changeset
|
132 }, event)); |
70
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 } |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
39
diff
changeset
|
135 }; |
7
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
136 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
137 if (!manualActivation) { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
138 activate(); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
139 } |
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 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
142 /** |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
143 * Restore arbitary data under the given key |
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 * @param key |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
146 * the key |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
147 * @param value |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
148 * the value |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
149 */ |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
150 public void setData(String key, Object value) { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
151 if (data is null) { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
152 data = new HashMap!(String,Object); |
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 data.add(key, value); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
155 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
156 |
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 * Get the data restored under the key |
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 * @param key |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
161 * the key |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
162 * @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
|
163 */ |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
164 public Object getData(String key) { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
165 if (data !is null) { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
166 return data.get(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 return null; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
169 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
170 |
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 * 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
|
173 * 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
|
174 * left |
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 * @param p |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
177 * the new shift |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
178 */ |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
179 public void setShift(Point p) { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
180 xShift = p.x; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
181 yShift = p.y; |
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 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
184 /** |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
185 * Activate tooltip support for this control |
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 public void activate() { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
188 deactivate(); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
189 control.addListener(DWT.Dispose, listener); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
190 control.addListener(DWT.MouseHover, listener); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
191 control.addListener(DWT.MouseMove, listener); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
192 control.addListener(DWT.MouseExit, listener); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
193 control.addListener(DWT.MouseDown, listener); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
194 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
195 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
196 /** |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
197 * Deactivate tooltip support for the underlying control |
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 public void deactivate() { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
200 control.removeListener(DWT.Dispose, listener); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
201 control.removeListener(DWT.MouseHover, listener); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
202 control.removeListener(DWT.MouseMove, listener); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
203 control.removeListener(DWT.MouseExit, listener); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
204 control.removeListener(DWT.MouseDown, listener); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
205 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
206 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
207 /** |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
208 * Return whther the tooltip respects bounds of the display. |
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 * @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
|
211 */ |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
212 public bool isRespectDisplayBounds() { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
213 return respectDisplayBounds; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
214 } |
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 /** |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
217 * 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
|
218 * 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
|
219 * overlap the display bounds. |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
220 * <p> |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
221 * Default is <code>true</code> |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
222 * </p> |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
223 * |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
224 * @param respectDisplayBounds |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
225 */ |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
226 public void setRespectDisplayBounds(bool respectDisplayBounds) { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
227 this.respectDisplayBounds = respectDisplayBounds; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
228 } |
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 /** |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
231 * Return whther the tooltip respects bounds of the monitor. |
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 * @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
|
234 */ |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
235 public bool isRespectMonitorBounds() { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
236 return respectMonitorBounds; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
237 } |
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 /** |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
240 * 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
|
241 * 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
|
242 * 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
|
243 * 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
|
244 * <p> |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
245 * Default is <code>true</code> |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
246 * </p> |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
247 * |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
248 * @param respectMonitorBounds |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
249 */ |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
250 public void setRespectMonitorBounds(bool respectMonitorBounds) { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
251 this.respectMonitorBounds = respectMonitorBounds; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
252 } |
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 /** |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
255 * Should the tooltip displayed because of the given event. |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
256 * <p> |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
257 * <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
|
258 * </p> |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
259 * |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
260 * @param event |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
261 * the event |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
262 * @return <code>true</code> if tooltip should be displayed |
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 protected bool shouldCreateToolTip(Event event) { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
265 if ((style & NO_RECREATE) !is 0) { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
266 Object tmp = getToolTipArea(event); |
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 // No new area close the current tooltip |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
269 if (tmp is null) { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
270 hide(); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
271 return false; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
272 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
273 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
274 bool rv = !tmp.opEquals(currentArea); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
275 return rv; |
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 return true; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
279 } |
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 * This method is called before the tooltip is hidden |
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 * @param event |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
285 * the event trying to hide the tooltip |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
286 * @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
|
287 */ |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
288 private bool shouldHideToolTip(Event event) { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
289 if (event !is null && event.type is DWT.MouseMove |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
290 && (style & NO_RECREATE) !is 0) { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
291 Object tmp = getToolTipArea(event); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
292 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
293 // No new area close the current tooltip |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
294 if (tmp is null) { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
295 hide(); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
296 return false; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
297 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
298 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
299 bool rv = !tmp.opEquals(currentArea); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
300 return rv; |
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 return true; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
304 } |
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 * 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
|
308 * 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
|
309 * decide if the tooltip is hidden recreated. |
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 * <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
|
312 * 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
|
313 * |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
314 * @param event |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
315 * the event |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
316 * @return the area responsible for the tooltip creation or |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
317 * <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
|
318 * (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
|
319 * 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
|
320 * {@link ViewerCell}) |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
321 */ |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
322 protected Object getToolTipArea(Event event) { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
323 return control; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
324 } |
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 /** |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
327 * Start up the tooltip programmatically |
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 * @param location |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
330 * 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
|
331 */ |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
332 public void show(Point location) { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
333 Event event = new Event(); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
334 event.x = location.x; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
335 event.y = location.y; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
336 event.widget = control; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
337 toolTipCreate(event); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
338 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
339 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
340 private Shell toolTipCreate(Event event) { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
341 if (shouldCreateToolTip(event)) { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
342 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
|
343 | DWT.NO_FOCUS); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
344 shell.setLayout(new FillLayout()); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
345 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
346 toolTipOpen(shell, event); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
347 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
348 return shell; |
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 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
351 return null; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
352 } |
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 private void toolTipShow(Shell tip, Event event) { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
355 if (!tip.isDisposed()) { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
356 currentArea = getToolTipArea(event); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
357 createToolTipContentArea(event, tip); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
358 if (isHideOnMouseDown()) { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
359 toolTipHookBothRecursively(tip); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
360 } else { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
361 toolTipHookByTypeRecursively(tip, true, DWT.MouseExit); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
362 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
363 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
364 tip.pack(); |
70
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
39
diff
changeset
|
365 Point size = tip.getSize(); |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
39
diff
changeset
|
366 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
|
367 |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
39
diff
changeset
|
368 // 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
|
369 // 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
|
370 Point cursorLocation = tip.getDisplay().getCursorLocation(); |
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 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
|
373 location.y -= 2; |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
39
diff
changeset
|
374 } |
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 tip.setLocation(location); |
7
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
377 tip.setVisible(true); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
378 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
379 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
380 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
381 private Point fixupDisplayBounds(Point tipSize, Point location) { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
382 if (respectDisplayBounds || respectMonitorBounds) { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
383 Rectangle bounds; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
384 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
|
385 + location.y); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
386 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
387 dwt.widgets.Monitor.Monitor[] ms = control.getDisplay().getMonitors(); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
388 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
389 if (respectMonitorBounds && ms.length > 1) { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
390 // By default present in the monitor of the control |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
391 bounds = control.getMonitor().getBounds(); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
392 Point p = new Point(location.x, location.y); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
393 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
394 // Search on which monitor the event occurred |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
395 Rectangle tmp; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
396 for (int i = 0; i < ms.length; i++) { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
397 tmp = ms[i].getBounds(); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
398 if (tmp.contains(p)) { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
399 bounds = tmp; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
400 break; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
401 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
402 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
403 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
404 } else { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
405 bounds = control.getDisplay().getBounds(); |
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 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
|
409 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
|
410 location.x -= rightBounds.x - (bounds.x + bounds.width); |
7
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 |
70
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
39
diff
changeset
|
413 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
|
414 location.y -= rightBounds.y - (bounds.y + bounds.height); |
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 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
417 if (location.x < bounds.x) { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
418 location.x = bounds.x; |
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.y < bounds.y) { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
422 location.y = bounds.y; |
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 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
426 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
427 return location; |
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 * 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
|
432 * Subclasses may overwrite to implement custom positioning. |
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 * @param tipSize |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
435 * the size of the tooltip to be shown |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
436 * @param event |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
437 * the event triggered showing the tooltip |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
438 * @return the absolute position on the display |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
439 */ |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
440 public Point getLocation(Point tipSize, Event event) { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
441 return control.toDisplay(event.x + xShift, event.y + yShift); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
442 } |
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 private void toolTipHide(Shell tip, Event event) { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
445 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
|
446 control.getShell().removeListener(DWT.Deactivate, shellListener); |
7
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
447 currentArea = null; |
70
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
39
diff
changeset
|
448 passOnEvent(tip,event); |
7
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
449 tip.dispose(); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
450 CURRENT_TOOLTIP = null; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
451 afterHideToolTip(event); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
452 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
453 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
454 |
70
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
39
diff
changeset
|
455 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
|
456 if ( control !is null && ! control.isDisposed() && event !is null && event.widget !is control && event.type is DWT.MouseDown) { |
71 | 457 Display display = control.getDisplay(); |
70
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
39
diff
changeset
|
458 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
|
459 |
71 | 460 Event newEvent = new Event(); |
70
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
39
diff
changeset
|
461 newEvent.button=event.button; |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
39
diff
changeset
|
462 newEvent.character=event.character; |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
39
diff
changeset
|
463 newEvent.count = event.count; |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
39
diff
changeset
|
464 newEvent.data=event.data; |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
39
diff
changeset
|
465 newEvent.detail=event.detail; |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
39
diff
changeset
|
466 newEvent.display=event.display; |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
39
diff
changeset
|
467 newEvent.doit=event.doit; |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
39
diff
changeset
|
468 newEvent.end=event.end; |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
39
diff
changeset
|
469 newEvent.gc=event.gc; |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
39
diff
changeset
|
470 newEvent.height=event.height; |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
39
diff
changeset
|
471 newEvent.index=event.index; |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
39
diff
changeset
|
472 newEvent.item=event.item; |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
39
diff
changeset
|
473 newEvent.keyCode=event.keyCode; |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
39
diff
changeset
|
474 newEvent.start=event.start; |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
39
diff
changeset
|
475 newEvent.stateMask=event.stateMask; |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
39
diff
changeset
|
476 newEvent.text=event.text; |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
39
diff
changeset
|
477 newEvent.time=event.time; |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
39
diff
changeset
|
478 newEvent.type=event.type; |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
39
diff
changeset
|
479 newEvent.widget=event.widget; |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
39
diff
changeset
|
480 newEvent.width=event.width; |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
39
diff
changeset
|
481 newEvent.x = newPt.x; |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
39
diff
changeset
|
482 newEvent.y = newPt.y; |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
39
diff
changeset
|
483 |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
39
diff
changeset
|
484 tip.close(); |
71 | 485 display.asyncExec(new class(display,newEvent) Runnable { |
486 Display display_; | |
487 Event newEvent_; | |
488 this( Display a, Event b ){ | |
489 display_=a; | |
490 newEvent_=b; | |
491 } | |
70
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
39
diff
changeset
|
492 public void run() { |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
39
diff
changeset
|
493 if( IS_OSX ) { |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
39
diff
changeset
|
494 try { |
71 | 495 Thread.sleep(0.300); |
70
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
39
diff
changeset
|
496 } catch (InterruptedException e) { |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
39
diff
changeset
|
497 |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
39
diff
changeset
|
498 } |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
39
diff
changeset
|
499 |
71 | 500 display_.post(newEvent_); |
501 newEvent_.type = DWT.MouseUp; | |
502 display_.post(newEvent_); | |
70
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
39
diff
changeset
|
503 } else { |
71 | 504 display_.post(newEvent_); |
70
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
39
diff
changeset
|
505 } |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
39
diff
changeset
|
506 } |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
39
diff
changeset
|
507 }); |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
39
diff
changeset
|
508 } |
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 |
7
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
511 private void toolTipOpen(Shell shell, Event event) { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
512 // Ensure that only one Tooltip is shown in time |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
513 if (CURRENT_TOOLTIP !is null) { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
514 toolTipHide(CURRENT_TOOLTIP, null); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
515 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
516 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
517 CURRENT_TOOLTIP = shell; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
518 |
70
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
39
diff
changeset
|
519 control.getShell().addListener(DWT.Deactivate, shellListener); |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
39
diff
changeset
|
520 |
7
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
521 if (popupDelay > 0) { |
39 | 522 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
|
523 Shell shell_; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
524 Event event_; |
39 | 525 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
|
526 public void run() { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
527 toolTipShow(shell_, event_); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
528 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
529 }); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
530 } else { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
531 toolTipShow(CURRENT_TOOLTIP, 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 if (hideDelay > 0) { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
535 control.getDisplay().timerExec(popupDelay + hideDelay, |
39 | 536 new class(shell) Runnable { |
7
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
537 Shell shell_; |
39 | 538 this(Shell a){ shell_=a; } |
7
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
539 public void run() { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
540 toolTipHide(shell, null); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
541 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
542 }); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
543 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
544 } |
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 private void toolTipHookByTypeRecursively(Control c, bool add, int type) { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
547 if (add) { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
548 c.addListener(type, hideListener); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
549 } else { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
550 c.removeListener(type, hideListener); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
551 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
552 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
553 if ( auto c2 = cast(Composite)c ) { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
554 Control[] children = c2.getChildren(); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
555 for (int i = 0; i < children.length; i++) { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
556 toolTipHookByTypeRecursively(children[i], add, type); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
557 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
558 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
559 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
560 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
561 private void toolTipHookBothRecursively(Control c) { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
562 c.addListener(DWT.MouseDown, hideListener); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
563 c.addListener(DWT.MouseExit, hideListener); |
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 if ( auto comp = cast(Composite) c ) { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
566 Control[] children = comp.getChildren(); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
567 for (int i = 0; i < children.length; i++) { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
568 toolTipHookBothRecursively(children[i]); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
569 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
570 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
571 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
572 |
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 * Creates the content area of the the tooltip. |
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 * @param event |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
577 * the event that triggered the activation of the tooltip |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
578 * @param parent |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
579 * the parent of the content area |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
580 * @return the content area created |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
581 */ |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
582 protected abstract Composite createToolTipContentArea(Event event, |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
583 Composite parent); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
584 |
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 * This method is called after a Tooltip is hidden. |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
587 * <p> |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
588 * <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
|
589 * </p> |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
590 * |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
591 * @param event |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
592 * 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
|
593 * if event wasn't triggered by user actions directly) |
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 protected void afterHideToolTip(Event event) { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
596 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
597 } |
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 /** |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
600 * Set the hide delay. |
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 * @param hideDelay |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
603 * 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
|
604 * 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
|
605 */ |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
606 public void setHideDelay(int hideDelay) { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
607 this.hideDelay = hideDelay; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
608 } |
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 /** |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
611 * Set the popup delay. |
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 * @param popupDelay |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
614 * 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
|
615 * <code>0</code> the tooltip is shown immediately |
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 public void setPopupDelay(int popupDelay) { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
618 this.popupDelay = popupDelay; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
619 } |
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 /** |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
622 * Return if hiding on mouse down is set. |
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 * @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
|
625 */ |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
626 public bool isHideOnMouseDown() { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
627 return hideOnMouseDown; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
628 } |
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 /** |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
631 * 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
|
632 * 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
|
633 * 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
|
634 * 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
|
635 * |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
636 * @param hideOnMouseDown |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
637 * 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
|
638 * down inside the tool tip |
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 public void setHideOnMouseDown(bool hideOnMouseDown) { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
641 // Only needed if there's currently a tooltip active |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
642 if (CURRENT_TOOLTIP !is null && !CURRENT_TOOLTIP.isDisposed()) { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
643 // Only change if value really changed |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
644 if (hideOnMouseDown !is this.hideOnMouseDown) { |
39 | 645 control.getDisplay().syncExec(new class(hideOnMouseDown) Runnable { |
7
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
646 bool hideOnMouseDown_; |
39 | 647 this(bool a){ hideOnMouseDown_=a; } |
7
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
648 public void run() { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
649 if (CURRENT_TOOLTIP !is null |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
650 && CURRENT_TOOLTIP.isDisposed()) { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
651 toolTipHookByTypeRecursively(CURRENT_TOOLTIP, |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
652 hideOnMouseDown_, DWT.MouseDown); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
653 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
654 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
655 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
656 }); |
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 this.hideOnMouseDown = hideOnMouseDown; |
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 * Hide the currently active tool tip |
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 public void hide() { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
667 toolTipHide(CURRENT_TOOLTIP, null); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
668 } |
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 private class ToolTipOwnerControlListener : Listener { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
671 public void handleEvent(Event event) { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
672 switch (event.type) { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
673 case DWT.Dispose: |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
674 case DWT.KeyDown: |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
675 case DWT.MouseDown: |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
676 case DWT.MouseMove: |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
677 toolTipHide(CURRENT_TOOLTIP, event); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
678 break; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
679 case DWT.MouseHover: |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
680 toolTipCreate(event); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
681 break; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
682 case DWT.MouseExit: |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
683 /* |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
684 * 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
|
685 * tooltip |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
686 */ |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
687 if (CURRENT_TOOLTIP !is null && !CURRENT_TOOLTIP.isDisposed()) { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
688 if (CURRENT_TOOLTIP.getBounds().contains( |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
689 control.toDisplay(event.x, event.y))) { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
690 break; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
691 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
692 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
693 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
694 toolTipHide(CURRENT_TOOLTIP, event); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
695 break; |
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 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
699 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
700 private class TooltipHideListener : Listener { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
701 public void handleEvent(Event event) { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
702 if ( auto c = cast(Control)event.widget ) { |
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 Shell shell = c.getShell(); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
705 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
706 switch (event.type) { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
707 case DWT.MouseDown: |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
708 if (isHideOnMouseDown()) { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
709 toolTipHide(shell, event); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
710 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
711 break; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
712 case DWT.MouseExit: |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
713 /* |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
714 * 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
|
715 * a wider area ;-) |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
716 */ |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
717 Rectangle rect = shell.getBounds(); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
718 rect.x += 5; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
719 rect.y += 5; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
720 rect.width -= 10; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
721 rect.height -= 10; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
722 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
723 if (!rect.contains(c.getDisplay().getCursorLocation())) { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
724 toolTipHide(shell, event); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
725 } |
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 break; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
728 } |
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 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
732 } |