| /******************************************************************************* |
| * Copyright (c) 2000, 2008 IBM Corporation and others. |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License v2.0 |
| * which accompanies this distribution, and is available at |
| * http://www.eclipse.org/legal/epl-v10.html |
| * |
| * Contributors: |
| * IBM Corporation - initial API and implementation |
| *******************************************************************************/ |
| package org.eclipse.wst.jsdt.ui; |
| |
| import org.eclipse.core.resources.IStorage; |
| import org.eclipse.jface.viewers.LabelProvider; |
| import org.eclipse.swt.graphics.Image; |
| import org.eclipse.wst.jsdt.internal.ui.viewsupport.JavaElementImageProvider; |
| import org.eclipse.wst.jsdt.internal.ui.viewsupport.StorageLabelProvider; |
| |
| /** |
| * Standard label provider for JavaScript elements. |
| * Use this class when you want to present the JavaScript elements in a viewer. |
| * <p> |
| * The implementation also handles non-JavaScript 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> |
| * * Provisional API: This class/interface is part of an interim API that is still under development and expected to |
| * change significantly before reaching stability. It is being made available at this early stage to solicit feedback |
| * from pioneering adopters on the understanding that any code that uses this API will almost certainly be broken |
| * (repeatedly) as the API evolves. |
| */ |
| public class JavaScriptElementLabelProvider 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 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 that a 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 package fragment roots from class path variables should |
| * be rendered with the variable in the name |
| */ |
| public final static int SHOW_VARIABLE= 0x200; |
| |
| /** |
| * Flag (bit mask) indicating that compilation units, class files, types, declarations and members |
| * should be rendered qualified. |
| * Examples: <code>java.lang.String</code>, <code>java.util.Vector.size()</code> |
| * |
| * |
| */ |
| public final static int SHOW_QUALIFIED= 0x400; |
| |
| /** |
| * Flag (bit mask) indicating that compilation units, class files, types, declarations and members |
| * should be rendered qualified.The qualification is appended. |
| * Examples: <code>String - java.lang</code>, <code>size() - java.util.Vector</code> |
| * |
| * |
| */ |
| 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= SHOW_PARAMETERS | SHOW_OVERLAY_ICONS; |
| |
| private JavaElementImageProvider fImageLabelProvider; |
| |
| private StorageLabelProvider fStorageLabelProvider; |
| private int fFlags; |
| private int fImageFlags; |
| private long fTextFlags; |
| |
| /** |
| * Creates a new label provider with <code>SHOW_DEFAULT</code> flag. |
| * |
| * @see #SHOW_DEFAULT |
| * |
| */ |
| public JavaScriptElementLabelProvider() { |
| this(SHOW_DEFAULT); |
| } |
| |
| /** |
| * Creates a new label provider. |
| * |
| * @param flags the initial options; a bitwise OR of <code>SHOW_* </code> constants |
| */ |
| public JavaScriptElementLabelProvider(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= JavaScriptElementLabels.T_TYPE_PARAMETERS; |
| if (getFlag(SHOW_RETURN_TYPE)) { |
| fTextFlags |= JavaScriptElementLabels.M_APP_RETURNTYPE; |
| } |
| if (getFlag(SHOW_PARAMETERS)) { |
| fTextFlags |= JavaScriptElementLabels.M_PARAMETER_TYPES; |
| } |
| if (getFlag(SHOW_CONTAINER)) { |
| fTextFlags |= JavaScriptElementLabels.P_POST_QUALIFIED | JavaScriptElementLabels.T_POST_QUALIFIED | JavaScriptElementLabels.CF_POST_QUALIFIED | JavaScriptElementLabels.CU_POST_QUALIFIED | JavaScriptElementLabels.M_POST_QUALIFIED | JavaScriptElementLabels.F_POST_QUALIFIED; |
| } |
| if (getFlag(SHOW_POSTIFIX_QUALIFICATION)) { |
| fTextFlags |= (JavaScriptElementLabels.T_POST_QUALIFIED | JavaScriptElementLabels.CF_POST_QUALIFIED | JavaScriptElementLabels.CU_POST_QUALIFIED); |
| } else if (getFlag(SHOW_CONTAINER_QUALIFICATION)) { |
| fTextFlags |=(JavaScriptElementLabels.T_FULLY_QUALIFIED | JavaScriptElementLabels.CF_QUALIFIED | JavaScriptElementLabels.CU_QUALIFIED); |
| } |
| if (getFlag(SHOW_TYPE)) { |
| fTextFlags |= JavaScriptElementLabels.F_APP_TYPE_SIGNATURE; |
| } |
| if (getFlag(SHOW_ROOT)) { |
| fTextFlags |= JavaScriptElementLabels.APPEND_ROOT_PATH; |
| } |
| if (getFlag(SHOW_VARIABLE)) { |
| fTextFlags |= JavaScriptElementLabels.ROOT_VARIABLE; |
| } |
| if (getFlag(SHOW_QUALIFIED)) { |
| fTextFlags |= (JavaScriptElementLabels.F_FULLY_QUALIFIED | JavaScriptElementLabels.M_FULLY_QUALIFIED | JavaScriptElementLabels.I_FULLY_QUALIFIED |
| | JavaScriptElementLabels.T_FULLY_QUALIFIED | JavaScriptElementLabels.D_QUALIFIED | JavaScriptElementLabels.CF_QUALIFIED | JavaScriptElementLabels.CU_QUALIFIED); |
| } |
| if (getFlag(SHOW_POST_QUALIFIED)) { |
| fTextFlags |= (JavaScriptElementLabels.F_POST_QUALIFIED | JavaScriptElementLabels.M_POST_QUALIFIED | JavaScriptElementLabels.I_POST_QUALIFIED |
| | JavaScriptElementLabels.T_POST_QUALIFIED | JavaScriptElementLabels.D_POST_QUALIFIED | JavaScriptElementLabels.CF_POST_QUALIFIED | JavaScriptElementLabels.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= JavaScriptElementLabels.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(); |
| } |
| } |