Merge xdebug 1.3.x
[phpeclipse.git] / net.sourceforge.phpeclipse / src / net / sourceforge / phpdt / ui / JavaElementLabelProvider.java
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.ui;
12
13 import net.sourceforge.phpdt.internal.ui.viewsupport.JavaElementImageProvider;
14 import net.sourceforge.phpdt.internal.ui.viewsupport.JavaElementLabels;
15 import net.sourceforge.phpdt.internal.ui.viewsupport.StorageLabelProvider;
16
17 import org.eclipse.core.resources.IStorage;
18 import org.eclipse.jface.viewers.LabelProvider;
19 import org.eclipse.swt.graphics.Image;
20
21 /**
22  * Standard label provider for Java elements. Use this class when you want to
23  * present the Java elements in a viewer.
24  * <p>
25  * The implementation also handles non-Java elements by forwarding the requests
26  * to the <code>IWorkbenchAdapter</code> of the element.
27  * </p>
28  * <p>
29  * This class may be instantiated; it is not intended to be subclassed.
30  * </p>
31  */
32 public class JavaElementLabelProvider extends LabelProvider {
33
34         /**
35          * Flag (bit mask) indicating that methods labels include the method return
36          * type. (appended)
37          */
38         public final static int SHOW_RETURN_TYPE = 0x001;
39
40         /**
41          * Flag (bit mask) indicating that method label include method parameter
42          * types.
43          */
44         public final static int SHOW_PARAMETERS = 0x002;
45
46         /**
47          * Flag (bit mask) indicating that the label of a member should include the
48          * container. For example, include the name of the type enclosing a field.
49          * 
50          * @deprecated Use SHOW_QUALIFIED or SHOW_ROOT instead
51          */
52         public final static int SHOW_CONTAINER = 0x004;
53
54         /**
55          * Flag (bit mask) indicating that the label of a type should be fully
56          * qualified. For example, include the fully qualified name of the type
57          * enclosing a type.
58          * 
59          * @deprecated Use SHOW_QUALIFIED instead
60          */
61         public final static int SHOW_CONTAINER_QUALIFICATION = 0x008;
62
63         /**
64          * Flag (bit mask) indicating that the label should include overlay icons
65          * for element type and modifiers.
66          */
67         public final static int SHOW_OVERLAY_ICONS = 0x010;
68
69         /**
70          * Flag (bit mask) indicating thata field label should include the declared
71          * type.
72          */
73         public final static int SHOW_TYPE = 0x020;
74
75         /**
76          * Flag (bit mask) indicating that the label should include the name of the
77          * package fragment root (appended).
78          */
79         public final static int SHOW_ROOT = 0x040;
80
81         /**
82          * Flag (bit mask) indicating that the label qualification of a type should
83          * be shown after the name.
84          * 
85          * @deprecated SHOW_POST_QUALIFIED instead
86          */
87         public final static int SHOW_POSTIFIX_QUALIFICATION = 0x080;
88
89         /**
90          * Flag (bit mask) indicating that the label should show the icons with no
91          * space reserved for overlays.
92          */
93         public final static int SHOW_SMALL_ICONS = 0x100;
94
95         /**
96          * Flag (bit mask) indicating that the packagefragment roots from variables
97          * should be rendered with the variable in the name
98          */
99         public final static int SHOW_VARIABLE = 0x200;
100
101         /**
102          * Flag (bit mask) indicating that Complation Units, Class Files, Types,
103          * Declarations and Members should be rendered qualified. Examples:
104          * java.lang.String, java.util.Vector.size()
105          * 
106          * @since 2.0
107          */
108         public final static int SHOW_QUALIFIED = 0x400;
109
110         /**
111          * Flag (bit mask) indicating that Complation Units, Class Files, Types,
112          * Declarations and Members should be rendered qualified. The qualifcation
113          * is appended Examples: String - java.lang, size() - java.util.Vector
114          * 
115          * @since 2.0
116          */
117         public final static int SHOW_POST_QUALIFIED = 0x800;
118
119         /**
120          * Constant (value <code>0</code>) indicating that the label should show
121          * the basic images only.
122          */
123         public final static int SHOW_BASICS = 0x000;
124
125         /**
126          * Constant indicating the default label rendering. Currently the default is
127          * equivalent to <code>SHOW_PARAMETERS | SHOW_OVERLAY_ICONS</code>.
128          */
129         public final static int SHOW_DEFAULT = new Integer(SHOW_PARAMETERS
130                         | SHOW_OVERLAY_ICONS).intValue();
131
132         private JavaElementImageProvider fImageLabelProvider;
133
134         private StorageLabelProvider fStorageLabelProvider;
135
136         private int fFlags;
137
138         private int fImageFlags;
139
140         private int fTextFlags;
141
142         /**
143          * Creates a new label provider with <code>SHOW_DEFAULT</code> flag.
144          * 
145          * @see #SHOW_DEFAULT
146          * @since 2.0
147          */
148         public JavaElementLabelProvider() {
149                 this(SHOW_DEFAULT);
150         }
151
152         /**
153          * Creates a new label provider.
154          * 
155          * @param flags
156          *            the initial options; a bitwise OR of <code>SHOW_* </code>
157          *            constants
158          */
159         public JavaElementLabelProvider(int flags) {
160                 fImageLabelProvider = new JavaElementImageProvider();
161                 fStorageLabelProvider = new StorageLabelProvider();
162                 fFlags = flags;
163                 updateImageProviderFlags();
164                 updateTextProviderFlags();
165         }
166
167         private boolean getFlag(int flag) {
168                 return (fFlags & flag) != 0;
169         }
170
171         /**
172          * Turns on the rendering options specified in the given flags.
173          * 
174          * @param flags
175          *            the options; a bitwise OR of <code>SHOW_* </code> constants
176          */
177         public void turnOn(int flags) {
178                 fFlags |= flags;
179                 updateImageProviderFlags();
180                 updateTextProviderFlags();
181         }
182
183         /**
184          * Turns off the rendering options specified in the given flags.
185          * 
186          * @param flags
187          *            the initial options; a bitwise OR of <code>SHOW_* </code>
188          *            constants
189          */
190         public void turnOff(int flags) {
191                 fFlags &= (~flags);
192                 updateImageProviderFlags();
193                 updateTextProviderFlags();
194         }
195
196         private void updateImageProviderFlags() {
197                 fImageFlags = 0;
198                 if (getFlag(SHOW_OVERLAY_ICONS)) {
199                         fImageFlags |= JavaElementImageProvider.OVERLAY_ICONS;
200                 }
201                 if (getFlag(SHOW_SMALL_ICONS)) {
202                         fImageFlags |= JavaElementImageProvider.SMALL_ICONS;
203                 }
204         }
205
206         private void updateTextProviderFlags() {
207                 fTextFlags = 0;
208                 if (getFlag(SHOW_RETURN_TYPE)) {
209                         fTextFlags |= JavaElementLabels.M_APP_RETURNTYPE;
210                 }
211                 if (getFlag(SHOW_PARAMETERS)) {
212                         fTextFlags |= JavaElementLabels.M_PARAMETER_TYPES;
213                 }
214                 if (getFlag(SHOW_CONTAINER)) {
215                         fTextFlags |= JavaElementLabels.P_POST_QUALIFIED
216                                         | JavaElementLabels.T_POST_QUALIFIED
217                                         | JavaElementLabels.CF_POST_QUALIFIED
218                                         | JavaElementLabels.CU_POST_QUALIFIED
219                                         | JavaElementLabels.M_POST_QUALIFIED
220                                         | JavaElementLabels.F_POST_QUALIFIED;
221                 }
222                 if (getFlag(SHOW_POSTIFIX_QUALIFICATION)) {
223                         fTextFlags |= (JavaElementLabels.T_POST_QUALIFIED
224                                         | JavaElementLabels.CF_POST_QUALIFIED | JavaElementLabels.CU_POST_QUALIFIED);
225                 } else if (getFlag(SHOW_CONTAINER_QUALIFICATION)) {
226                         fTextFlags |= (JavaElementLabels.T_FULLY_QUALIFIED
227                                         | JavaElementLabels.CF_QUALIFIED | JavaElementLabels.CU_QUALIFIED);
228                 }
229                 if (getFlag(SHOW_TYPE)) {
230                         fTextFlags |= JavaElementLabels.F_APP_TYPE_SIGNATURE;
231                 }
232                 if (getFlag(SHOW_ROOT)) {
233                         fTextFlags |= JavaElementLabels.APPEND_ROOT_PATH;
234                 }
235                 if (getFlag(SHOW_VARIABLE)) {
236                         fTextFlags |= JavaElementLabels.ROOT_VARIABLE;
237                 }
238                 if (getFlag(SHOW_QUALIFIED)) {
239                         fTextFlags |= (JavaElementLabels.F_FULLY_QUALIFIED
240                                         | JavaElementLabels.M_FULLY_QUALIFIED
241                                         | JavaElementLabels.I_FULLY_QUALIFIED
242                                         | JavaElementLabels.T_FULLY_QUALIFIED
243                                         | JavaElementLabels.D_QUALIFIED
244                                         | JavaElementLabels.CF_QUALIFIED | JavaElementLabels.CU_QUALIFIED);
245                 }
246                 if (getFlag(SHOW_POST_QUALIFIED)) {
247                         fTextFlags |= (JavaElementLabels.F_POST_QUALIFIED
248                                         | JavaElementLabels.M_POST_QUALIFIED
249                                         | JavaElementLabels.I_POST_QUALIFIED
250                                         | JavaElementLabels.T_POST_QUALIFIED
251                                         | JavaElementLabels.D_POST_QUALIFIED
252                                         | JavaElementLabels.CF_POST_QUALIFIED | JavaElementLabels.CU_POST_QUALIFIED);
253                 }
254         }
255
256         /*
257          * (non-Javadoc)
258          * 
259          * @see ILabelProvider#getImage
260          */
261         public Image getImage(Object element) {
262                 Image result = fImageLabelProvider.getImageLabel(element, fImageFlags);
263                 if (result != null) {
264                         return result;
265                 }
266
267                 if (element instanceof IStorage)
268                         return fStorageLabelProvider.getImage(element);
269
270                 return result;
271         }
272
273         /*
274          * (non-Javadoc)
275          * 
276          * @see ILabelProvider#getText
277          */
278         public String getText(Object element) {
279                 String text = JavaElementLabels.getTextLabel(element, fTextFlags);
280                 if (text.length() > 0) {
281                         return text;
282                 }
283
284                 if (element instanceof IStorage)
285                         return fStorageLabelProvider.getText(element);
286
287                 return text;
288         }
289
290         /*
291          * (non-Javadoc)
292          * 
293          * @see IBaseLabelProvider#dispose
294          */
295         public void dispose() {
296                 fStorageLabelProvider.dispose();
297                 fImageLabelProvider.dispose();
298         }
299 }