Mercurial > projects > dwt-addons
annotate dwtx/jface/viewers/OwnerDrawLabelProvider.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 | ea8ff534f622 |
children | 04b47443bb01 |
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; | |
72
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
29 import tango.util.collection.HashSet; |
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 { |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
47 HashSet!(ViewerColumn) enabledColumns; |
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) { |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
52 enabledColumns = new HashSet!(ViewerColumn); |
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; |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
74 } |
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 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
|
81 |
10 | 82 /** |
83 * Set up the owner draw callbacks for the viewer. | |
84 * | |
85 * @param viewer | |
86 * 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
|
87 * |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
88 * @deprecated Since 3.4, the default implementation of |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
89 * {@link CellLabelProvider#initialize(ColumnViewer, ViewerColumn)} |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
90 * 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
|
91 * automatically. Calls to this method can be removed. |
10 | 92 */ |
93 public static void setUpOwnerDraw(ColumnViewer viewer) { | |
72
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
94 getOrCreateOwnerDrawListener(viewer).enabledGlobally++; |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
95 } |
10 | 96 |
72
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
97 /** |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
98 * @param viewer |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
99 * @param control |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
100 * @return |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
101 */ |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
102 private static OwnerDrawListener getOrCreateOwnerDrawListener( |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
103 ColumnViewer viewer) { |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
104 Control control = viewer.getControl(); |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
105 OwnerDrawListener listener = cast(OwnerDrawListener) control |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
106 .getData(OWNER_DRAW_LABEL_PROVIDER_LISTENER); |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
107 if (listener is null) { |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
108 listener = new OwnerDrawListener(viewer); |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
109 control.setData(OWNER_DRAW_LABEL_PROVIDER_LISTENER, listener); |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
110 control.addListener(DWT.MeasureItem, listener); |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
111 control.addListener(DWT.EraseItem, listener); |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
112 control.addListener(DWT.PaintItem, listener); |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
113 } |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
114 return listener; |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
115 } |
10 | 116 |
72
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
117 /** |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
118 * 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
|
119 * |
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 public this() { |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
122 |
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 public void dispose(ColumnViewer viewer, ViewerColumn column) { |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
126 if (!viewer.getControl().isDisposed()) { |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
127 setOwnerDrawEnabled(viewer, column, false); |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
128 } |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
129 super.dispose(viewer, column); |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
130 } |
10 | 131 |
72
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
132 /** |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
133 * This implementation of |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
134 * {@link CellLabelProvider#initialize(ColumnViewer, ViewerColumn)} |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
135 * delegates to {@link #initialize(ColumnViewer, ViewerColumn, bool)} |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
136 * 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
|
137 * 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
|
138 * implementation or, alternatively, |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
139 * {@link #initialize(ColumnViewer, ViewerColumn, bool)}. |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
140 */ |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
141 protected void initialize(ColumnViewer viewer, ViewerColumn column) { |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
142 this.initialize(viewer, column, true); |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
143 } |
10 | 144 |
72
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
145 /** |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
146 * May be called from subclasses that override |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
147 * {@link #initialize(ColumnViewer, ViewerColumn)} but want to customize |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
148 * 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
|
149 * <code>super.initialize(ColumnViewer, ViewerColumn)</code>, and then |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
150 * enables or disables owner draw by calling |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
151 * {@link #setOwnerDrawEnabled(ColumnViewer, ViewerColumn, bool)}. |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
152 * |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
153 * @param viewer |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
154 * the viewer |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
155 * @param column |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
156 * 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
|
157 * available. |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
158 * @param enableOwnerDraw |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
159 * <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
|
160 * given viewer and column, <code>false</code> otherwise. |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
161 * |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
162 * @since 3.4 |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
163 */ |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
164 final protected void initialize(ColumnViewer viewer, ViewerColumn column, |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
165 bool enableOwnerDraw) { |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
166 super.initialize(viewer, column); |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
167 setOwnerDrawEnabled(viewer, column, enableOwnerDraw); |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
168 } |
10 | 169 |
72
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
170 public void update(ViewerCell cell) { |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
171 // Force a redraw |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
172 Rectangle cellBounds = cell.getBounds(); |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
173 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
|
174 cellBounds.height, true); |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
175 |
10 | 176 } |
177 | |
178 /** | |
179 * Handle the erase event. The default implementation colors the background | |
180 * 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
|
181 * 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
|
182 * 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
|
183 * 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
|
184 * implementation. |
10 | 185 * |
186 * @param event | |
187 * the erase event | |
188 * @param element | |
189 * the model object | |
190 * @see DWT#EraseItem | |
191 * @see DWT#COLOR_LIST_SELECTION | |
192 * @see DWT#COLOR_LIST_SELECTION_TEXT | |
193 */ | |
194 protected void erase(Event event, Object element) { | |
195 | |
196 Rectangle bounds = event.getBounds(); | |
197 if ((event.detail & DWT.SELECTED) !is 0) { | |
198 | |
199 Color oldForeground = event.gc.getForeground(); | |
200 Color oldBackground = event.gc.getBackground(); | |
201 | |
202 event.gc.setBackground(event.item.getDisplay().getSystemColor( | |
203 DWT.COLOR_LIST_SELECTION)); | |
204 event.gc.setForeground(event.item.getDisplay().getSystemColor( | |
205 DWT.COLOR_LIST_SELECTION_TEXT)); | |
206 event.gc.fillRectangle(bounds); | |
207 /* restore the old GC colors */ | |
208 event.gc.setForeground(oldForeground); | |
209 event.gc.setBackground(oldBackground); | |
210 /* ensure that default selection is not drawn */ | |
211 event.detail &= ~DWT.SELECTED; | |
212 | |
213 } | |
214 | |
215 } | |
216 | |
217 /** | |
218 * Handle the measure event. | |
219 * | |
220 * @param event | |
221 * the measure event | |
222 * @param element | |
223 * the model element | |
224 * @see DWT#MeasureItem | |
225 */ | |
226 protected abstract void measure(Event event, Object element); | |
227 | |
228 /** | |
72
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
229 * Handle the paint event. |
10 | 230 * |
72
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
231 * @param event |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
232 * the paint event |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
233 * @param element |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
234 * the model element |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
235 * @see DWT#PaintItem |
10 | 236 */ |
72
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
237 protected abstract void paint(Event event, Object element); |
10 | 238 |
72
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
239 /** |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
240 * 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
|
241 * 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
|
242 * necessary. This method is called from |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
243 * {@link #initialize(ColumnViewer, ViewerColumn)} and |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
244 * {@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
|
245 * subclasses to enable or disable owner draw dynamically. |
10 | 246 * |
72
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
247 * @param viewer |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
248 * the viewer |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
249 * @param column |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
250 * 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
|
251 * available |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
252 * @param enabled |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
253 * <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
|
254 * <code>false</code> otherwise |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
255 * |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
256 * @since 3.4 |
10 | 257 */ |
72
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
258 protected void setOwnerDrawEnabled(ColumnViewer viewer, |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
259 ViewerColumn column, bool enabled) { |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
260 if (enabled) { |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
261 OwnerDrawListener listener = getOrCreateOwnerDrawListener(viewer); |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
262 if (column is null) { |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
263 listener.enabledGlobally++; |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
264 } else { |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
265 listener.enabledColumns.add(column); |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
266 } |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
267 } else { |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
268 OwnerDrawListener listener = cast(OwnerDrawListener) viewer |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
269 .getControl().getData(OWNER_DRAW_LABEL_PROVIDER_LISTENER); |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
270 if (listener !is null) { |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
271 if (column is null) { |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
272 listener.enabledGlobally--; |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
273 } else { |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
274 listener.enabledColumns.remove(column); |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
275 } |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
276 if (listener.enabledColumns.drained() |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
277 && listener.enabledGlobally <= 0) { |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
278 viewer.getControl().removeListener(DWT.MeasureItem, |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
279 listener); |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
280 viewer.getControl().removeListener(DWT.EraseItem, listener); |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
281 viewer.getControl().removeListener(DWT.PaintItem, listener); |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
282 viewer.getControl().setData( |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
283 OWNER_DRAW_LABEL_PROVIDER_LISTENER, null); |
5df4896124c7
JFace and its examples do compile
Frank Benoit <benoit@tionex.de>
parents:
43
diff
changeset
|
284 } |
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 } |
10 | 287 } |
288 | |
289 } |