blob: a8943ac09d727cb366fae3a976e4d5642ef41bc5 [file] [log] [blame]
/*******************************************************************************
* 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();
}
}