new version with WorkingCopy Management
[phpeclipse.git] / net.sourceforge.phpeclipse / src / net / sourceforge / phpdt / internal / ui / viewsupport / JavaUILabelProvider.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.internal.ui.viewsupport;
12
13 import java.util.ArrayList;
14
15 import org.eclipse.core.resources.IStorage;
16
17 import org.eclipse.swt.graphics.Image;
18
19 import org.eclipse.jface.viewers.ILabelDecorator;
20 import org.eclipse.jface.viewers.ILabelProviderListener;
21 import org.eclipse.jface.viewers.LabelProvider;
22
23 public class JavaUILabelProvider extends LabelProvider {
24         
25         protected JavaElementImageProvider fImageLabelProvider;
26         protected StorageLabelProvider fStorageLabelProvider;
27         
28         protected ArrayList fLabelDecorators;
29
30         private int fImageFlags;
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, JavaElementImageProvider.OVERLAY_ICONS);
38         }
39
40         /**
41          * @param textFlags Flags defined in <code>JavaElementLabels</code>.
42          * @param imageFlags Flags defined in <code>JavaElementImageProvider</code>.
43          */
44         public JavaUILabelProvider(int textFlags, int imageFlags) {
45                 fImageLabelProvider= new JavaElementImageProvider();
46                 fLabelDecorators= null; 
47                 
48                 fStorageLabelProvider= new StorageLabelProvider();
49                 fImageFlags= imageFlags;
50                 fTextFlags= textFlags;
51         }
52         
53         /**
54          * Adds a decorator to the label provider
55          */
56         public void addLabelDecorator(ILabelDecorator decorator) {
57                 if (fLabelDecorators == null) {
58                         fLabelDecorators= new ArrayList(2);
59                 }
60                 fLabelDecorators.add(decorator);
61         }
62         
63         /**
64          * Sets the textFlags.
65          * @param textFlags The textFlags to set
66          */
67         public final void setTextFlags(int textFlags) {
68                 fTextFlags= textFlags;
69         }
70
71         /**
72          * Sets the imageFlags 
73          * @param imageFlags The imageFlags to set
74          */
75         public final void setImageFlags(int imageFlags) {
76                 fImageFlags= imageFlags;
77         }
78         
79         /**
80          * Gets the image flags.
81          * Can be overwriten by super classes.
82          * @return Returns a int
83          */
84         public final int getImageFlags() {
85                 return fImageFlags;
86         }
87
88         /**
89          * Gets the text flags.
90          * @return Returns a int
91          */
92         public final int getTextFlags() {
93                 return fTextFlags;
94         }
95         
96         /**
97          * Evaluates the image flags for a element.
98          * Can be overwriten by super classes.
99          * @return Returns a int
100          */
101         protected int evaluateImageFlags(Object element) {
102                 return getImageFlags();
103         }
104
105         /**
106          * Evaluates the text flags for a element. Can be overwriten by super classes.
107          * @return Returns a int
108          */
109         protected int evaluateTextFlags(Object element) {
110                 return getTextFlags();
111         }
112         
113
114         /* (non-Javadoc)
115          * @see ILabelProvider#getImage
116          */
117         public Image getImage(Object element) {
118                 Image result= fImageLabelProvider.getImageLabel(element, evaluateImageFlags(element));
119                 if (result == null && (element instanceof IStorage)) {
120                         result= fStorageLabelProvider.getImage(element);
121                 }
122                 if (fLabelDecorators != null && result != null) {
123                         for (int i= 0; i < fLabelDecorators.size(); i++) {
124                                 ILabelDecorator decorator= (ILabelDecorator) fLabelDecorators.get(i);
125                                 result= decorator.decorateImage(result, element);
126                         }
127                 }                       
128                 return result;
129         }
130
131         /* (non-Javadoc)
132          * @see ILabelProvider#getText
133          */
134         public String getText(Object element) {
135                 String result= JavaElementLabels.getTextLabel(element, evaluateTextFlags(element));
136                 if (result.length() == 0 && (element instanceof IStorage)) {
137                         result= fStorageLabelProvider.getText(element);
138                 }
139                 if (fLabelDecorators != null && result.length() > 0) {
140                         for (int i= 0; i < fLabelDecorators.size(); i++) {
141                                 ILabelDecorator decorator= (ILabelDecorator) fLabelDecorators.get(i);
142                                 result= decorator.decorateText(result, element);
143                         }
144                 }                       
145                 return result;
146         }
147
148         /* (non-Javadoc)
149          * @see IBaseLabelProvider#dispose
150          */
151         public void dispose() {
152                 if (fLabelDecorators != null) {
153                         for (int i= 0; i < fLabelDecorators.size(); i++) {
154                                 ILabelDecorator decorator= (ILabelDecorator) fLabelDecorators.get(i);
155                                 decorator.dispose();
156                         }
157                         fLabelDecorators= null;
158                 }
159                 fStorageLabelProvider.dispose();
160                 fImageLabelProvider.dispose();
161         }
162         
163         /* (non-Javadoc)
164          * @see IBaseLabelProvider#addListener(ILabelProviderListener)
165          */
166         public void addListener(ILabelProviderListener listener) {
167                 if (fLabelDecorators != null) {
168                         for (int i= 0; i < fLabelDecorators.size(); i++) {
169                                 ILabelDecorator decorator= (ILabelDecorator) fLabelDecorators.get(i);
170                                 decorator.addListener(listener);
171                         }
172                 }
173                 super.addListener(listener);    
174         }
175
176         /* (non-Javadoc)
177          * @see IBaseLabelProvider#isLabelProperty(Object, String)
178          */
179         public boolean isLabelProperty(Object element, String property) {
180                 return true;    
181         }
182
183         /* (non-Javadoc)
184          * @see IBaseLabelProvider#removeListener(ILabelProviderListener)
185          */
186         public void removeListener(ILabelProviderListener listener) {
187                 if (fLabelDecorators != null) {
188                         for (int i= 0; i < fLabelDecorators.size(); i++) {
189                                 ILabelDecorator decorator= (ILabelDecorator) fLabelDecorators.get(i);
190                                 decorator.removeListener(listener);
191                         }
192                 }
193                 super.removeListener(listener); 
194         }
195         
196         public static ILabelDecorator[] getDecorators(boolean errortick, ILabelDecorator extra) {
197                 if (errortick) {
198                         if (extra == null) {
199                                 return new ILabelDecorator[] {};
200                         } else {
201                                 return new ILabelDecorator[] { extra };
202                         }
203                 }
204                 if (extra != null) {
205                         return new ILabelDecorator[] { extra };
206                 }
207                 return null;
208         }       
209
210 }