Mercurial > projects > dwt-addons
annotate dwtx/jface/viewers/OwnerDrawLabelProvider.d @ 200:eb3414669eb0 default tip
fix for dmd 1.041 and tango 0.99.8
author | Frank Benoit <benoit@tionex.de> |
---|---|
date | Sat, 28 Mar 2009 03:09:57 +0100 |
parents | c3583c6ec027 |
children |
rev | line source |
---|---|
10 | 1 /******************************************************************************* |
72
5df4896124c7
JFace and its examples do compile
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 * Port to the D programming language: | |
11 * Frank Benoit <benoit@tionex.de> | |
12 *******************************************************************************/ | |
13 | |
14 module dwtx.jface.viewers.OwnerDrawLabelProvider; | |
15 | |
16 import dwtx.jface.viewers.CellLabelProvider; | |
17 import dwtx.jface.viewers.ColumnViewer; | |
18 import dwtx.jface.viewers.ViewerCell; | |
72
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
19 import dwtx.jface.viewers.ViewerColumn; |
10 | 20 |
21 import dwt.DWT; | |
22 import dwt.graphics.Color; | |
23 import dwt.graphics.Rectangle; | |
72
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
24 import dwt.widgets.Control; |
10 | 25 import dwt.widgets.Event; |
26 import dwt.widgets.Listener; | |
27 | |
28 import dwt.dwthelper.utils; | |
104
04b47443bb01
Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents:
72
diff
changeset
|
29 import dwtx.dwtxhelper.Collection; |
10 | 30 |
31 /** | |
32 * OwnerDrawLabelProvider is an abstract implementation of a label provider that | |
33 * handles custom draw. | |
34 * | |
35 * <p> | |
36 * <b>This class is intended to be subclassed by implementors.</b> | |
37 * </p> | |
38 * | |
39 * @since 3.3 | |
40 * | |
41 */ | |
42 public abstract class OwnerDrawLabelProvider : CellLabelProvider { | |
43 | |
72
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
44 alias CellLabelProvider.dispose dispose; |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
45 |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
46 static class OwnerDrawListener : Listener { |
104
04b47443bb01
Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents:
72
diff
changeset
|
47 Set enabledColumns; |
72
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
48 int enabledGlobally = 0; |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
49 private ColumnViewer viewer; |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
50 |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
51 this(ColumnViewer viewer) { |
104
04b47443bb01
Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents:
72
diff
changeset
|
52 enabledColumns = new HashSet(); |
72
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
53 this.viewer = viewer; |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
54 } |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
55 |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
56 public void handleEvent(Event event) { |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
57 CellLabelProvider provider = viewer.getViewerColumn(event.index) |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
58 .getLabelProvider(); |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
59 ViewerColumn column = viewer.getViewerColumn(event.index); |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
60 if (enabledGlobally > 0 || enabledColumns.contains(column)) { |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
61 if (null !is cast(OwnerDrawLabelProvider)provider ) { |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
62 Object element = event.item.getData(); |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
63 OwnerDrawLabelProvider ownerDrawProvider = cast(OwnerDrawLabelProvider) provider; |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
64 switch (event.type) { |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
65 case DWT.MeasureItem: |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
66 ownerDrawProvider.measure(event, element); |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
67 break; |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
68 case DWT.PaintItem: |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
69 ownerDrawProvider.paint(event, element); |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
70 break; |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
71 case DWT.EraseItem: |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
72 ownerDrawProvider.erase(event, element); |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
73 break; |
192
c3583c6ec027
Added missing default cases for switch statements
Frank Benoit <benoit@tionex.de>
parents:
104
diff
changeset
|
74 default: |
72
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
75 } |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
76 } |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
77 } |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
78 } |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
79 } |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
80 |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
81 private static const String OWNER_DRAW_LABEL_PROVIDER_LISTENER = "owner_draw_label_provider_listener"; //$NON-NLS-1$ |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
82 |
10 | 83 /** |
84 * Set up the owner draw callbacks for the viewer. | |
85 * | |
86 * @param viewer | |
87 * the viewer the owner draw is set up | |
72
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
88 * |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
89 * @deprecated Since 3.4, the default implementation of |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
90 * {@link CellLabelProvider#initialize(ColumnViewer, ViewerColumn)} |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
91 * in this class will set up the necessary owner draw callbacks |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
92 * automatically. Calls to this method can be removed. |
10 | 93 */ |
94 public static void setUpOwnerDraw(ColumnViewer viewer) { | |
72
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
95 getOrCreateOwnerDrawListener(viewer).enabledGlobally++; |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
96 } |
10 | 97 |
72
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
98 /** |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
99 * @param viewer |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
100 * @param control |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
101 * @return |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
102 */ |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
103 private static OwnerDrawListener getOrCreateOwnerDrawListener( |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
104 ColumnViewer viewer) { |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
105 Control control = viewer.getControl(); |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
106 OwnerDrawListener listener = cast(OwnerDrawListener) control |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
107 .getData(OWNER_DRAW_LABEL_PROVIDER_LISTENER); |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
108 if (listener is null) { |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
109 listener = new OwnerDrawListener(viewer); |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
110 control.setData(OWNER_DRAW_LABEL_PROVIDER_LISTENER, listener); |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
111 control.addListener(DWT.MeasureItem, listener); |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
112 control.addListener(DWT.EraseItem, listener); |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
113 control.addListener(DWT.PaintItem, listener); |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
114 } |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
115 return listener; |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
116 } |
10 | 117 |
72
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
118 /** |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
119 * Create a new instance of the receiver based on a column viewer. |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
120 * |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
121 */ |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
122 public this() { |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
123 |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
124 } |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
125 |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
126 public void dispose(ColumnViewer viewer, ViewerColumn column) { |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
127 if (!viewer.getControl().isDisposed()) { |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
128 setOwnerDrawEnabled(viewer, column, false); |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
129 } |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
130 super.dispose(viewer, column); |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
131 } |
10 | 132 |
72
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
133 /** |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
134 * This implementation of |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
135 * {@link CellLabelProvider#initialize(ColumnViewer, ViewerColumn)} |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
136 * delegates to {@link #initialize(ColumnViewer, ViewerColumn, bool)} |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
137 * with a value of <code>true</code> for <code>enableOwnerDraw</code>. |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
138 * Subclasses may override this method but should either call the super |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
139 * implementation or, alternatively, |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
140 * {@link #initialize(ColumnViewer, ViewerColumn, bool)}. |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
141 */ |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
142 protected void initialize(ColumnViewer viewer, ViewerColumn column) { |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
143 this.initialize(viewer, column, true); |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
144 } |
10 | 145 |
72
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
146 /** |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
147 * May be called from subclasses that override |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
148 * {@link #initialize(ColumnViewer, ViewerColumn)} but want to customize |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
149 * whether owner draw will be enabled. This method calls |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
150 * <code>super.initialize(ColumnViewer, ViewerColumn)</code>, and then |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
151 * enables or disables owner draw by calling |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
152 * {@link #setOwnerDrawEnabled(ColumnViewer, ViewerColumn, bool)}. |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
153 * |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
154 * @param viewer |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
155 * the viewer |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
156 * @param column |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
157 * the column, or <code>null</code> if a column is not |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
158 * available. |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
159 * @param enableOwnerDraw |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
160 * <code>true</code> if owner draw should be enabled for the |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
161 * given viewer and column, <code>false</code> otherwise. |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
162 * |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
163 * @since 3.4 |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
164 */ |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
165 final protected void initialize(ColumnViewer viewer, ViewerColumn column, |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
166 bool enableOwnerDraw) { |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
167 super.initialize(viewer, column); |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
168 setOwnerDrawEnabled(viewer, column, enableOwnerDraw); |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
169 } |
10 | 170 |
72
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
171 public void update(ViewerCell cell) { |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
172 // Force a redraw |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
173 Rectangle cellBounds = cell.getBounds(); |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
174 cell.getControl().redraw(cellBounds.x, cellBounds.y, cellBounds.width, |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
175 cellBounds.height, true); |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
176 |
10 | 177 } |
178 | |
179 /** | |
180 * Handle the erase event. The default implementation colors the background | |
181 * of selected areas with {@link DWT#COLOR_LIST_SELECTION} and foregrounds | |
72
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
182 * with {@link DWT#COLOR_LIST_SELECTION_TEXT}. Note that this |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
183 * implementation causes non-native behavior on some platforms. Subclasses |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
184 * should override this method and <b>not</b> call the super |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
185 * implementation. |
10 | 186 * |
187 * @param event | |
188 * the erase event | |
189 * @param element | |
190 * the model object | |
191 * @see DWT#EraseItem | |
192 * @see DWT#COLOR_LIST_SELECTION | |
193 * @see DWT#COLOR_LIST_SELECTION_TEXT | |
194 */ | |
195 protected void erase(Event event, Object element) { | |
196 | |
197 Rectangle bounds = event.getBounds(); | |
198 if ((event.detail & DWT.SELECTED) !is 0) { | |
199 | |
200 Color oldForeground = event.gc.getForeground(); | |
201 Color oldBackground = event.gc.getBackground(); | |
202 | |
203 event.gc.setBackground(event.item.getDisplay().getSystemColor( | |
204 DWT.COLOR_LIST_SELECTION)); | |
205 event.gc.setForeground(event.item.getDisplay().getSystemColor( | |
206 DWT.COLOR_LIST_SELECTION_TEXT)); | |
207 event.gc.fillRectangle(bounds); | |
208 /* restore the old GC colors */ | |
209 event.gc.setForeground(oldForeground); | |
210 event.gc.setBackground(oldBackground); | |
211 /* ensure that default selection is not drawn */ | |
212 event.detail &= ~DWT.SELECTED; | |
213 | |
214 } | |
215 | |
216 } | |
217 | |
218 /** | |
219 * Handle the measure event. | |
220 * | |
221 * @param event | |
222 * the measure event | |
223 * @param element | |
224 * the model element | |
225 * @see DWT#MeasureItem | |
226 */ | |
227 protected abstract void measure(Event event, Object element); | |
228 | |
229 /** | |
72
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
230 * Handle the paint event. |
10 | 231 * |
72
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
232 * @param event |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
233 * the paint event |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
234 * @param element |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
235 * the model element |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
236 * @see DWT#PaintItem |
10 | 237 */ |
72
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
238 protected abstract void paint(Event event, Object element); |
10 | 239 |
72
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
240 /** |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
241 * Enables or disables owner draw for the given viewer and column. This |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
242 * method will attach or remove a listener to the underlying control as |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
243 * necessary. This method is called from |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
244 * {@link #initialize(ColumnViewer, ViewerColumn)} and |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
245 * {@link #dispose(ColumnViewer, ViewerColumn)} but may be called from |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
246 * subclasses to enable or disable owner draw dynamically. |
10 | 247 * |
72
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
248 * @param viewer |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
249 * the viewer |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
250 * @param column |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
251 * the column, or <code>null</code> if a column is not |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
252 * available |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
253 * @param enabled |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
254 * <code>true</code> if owner draw should be enabled, |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
255 * <code>false</code> otherwise |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
256 * |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
257 * @since 3.4 |
10 | 258 */ |
72
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
259 protected void setOwnerDrawEnabled(ColumnViewer viewer, |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
260 ViewerColumn column, bool enabled) { |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
261 if (enabled) { |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
262 OwnerDrawListener listener = getOrCreateOwnerDrawListener(viewer); |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
263 if (column is null) { |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
264 listener.enabledGlobally++; |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
265 } else { |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
266 listener.enabledColumns.add(column); |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
267 } |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
268 } else { |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
269 OwnerDrawListener listener = cast(OwnerDrawListener) viewer |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
270 .getControl().getData(OWNER_DRAW_LABEL_PROVIDER_LISTENER); |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
271 if (listener !is null) { |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
272 if (column is null) { |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
273 listener.enabledGlobally--; |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
274 } else { |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
275 listener.enabledColumns.remove(column); |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
276 } |
104
04b47443bb01
Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents:
72
diff
changeset
|
277 if (listener.enabledColumns.isEmpty() |
72
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
278 && listener.enabledGlobally <= 0) { |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
279 viewer.getControl().removeListener(DWT.MeasureItem, |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
280 listener); |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
281 viewer.getControl().removeListener(DWT.EraseItem, listener); |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
282 viewer.getControl().removeListener(DWT.PaintItem, listener); |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
283 viewer.getControl().setData( |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
284 OWNER_DRAW_LABEL_PROVIDER_LISTENER, null); |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
285 } |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
286 } |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
287 } |
10 | 288 } |
289 | |
290 } |