abe10ec64c11c95d39890976f4fd5c2c5baa2f73
[phpeclipse.git] /
1 /*******************************************************************************
2  * Copyright (c) 2000, 2003 IBM Corporation and others.
3  * All rights reserved. This program and the accompanying materials 
4  * are made available under the terms of the Common Public License v1.0
5  * which accompanies this distribution, and is available at
6  * http://www.eclipse.org/legal/cpl-v10.html
7  * 
8  * Contributors:
9  *     IBM Corporation - initial API and implementation
10  *******************************************************************************/
11 package net.sourceforge.phpdt.internal.ui.viewsupport;
12
13 import java.util.ArrayList;
14
15 import org.eclipse.core.resources.IStorage;
16 import org.eclipse.jface.viewers.ILabelDecorator;
17 import org.eclipse.jface.viewers.ILabelProviderListener;
18 import org.eclipse.jface.viewers.LabelProvider;
19 import org.eclipse.swt.graphics.Image;
20
21 public class JavaUILabelProvider extends LabelProvider {
22
23         protected JavaElementImageProvider fImageLabelProvider;
24
25         protected StorageLabelProvider fStorageLabelProvider;
26
27         protected ArrayList fLabelDecorators;
28
29         private int fImageFlags;
30
31         private int fTextFlags;
32
33         /**
34          * Creates a new label provider with default flags.
35          */
36         public JavaUILabelProvider() {
37                 this(JavaElementLabels.M_PARAMETER_TYPES,
38                                 JavaElementImageProvider.OVERLAY_ICONS);
39         }
40
41         /**
42          * @param textFlags
43          *            Flags defined in <code>JavaElementLabels</code>.
44          * @param imageFlags
45          *            Flags defined in <code>JavaElementImageProvider</code>.
46          */
47         public JavaUILabelProvider(int textFlags, int imageFlags) {
48                 fImageLabelProvider = new JavaElementImageProvider();
49                 fLabelDecorators = null;
50
51                 fStorageLabelProvider = new StorageLabelProvider();
52                 fImageFlags = imageFlags;
53                 fTextFlags = textFlags;
54         }
55
56         /**
57          * Adds a decorator to the label provider
58          */
59         public void addLabelDecorator(ILabelDecorator decorator) {
60                 if (fLabelDecorators == null) {
61                         fLabelDecorators = new ArrayList(2);
62                 }
63                 fLabelDecorators.add(decorator);
64         }
65
66         /**
67          * Sets the textFlags.
68          * 
69          * @param textFlags
70          *            The textFlags to set
71          */
72         public final void setTextFlags(int textFlags) {
73                 fTextFlags = textFlags;
74         }
75
76         /**
77          * Sets the imageFlags
78          * 
79          * @param imageFlags
80          *            The imageFlags to set
81          */
82         public final void setImageFlags(int imageFlags) {
83                 fImageFlags = imageFlags;
84         }
85
86         /**
87          * Gets the image flags. Can be overwriten by super classes.
88          * 
89          * @return Returns a int
90          */
91         public final int getImageFlags() {
92                 return fImageFlags;
93         }
94
95         /**
96          * Gets the text flags.
97          * 
98          * @return Returns a int
99          */
100         public final int getTextFlags() {
101                 return fTextFlags;
102         }
103
104         /**
105          * Evaluates the image flags for a element. Can be overwriten by super
106          * classes.
107          * 
108          * @return Returns a int
109          */
110         protected int evaluateImageFlags(Object element) {
111                 return getImageFlags();
112         }
113
114         /**
115          * Evaluates the text flags for a element. Can be overwriten by super
116          * classes.
117          * 
118          * @return Returns a int
119          */
120         protected int evaluateTextFlags(Object element) {
121                 return getTextFlags();
122         }
123
124         /*
125          * (non-Javadoc)
126          * 
127          * @see ILabelProvider#getImage
128          */
129         public Image getImage(Object element) {
130                 Image result = fImageLabelProvider.getImageLabel(element,
131                                 evaluateImageFlags(element));
132                 if (result == null && (element instanceof IStorage)) {
133                         result = fStorageLabelProvider.getImage(element);
134                 }
135                 if (fLabelDecorators != null && result != null) {
136                         for (int i = 0; i < fLabelDecorators.size(); i++) {
137                                 ILabelDecorator decorator = (ILabelDecorator) fLabelDecorators
138                                                 .get(i);
139                                 result = decorator.decorateImage(result, element);
140                         }
141                 }
142                 return result;
143         }
144
145         /*
146          * (non-Javadoc)
147          * 
148          * @see ILabelProvider#getText
149          */
150         public String getText(Object element) {
151                 String result = JavaElementLabels.getTextLabel(element,
152                                 evaluateTextFlags(element));
153                 if (result.length() == 0 && (element instanceof IStorage)) {
154                         result = fStorageLabelProvider.getText(element);
155                 }
156                 if (fLabelDecorators != null && result.length() > 0) {
157                         for (int i = 0; i < fLabelDecorators.size(); i++) {
158                                 ILabelDecorator decorator = (ILabelDecorator) fLabelDecorators
159                                                 .get(i);
160                                 result = decorator.decorateText(result, element);
161                         }
162                 }
163                 return result;
164         }
165
166         /*
167          * (non-Javadoc)
168          * 
169          * @see IBaseLabelProvider#dispose
170          */
171         public void dispose() {
172                 if (fLabelDecorators != null) {
173                         for (int i = 0; i < fLabelDecorators.size(); i++) {
174                                 ILabelDecorator decorator = (ILabelDecorator) fLabelDecorators
175                                                 .get(i);
176                                 decorator.dispose();
177                         }
178                         fLabelDecorators = null;
179                 }
180                 fStorageLabelProvider.dispose();
181                 fImageLabelProvider.dispose();
182         }
183
184         /*
185          * (non-Javadoc)
186          * 
187          * @see IBaseLabelProvider#addListener(ILabelProviderListener)
188          */
189         public void addListener(ILabelProviderListener listener) {
190                 if (fLabelDecorators != null) {
191                         for (int i = 0; i < fLabelDecorators.size(); i++) {
192                                 ILabelDecorator decorator = (ILabelDecorator) fLabelDecorators
193                                                 .get(i);
194                                 decorator.addListener(listener);
195                         }
196                 }
197                 super.addListener(listener);
198         }
199
200         /*
201          * (non-Javadoc)
202          * 
203          * @see IBaseLabelProvider#isLabelProperty(Object, String)
204          */
205         public boolean isLabelProperty(Object element, String property) {
206                 return true;
207         }
208
209         /*
210          * (non-Javadoc)
211          * 
212          * @see IBaseLabelProvider#removeListener(ILabelProviderListener)
213          */
214         public void removeListener(ILabelProviderListener listener) {
215                 if (fLabelDecorators != null) {
216                         for (int i = 0; i < fLabelDecorators.size(); i++) {
217                                 ILabelDecorator decorator = (ILabelDecorator) fLabelDecorators
218                                                 .get(i);
219                                 decorator.removeListener(listener);
220                         }
221                 }
222                 super.removeListener(listener);
223         }
224
225         public static ILabelDecorator[] getDecorators(boolean errortick,
226                         ILabelDecorator extra) {
227                 if (errortick) {
228                         if (extra == null) {
229                                 return new ILabelDecorator[] {};
230                         } else {
231                                 return new ILabelDecorator[] { extra };
232                         }
233                 }
234                 if (extra != null) {
235                         return new ILabelDecorator[] { extra };
236                 }
237                 return null;
238         }
239
240 }