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