new version with WorkingCopy Management
[phpeclipse.git] / net.sourceforge.phpeclipse / src / net / sourceforge / phpdt / ui / JavaElementLabelProvider.java
diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/ui/JavaElementLabelProvider.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/ui/JavaElementLabelProvider.java
new file mode 100644 (file)
index 0000000..4067228
--- /dev/null
@@ -0,0 +1,268 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2003 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials 
+ * are made available under the terms of the Common Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/cpl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package net.sourceforge.phpdt.ui;
+
+import net.sourceforge.phpdt.internal.ui.viewsupport.JavaElementImageProvider;
+import net.sourceforge.phpdt.internal.ui.viewsupport.JavaElementLabels;
+import net.sourceforge.phpdt.internal.ui.viewsupport.StorageLabelProvider;
+
+import org.eclipse.core.resources.IStorage;
+import org.eclipse.jface.viewers.LabelProvider;
+import org.eclipse.swt.graphics.Image;
+
+
+
+/**
+ * Standard label provider for Java elements.
+ * Use this class when you want to present the Java elements in a viewer.
+ * <p>
+ * The implementation also handles non-Java elements by forwarding the requests to the
+ * <code>IWorkbenchAdapter</code> of the element.
+ * </p>
+ * <p>
+ * This class may be instantiated; it is not intended to be subclassed.
+ * </p>
+ */
+public class JavaElementLabelProvider extends LabelProvider {
+       
+       /**
+        * Flag (bit mask) indicating that methods labels include the method return type. (appended)
+        */
+       public final static int SHOW_RETURN_TYPE=                               0x001;
+       
+       /**
+        * Flag (bit mask) indicating that method label include method parameter types.
+        */
+       public final static int SHOW_PARAMETERS=                                0x002;
+       
+       /**
+        * Flag (bit mask) indicating that the label of a member should include the container.
+        * For example, include the name of the type enclosing a field.
+        * @deprecated Use SHOW_QUALIFIED or SHOW_ROOT instead
+        */
+       public final static int SHOW_CONTAINER=                         0x004;
+
+       /**
+        * Flag (bit mask) indicating that the label of a type should be fully qualified.
+        * For example, include the fully qualified name of the type enclosing a type.
+        * @deprecated Use SHOW_QUALIFIED instead
+        */
+       public final static int SHOW_CONTAINER_QUALIFICATION=   0x008;
+
+       /**
+        * Flag (bit mask) indicating that the label should include overlay icons
+        * for element type and modifiers.
+        */
+       public final static int SHOW_OVERLAY_ICONS=                     0x010;
+
+       /**
+        * Flag (bit mask) indicating thata field label should include the declared type.
+        */
+       public final static int SHOW_TYPE=                                      0x020;
+
+       /**
+        * Flag (bit mask) indicating that the label should include the name of the
+        * package fragment root (appended).
+        */
+       public final static int SHOW_ROOT=                                      0x040;
+       
+       /**
+        * Flag (bit mask) indicating that the label qualification of a type should
+        * be shown after the name.
+        * @deprecated SHOW_POST_QUALIFIED instead
+        */
+       public final static int SHOW_POSTIFIX_QUALIFICATION=            0x080;
+
+       /**
+        * Flag (bit mask) indicating that the label should show the icons with no space
+        * reserved for overlays.
+        */
+       public final static int SHOW_SMALL_ICONS=                       0x100;
+       
+       /**
+        * Flag (bit mask) indicating that the packagefragment roots from variables should
+        * be rendered with the variable in the name
+        */
+       public final static int SHOW_VARIABLE=                  0x200;
+       
+       /**
+        * Flag (bit mask) indicating that Complation Units, Class Files, Types, Declarations and Members
+        * should be rendered qualified.
+        * Examples: java.lang.String, java.util.Vector.size()
+        * 
+        * @since 2.0
+        */
+       public final static int SHOW_QUALIFIED=                         0x400;
+
+       /**
+        * Flag (bit mask) indicating that Complation Units, Class Files, Types, Declarations and Members
+        * should be rendered qualified. The qualifcation is appended
+        * Examples: String - java.lang, size() - java.util.Vector
+        * 
+        * @since 2.0
+        */
+       public final static int SHOW_POST_QUALIFIED=    0x800;  
+       
+       
+       /**
+        * Constant (value <code>0</code>) indicating that the label should show 
+        * the basic images only.
+        */
+       public final static int SHOW_BASICS= 0x000;
+       
+       
+       /**
+        * Constant indicating the default label rendering.
+        * Currently the default is equivalent to
+        * <code>SHOW_PARAMETERS | SHOW_OVERLAY_ICONS</code>.
+        */
+       public final static int SHOW_DEFAULT= new Integer(SHOW_PARAMETERS | SHOW_OVERLAY_ICONS).intValue();
+
+       private JavaElementImageProvider fImageLabelProvider;
+       
+       private StorageLabelProvider fStorageLabelProvider;
+       private int fFlags;
+       private int fImageFlags;
+       private int fTextFlags;
+       
+       /**
+        * Creates a new label provider with <code>SHOW_DEFAULT</code> flag.
+        *
+        * @see #SHOW_DEFAULT
+        * @since 2.0
+        */
+       public JavaElementLabelProvider() {
+               this(SHOW_DEFAULT);
+       }
+
+       /**
+        * Creates a new label provider.
+        *
+        * @param flags the initial options; a bitwise OR of <code>SHOW_* </code> constants
+        */
+       public JavaElementLabelProvider(int flags) {
+               fImageLabelProvider= new JavaElementImageProvider();
+               fStorageLabelProvider= new StorageLabelProvider();
+               fFlags= flags;
+               updateImageProviderFlags();
+               updateTextProviderFlags();              
+       }
+       
+       private boolean getFlag( int flag) {
+               return (fFlags & flag) != 0;
+       }
+       
+       /**
+        * Turns on the rendering options specified in the given flags.
+        *
+        * @param flags the options; a bitwise OR of <code>SHOW_* </code> constants
+        */
+       public void turnOn(int flags) {
+               fFlags |= flags;
+               updateImageProviderFlags();
+               updateTextProviderFlags();
+       }
+       
+       /**
+        * Turns off the rendering options specified in the given flags.
+        *
+        * @param flags the initial options; a bitwise OR of <code>SHOW_* </code> constants
+        */
+       public void turnOff(int flags) {
+               fFlags &= (~flags);
+               updateImageProviderFlags();
+               updateTextProviderFlags();
+       }
+       
+       private void updateImageProviderFlags() {
+               fImageFlags= 0;
+               if (getFlag(SHOW_OVERLAY_ICONS)) {
+                       fImageFlags |= JavaElementImageProvider.OVERLAY_ICONS;
+               }
+               if (getFlag(SHOW_SMALL_ICONS)) {
+                       fImageFlags |= JavaElementImageProvider.SMALL_ICONS;
+               }
+       }       
+       
+       private void updateTextProviderFlags() {
+               fTextFlags= 0;
+               if (getFlag(SHOW_RETURN_TYPE)) {
+                       fTextFlags |= JavaElementLabels.M_APP_RETURNTYPE;
+               }
+               if (getFlag(SHOW_PARAMETERS)) {
+                       fTextFlags |= JavaElementLabels.M_PARAMETER_TYPES;
+               }               
+               if (getFlag(SHOW_CONTAINER)) {
+                       fTextFlags |= JavaElementLabels.P_POST_QUALIFIED | JavaElementLabels.T_POST_QUALIFIED | JavaElementLabels.CF_POST_QUALIFIED  | JavaElementLabels.CU_POST_QUALIFIED | JavaElementLabels.M_POST_QUALIFIED | JavaElementLabels.F_POST_QUALIFIED;
+               }
+               if (getFlag(SHOW_POSTIFIX_QUALIFICATION)) {
+                       fTextFlags |= (JavaElementLabels.T_POST_QUALIFIED | JavaElementLabels.CF_POST_QUALIFIED  | JavaElementLabels.CU_POST_QUALIFIED);
+               } else if (getFlag(SHOW_CONTAINER_QUALIFICATION)) {
+                       fTextFlags |=(JavaElementLabels.T_FULLY_QUALIFIED | JavaElementLabels.CF_QUALIFIED  | JavaElementLabels.CU_QUALIFIED);
+               }
+               if (getFlag(SHOW_TYPE)) {
+                       fTextFlags |= JavaElementLabels.F_APP_TYPE_SIGNATURE;
+               }
+               if (getFlag(SHOW_ROOT)) {
+                       fTextFlags |= JavaElementLabels.APPEND_ROOT_PATH;
+               }                       
+               if (getFlag(SHOW_VARIABLE)) {
+                       fTextFlags |= JavaElementLabels.ROOT_VARIABLE;
+               }
+               if (getFlag(SHOW_QUALIFIED)) {
+                       fTextFlags |= (JavaElementLabels.F_FULLY_QUALIFIED | JavaElementLabels.M_FULLY_QUALIFIED | JavaElementLabels.I_FULLY_QUALIFIED 
+                               | JavaElementLabels.T_FULLY_QUALIFIED | JavaElementLabels.D_QUALIFIED | JavaElementLabels.CF_QUALIFIED  | JavaElementLabels.CU_QUALIFIED);
+               }
+               if (getFlag(SHOW_POST_QUALIFIED)) {
+                       fTextFlags |= (JavaElementLabels.F_POST_QUALIFIED | JavaElementLabels.M_POST_QUALIFIED | JavaElementLabels.I_POST_QUALIFIED 
+                       | JavaElementLabels.T_POST_QUALIFIED | JavaElementLabels.D_POST_QUALIFIED | JavaElementLabels.CF_POST_QUALIFIED  | JavaElementLabels.CU_POST_QUALIFIED);
+               }               
+       }
+
+       /* (non-Javadoc)
+        * @see ILabelProvider#getImage
+        */
+       public Image getImage(Object element) {
+               Image result= fImageLabelProvider.getImageLabel(element, fImageFlags);
+               if (result != null) {
+                       return result;
+               }
+
+               if (element instanceof IStorage) 
+                       return fStorageLabelProvider.getImage(element);
+
+               return result;
+       }
+
+       /* (non-Javadoc)
+        * @see ILabelProvider#getText
+        */
+       public String getText(Object element) {
+               String text= JavaElementLabels.getTextLabel(element, fTextFlags);
+               if (text.length() > 0) {
+                       return text;
+               }
+
+               if (element instanceof IStorage)
+                       return fStorageLabelProvider.getText(element);
+
+               return text;
+       }
+
+       /* (non-Javadoc)
+        * 
+        * @see IBaseLabelProvider#dispose
+        */
+       public void dispose() {
+               fStorageLabelProvider.dispose();
+               fImageLabelProvider.dispose();
+       }
+}