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
 
   9  *     IBM Corporation - initial API and implementation
 
  10  *******************************************************************************/
 
  11 package net.sourceforge.phpdt.ui;
 
  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;
 
  17 import org.eclipse.core.resources.IStorage;
 
  18 import org.eclipse.jface.viewers.LabelProvider;
 
  19 import org.eclipse.swt.graphics.Image;
 
  22  * Standard label provider for Java elements. Use this class when you want to
 
  23  * present the Java elements in a viewer.
 
  25  * The implementation also handles non-Java elements by forwarding the requests
 
  26  * to the <code>IWorkbenchAdapter</code> of the element.
 
  29  * This class may be instantiated; it is not intended to be subclassed.
 
  32 public class JavaElementLabelProvider extends LabelProvider {
 
  35          * Flag (bit mask) indicating that methods labels include the method return
 
  38         public final static int SHOW_RETURN_TYPE = 0x001;
 
  41          * Flag (bit mask) indicating that method label include method parameter
 
  44         public final static int SHOW_PARAMETERS = 0x002;
 
  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.
 
  50          * @deprecated Use SHOW_QUALIFIED or SHOW_ROOT instead
 
  52         public final static int SHOW_CONTAINER = 0x004;
 
  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
 
  59          * @deprecated Use SHOW_QUALIFIED instead
 
  61         public final static int SHOW_CONTAINER_QUALIFICATION = 0x008;
 
  64          * Flag (bit mask) indicating that the label should include overlay icons
 
  65          * for element type and modifiers.
 
  67         public final static int SHOW_OVERLAY_ICONS = 0x010;
 
  70          * Flag (bit mask) indicating thata field label should include the declared
 
  73         public final static int SHOW_TYPE = 0x020;
 
  76          * Flag (bit mask) indicating that the label should include the name of the
 
  77          * package fragment root (appended).
 
  79         public final static int SHOW_ROOT = 0x040;
 
  82          * Flag (bit mask) indicating that the label qualification of a type should
 
  83          * be shown after the name.
 
  85          * @deprecated SHOW_POST_QUALIFIED instead
 
  87         public final static int SHOW_POSTIFIX_QUALIFICATION = 0x080;
 
  90          * Flag (bit mask) indicating that the label should show the icons with no
 
  91          * space reserved for overlays.
 
  93         public final static int SHOW_SMALL_ICONS = 0x100;
 
  96          * Flag (bit mask) indicating that the packagefragment roots from variables
 
  97          * should be rendered with the variable in the name
 
  99         public final static int SHOW_VARIABLE = 0x200;
 
 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()
 
 108         public final static int SHOW_QUALIFIED = 0x400;
 
 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
 
 117         public final static int SHOW_POST_QUALIFIED = 0x800;
 
 120          * Constant (value <code>0</code>) indicating that the label should show
 
 121          * the basic images only.
 
 123         public final static int SHOW_BASICS = 0x000;
 
 126          * Constant indicating the default label rendering. Currently the default is
 
 127          * equivalent to <code>SHOW_PARAMETERS | SHOW_OVERLAY_ICONS</code>.
 
 129         public final static int SHOW_DEFAULT = new Integer(SHOW_PARAMETERS
 
 130                         | SHOW_OVERLAY_ICONS).intValue();
 
 132         private JavaElementImageProvider fImageLabelProvider;
 
 134         private StorageLabelProvider fStorageLabelProvider;
 
 138         private int fImageFlags;
 
 140         private int fTextFlags;
 
 143          * Creates a new label provider with <code>SHOW_DEFAULT</code> flag.
 
 148         public JavaElementLabelProvider() {
 
 153          * Creates a new label provider.
 
 156          *            the initial options; a bitwise OR of <code>SHOW_* </code>
 
 159         public JavaElementLabelProvider(int flags) {
 
 160                 fImageLabelProvider = new JavaElementImageProvider();
 
 161                 fStorageLabelProvider = new StorageLabelProvider();
 
 163                 updateImageProviderFlags();
 
 164                 updateTextProviderFlags();
 
 167         private boolean getFlag(int flag) {
 
 168                 return (fFlags & flag) != 0;
 
 172          * Turns on the rendering options specified in the given flags.
 
 175          *            the options; a bitwise OR of <code>SHOW_* </code> constants
 
 177         public void turnOn(int flags) {
 
 179                 updateImageProviderFlags();
 
 180                 updateTextProviderFlags();
 
 184          * Turns off the rendering options specified in the given flags.
 
 187          *            the initial options; a bitwise OR of <code>SHOW_* </code>
 
 190         public void turnOff(int flags) {
 
 192                 updateImageProviderFlags();
 
 193                 updateTextProviderFlags();
 
 196         private void updateImageProviderFlags() {
 
 198                 if (getFlag(SHOW_OVERLAY_ICONS)) {
 
 199                         fImageFlags |= JavaElementImageProvider.OVERLAY_ICONS;
 
 201                 if (getFlag(SHOW_SMALL_ICONS)) {
 
 202                         fImageFlags |= JavaElementImageProvider.SMALL_ICONS;
 
 206         private void updateTextProviderFlags() {
 
 208                 if (getFlag(SHOW_RETURN_TYPE)) {
 
 209                         fTextFlags |= JavaElementLabels.M_APP_RETURNTYPE;
 
 211                 if (getFlag(SHOW_PARAMETERS)) {
 
 212                         fTextFlags |= JavaElementLabels.M_PARAMETER_TYPES;
 
 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;
 
 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);
 
 229                 if (getFlag(SHOW_TYPE)) {
 
 230                         fTextFlags |= JavaElementLabels.F_APP_TYPE_SIGNATURE;
 
 232                 if (getFlag(SHOW_ROOT)) {
 
 233                         fTextFlags |= JavaElementLabels.APPEND_ROOT_PATH;
 
 235                 if (getFlag(SHOW_VARIABLE)) {
 
 236                         fTextFlags |= JavaElementLabels.ROOT_VARIABLE;
 
 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);
 
 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);
 
 259          * @see ILabelProvider#getImage
 
 261         public Image getImage(Object element) {
 
 262                 Image result = fImageLabelProvider.getImageLabel(element, fImageFlags);
 
 263                 if (result != null) {
 
 267                 if (element instanceof IStorage)
 
 268                         return fStorageLabelProvider.getImage(element);
 
 276          * @see ILabelProvider#getText
 
 278         public String getText(Object element) {
 
 279                 String text = JavaElementLabels.getTextLabel(element, fTextFlags);
 
 280                 if (text.length() > 0) {
 
 284                 if (element instanceof IStorage)
 
 285                         return fStorageLabelProvider.getText(element);
 
 293          * @see IBaseLabelProvider#dispose
 
 295         public void dispose() {
 
 296                 fStorageLabelProvider.dispose();
 
 297                 fImageLabelProvider.dispose();