Mercurial > projects > dwt-addons
annotate dwtx/jface/viewers/ColumnViewerToolTipSupport.d @ 90:7ffeace6c47f
Update 3.4M7 to 3.4
author | Frank Benoit <benoit@tionex.de> |
---|---|
date | Sun, 06 Jul 2008 23:30:07 +0200 |
parents | 5df4896124c7 |
children |
rev | line source |
---|---|
10 | 1 /******************************************************************************* |
70
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
2 * Copyright (c) 2006, 2008 IBM Corporation and others. |
10 | 3 * All rights reserved. This program and the accompanying materials |
4 * are made available under the terms of the Eclipse Public License v1.0 | |
5 * which accompanies this distribution, and is available at | |
6 * http://www.eclipse.org/legal/epl-v10.html | |
7 * | |
8 * Contributors: | |
9 * IBM Corporation - initial API and implementation | |
10 * 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:
43
diff
changeset
|
11 * bugfix in: 195137, 198089 |
10 | 12 * Fredy Dobler <fredy@dobler.net> - bug 159600 |
13 * Brock Janiczak <brockj@tpg.com.au> - bug 182443 | |
14 * Port to the D programming language: | |
15 * Frank Benoit <benoit@tionex.de> | |
16 *******************************************************************************/ | |
17 | |
18 module dwtx.jface.viewers.ColumnViewerToolTipSupport; | |
19 | |
20 import dwtx.jface.viewers.ColumnViewer; | |
21 import dwtx.jface.viewers.ViewerRow; | |
22 import dwtx.jface.viewers.ViewerColumn; | |
72
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
70
diff
changeset
|
23 import dwtx.jface.viewers.ViewerCell; |
10 | 24 import dwtx.jface.viewers.CellLabelProvider; |
25 import dwtx.jface.viewers.StructuredSelection; | |
26 | |
27 import dwt.graphics.Image; | |
28 import dwt.graphics.Point; | |
70
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
29 import dwt.widgets.Composite; |
10 | 30 import dwt.widgets.Event; |
31 import dwtx.jface.util.Policy; | |
32 import dwtx.jface.window.DefaultToolTip; | |
33 import dwtx.jface.window.ToolTip; | |
34 | |
35 import dwt.dwthelper.utils; | |
36 | |
37 /** | |
70
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
38 * The ColumnViewerTooltipSupport is the class that provides tool tips for |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
39 * ColumnViewers. |
10 | 40 * |
41 * @since 3.3 | |
42 * | |
43 */ | |
44 public class ColumnViewerToolTipSupport : DefaultToolTip { | |
45 private ColumnViewer viewer; | |
46 | |
70
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
47 private static const String VIEWER_CELL_KEY = Policy.JFACE |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
48 ~ "_VIEWER_CELL_KEY"; //$NON-NLS-1$ |
10 | 49 |
50 private static const int DEFAULT_SHIFT_X = 10; | |
51 | |
52 private static const int DEFAULT_SHIFT_Y = 0; | |
53 | |
54 /** | |
55 * Enable ToolTip support for the viewer by creating an instance from this | |
56 * class. To get all necessary informations this support class consults the | |
57 * {@link CellLabelProvider}. | |
58 * | |
59 * @param viewer | |
60 * the viewer the support is attached to | |
70
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
61 * @param style |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
62 * style passed to control tool tip behavior |
10 | 63 * |
64 * @param manualActivation | |
65 * <code>true</code> if the activation is done manually using | |
66 * {@link #show(Point)} | |
67 */ | |
70
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
68 protected this(ColumnViewer viewer, int style, |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
69 bool manualActivation) { |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
70 super(viewer.getControl(), style, manualActivation); |
10 | 71 this.viewer = viewer; |
72 } | |
73 | |
74 /** | |
75 * Enable ToolTip support for the viewer by creating an instance from this | |
76 * class. To get all necessary informations this support class consults the | |
77 * {@link CellLabelProvider}. | |
78 * | |
79 * @param viewer | |
80 * the viewer the support is attached to | |
81 */ | |
82 public static void enableFor(ColumnViewer viewer) { | |
70
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
83 new ColumnViewerToolTipSupport(viewer, ToolTip.NO_RECREATE, false); |
10 | 84 } |
85 | |
86 /** | |
87 * Enable ToolTip support for the viewer by creating an instance from this | |
88 * class. To get all necessary informations this support class consults the | |
89 * {@link CellLabelProvider}. | |
90 * | |
91 * @param viewer | |
92 * the viewer the support is attached to | |
70
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
93 * @param style |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
94 * style passed to control tool tip behavior |
10 | 95 * |
96 * @see ToolTip#RECREATE | |
97 * @see ToolTip#NO_RECREATE | |
98 */ | |
99 public static void enableFor(ColumnViewer viewer, int style) { | |
70
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
100 new ColumnViewerToolTipSupport(viewer, style, false); |
10 | 101 } |
102 | |
43
ea8ff534f622
Fix override and super aliases
Frank Benoit <benoit@tionex.de>
parents:
10
diff
changeset
|
103 protected override Object getToolTipArea(Event event) { |
70
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
104 return viewer.getCell(new Point(event.x, event.y)); |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
105 } |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
106 |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
107 /** |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
108 * Instead of overwriting this method subclasses should overwrite |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
109 * {@link #createViewerToolTipContentArea(Event, ViewerCell, Composite)} |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
110 */ |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
111 protected Composite createToolTipContentArea(Event event, Composite parent) { |
72
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
70
diff
changeset
|
112 ViewerCell cell = cast(ViewerCell) getData(VIEWER_CELL_KEY); |
70
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
113 setData(VIEWER_CELL_KEY, null); |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
114 |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
115 return createViewerToolTipContentArea(event, cell, parent); |
10 | 116 } |
117 | |
70
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
118 /** |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
119 * Creates the content area of the tool tip giving access to the cell the |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
120 * tip is shown for. Subclasses can overload this method to implement their |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
121 * own tool tip design. |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
122 * |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
123 * <p> |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
124 * This method is called from |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
125 * {@link #createToolTipContentArea(Event, Composite)} and by default calls |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
126 * the {@link DefaultToolTip#createToolTipContentArea(Event, Composite)}. |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
127 * </p> |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
128 * |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
129 * @param event |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
130 * the event that which |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
131 * @param cell |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
132 * the cell the tool tip is shown for |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
133 * @param parent |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
134 * the parent of the control to create |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
135 * @return the control to be displayed in the tool tip area |
90 | 136 * @since 3.4 |
70
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
137 */ |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
138 protected Composite createViewerToolTipContentArea(Event event, |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
139 ViewerCell cell, Composite parent) { |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
140 return super.createToolTipContentArea(event, parent); |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
141 } |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
142 |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
143 protected override bool shouldCreateToolTip(Event event) { |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
144 if (!super.shouldCreateToolTip(event)) { |
10 | 145 return false; |
146 } | |
147 | |
148 bool rv = false; | |
149 | |
150 ViewerRow row = viewer.getViewerRow_package(new Point(event.x, event.y)); | |
151 | |
152 viewer.getControl().setToolTipText(""); //$NON-NLS-1$ | |
153 Point point = new Point(event.x, event.y); | |
154 | |
155 if (row !is null) { | |
156 Object element = row.getItem().getData(); | |
157 | |
70
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
158 ViewerCell cell = row.getCell(point); |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
159 ViewerColumn viewPart = viewer.getViewerColumn(cell |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
160 .getColumnIndex()); |
10 | 161 |
162 if (viewPart is null) { | |
163 return false; | |
164 } | |
165 | |
166 CellLabelProvider labelProvider = viewPart.getLabelProvider(); | |
167 bool useNative = labelProvider.useNativeToolTip(element); | |
168 | |
169 String text = labelProvider.getToolTipText(element); | |
170 Image img = null; | |
171 | |
70
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
172 if (!useNative) { |
10 | 173 img = labelProvider.getToolTipImage(element); |
174 } | |
175 | |
70
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
176 if (useNative || (text is null && img is null)) { |
10 | 177 viewer.getControl().setToolTipText(text); |
178 rv = false; | |
179 } else { | |
180 setPopupDelay(labelProvider.getToolTipDisplayDelayTime(element)); | |
181 setHideDelay(labelProvider.getToolTipTimeDisplayed(element)); | |
182 | |
183 Point shift = labelProvider.getToolTipShift(element); | |
184 | |
185 if (shift is null) { | |
186 setShift(new Point(DEFAULT_SHIFT_X, DEFAULT_SHIFT_Y)); | |
187 } else { | |
188 setShift(new Point(shift.x, shift.y)); | |
189 } | |
190 | |
70
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
191 setData(VIEWER_CELL_KEY, cell); |
10 | 192 |
193 setText(text); | |
194 setImage(img); | |
195 setStyle(labelProvider.getToolTipStyle(element)); | |
70
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
196 setForegroundColor(labelProvider |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
197 .getToolTipForegroundColor(element)); |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
198 setBackgroundColor(labelProvider |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
199 .getToolTipBackgroundColor(element)); |
10 | 200 setFont(labelProvider.getToolTipFont(element)); |
201 | |
202 // Check if at least one of the values is set | |
203 rv = getText(event) !is null || getImage(event) !is null; | |
204 } | |
205 } | |
206 | |
207 return rv; | |
208 } | |
209 | |
43
ea8ff534f622
Fix override and super aliases
Frank Benoit <benoit@tionex.de>
parents:
10
diff
changeset
|
210 protected override void afterHideToolTip(Event event) { |
70
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
211 super.afterHideToolTip(event); |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
212 // Clear the restored value else this could be a source of a leak |
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
213 setData(VIEWER_CELL_KEY, null); |
10 | 214 if (event !is null && event.widget !is viewer.getControl()) { |
70
46a6e0e6ccd4
Merge with d-fied sources of 3.4M7
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
215 viewer.getControl().setFocus(); |
10 | 216 } |
217 } | |
218 } |