comparison dwtx/jface/viewers/WrappedViewerLabelProvider.d @ 10:b6c35faf97c8

Viewers
author Frank Benoit <benoit@tionex.de>
date Mon, 31 Mar 2008 00:47:19 +0200
parents
children ea8ff534f622
comparison
equal deleted inserted replaced
9:6c14e54dfc11 10:b6c35faf97c8
1 /*******************************************************************************
2 * Copyright (c) 2006, 2007 IBM Corporation and others.
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.WrappedViewerLabelProvider;
15
16 import dwtx.jface.viewers.ColumnLabelProvider;
17 import dwtx.jface.viewers.ILabelProvider;
18 import dwtx.jface.viewers.IColorProvider;
19 import dwtx.jface.viewers.IFontProvider;
20 import dwtx.jface.viewers.IViewerLabelProvider;
21 import dwtx.jface.viewers.ITreePathLabelProvider;
22 import dwtx.jface.viewers.IBaseLabelProvider;
23 import dwtx.jface.viewers.ViewerCell;
24 import dwtx.jface.viewers.ViewerLabel;
25 import dwtx.jface.viewers.LabelProvider;
26 import dwtx.jface.viewers.TreePath;
27
28 import dwt.graphics.Color;
29 import dwt.graphics.Font;
30 import dwt.graphics.Image;
31 import dwtx.core.runtime.Assert;
32
33 import dwt.dwthelper.utils;
34
35 /**
36 * The WrappedViewerLabelProvider is a label provider that allows
37 * {@link ILabelProvider}, {@link IColorProvider} and {@link IFontProvider} to
38 * be mapped to a ColumnLabelProvider.
39 *
40 * @since 3.3
41 *
42 */
43 class WrappedViewerLabelProvider : ColumnLabelProvider {
44
45 private static ILabelProvider defaultLabelProvider;
46
47 static this(){
48 defaultLabelProvider = new LabelProvider();
49 }
50
51 private ILabelProvider labelProvider;
52
53 private IColorProvider colorProvider;
54
55 private IFontProvider fontProvider;
56
57 private IViewerLabelProvider viewerLabelProvider;
58
59 private ITreePathLabelProvider treePathLabelProvider;
60
61 /**
62 * Create a new instance of the receiver based on labelProvider.
63 *
64 * @param labelProvider
65 */
66 public this(IBaseLabelProvider labelProvider) {
67 super();
68 labelProvider = defaultLabelProvider;
69 setProviders(cast(Object)labelProvider);
70 }
71
72 /**
73 * Set the any providers for the receiver that can be adapted from provider.
74 *
75 * @param provider
76 * {@link Object}
77 */
78 public void setProviders(Object provider) {
79 if ( auto c = cast(ITreePathLabelProvider)provider )
80 treePathLabelProvider = c;
81
82 if ( auto c = cast(IViewerLabelProvider)provider )
83 viewerLabelProvider = c;
84
85 if ( auto c = cast(ILabelProvider)provider )
86 labelProvider = c;
87
88 if ( auto c = cast(IColorProvider)provider )
89 colorProvider = c;
90
91 if ( auto c = cast(IFontProvider)provider )
92 fontProvider = c;
93
94 }
95
96 /*
97 * (non-Javadoc)
98 *
99 * @see dwtx.jface.viewers.IFontProvider#getFont(java.lang.Object)
100 */
101 public Font getFont(Object element) {
102 if (fontProvider is null) {
103 return null;
104 }
105
106 return fontProvider.getFont(element);
107
108 }
109
110 /*
111 * (non-Javadoc)
112 *
113 * @see dwtx.jface.viewers.IColorProvider#getBackground(java.lang.Object)
114 */
115 public Color getBackground(Object element) {
116 if (colorProvider is null) {
117 return null;
118 }
119
120 return colorProvider.getBackground(element);
121 }
122
123 /*
124 * (non-Javadoc)
125 *
126 * @see dwtx.jface.viewers.ILabelProvider#getText(java.lang.Object)
127 */
128 public String getText(Object element) {
129 return getLabelProvider().getText(element);
130 }
131
132 /*
133 * (non-Javadoc)
134 *
135 * @see dwtx.jface.viewers.ILabelProvider#getImage(java.lang.Object)
136 */
137 public Image getImage(Object element) {
138 return getLabelProvider().getImage(element);
139 }
140
141 /*
142 * (non-Javadoc)
143 *
144 * @see dwtx.jface.viewers.IColorProvider#getForeground(java.lang.Object)
145 */
146 public Color getForeground(Object element) {
147 if (colorProvider is null) {
148 return null;
149 }
150
151 return colorProvider.getForeground(element);
152 }
153
154 /**
155 * Get the label provider
156 *
157 * @return {@link ILabelProvider}
158 */
159 ILabelProvider getLabelProvider() {
160 return labelProvider;
161 }
162
163 /**
164 * Get the color provider
165 *
166 * @return {@link IColorProvider}
167 */
168 IColorProvider getColorProvider() {
169 return colorProvider;
170 }
171
172 /**
173 * Get the font provider
174 *
175 * @return {@link IFontProvider}.
176 */
177 IFontProvider getFontProvider() {
178 return fontProvider;
179 }
180
181 public void update(ViewerCell cell) {
182 Object element = cell.getElement();
183 if(viewerLabelProvider is null && treePathLabelProvider is null){
184 // inlined super implementation with performance optimizations
185 cell.setText(getText(element));
186 Image image = getImage(element);
187 cell.setImage(image);
188 if (colorProvider !is null) {
189 cell.setBackground(getBackground(element));
190 cell.setForeground(getForeground(element));
191 }
192 if (fontProvider !is null) {
193 cell.setFont(getFont(element));
194 }
195 return;
196 }
197
198 ViewerLabel label = new ViewerLabel(cell.getText(), cell.getImage());
199
200 if (treePathLabelProvider !is null) {
201 TreePath treePath = cell.getViewerRow().getTreePath();
202
203 Assert.isNotNull(treePath);
204 treePathLabelProvider.updateLabel(label, treePath);
205 } else if (viewerLabelProvider !is null) {
206 viewerLabelProvider.updateLabel(label, element);
207 }
208 if (!label.hasNewForeground() && colorProvider !is null)
209 label.setForeground(getForeground(element));
210
211 if (!label.hasNewBackground() && colorProvider !is null)
212 label.setBackground(getBackground(element));
213
214 if (!label.hasNewFont() && fontProvider !is null)
215 label.setFont(getFont(element));
216
217 applyViewerLabel(cell, label);
218 }
219
220 private void applyViewerLabel(ViewerCell cell, ViewerLabel label) {
221 if (label.hasNewText()) {
222 cell.setText(label.getText());
223 }
224 if (label.hasNewImage()) {
225 cell.setImage(label.getImage());
226 }
227 if (colorProvider!is null || label.hasNewBackground()) {
228 cell.setBackground(label.getBackground());
229 }
230 if (colorProvider!is null || label.hasNewForeground()) {
231 cell.setForeground(label.getForeground());
232 }
233 if (fontProvider!is null || label.hasNewFont()) {
234 cell.setFont(label.getFont());
235 }
236 }
237 }