blob: 246b8aa0e4838a97a36ebd7f0b6b2d7f5ec0783a [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2000, 2016 IBM Corporation and others.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* IBM Corporation - initial API and implementation
* QNX Software System
* Anton Leherbauer (Wind River Systems)
*******************************************************************************/
package org.eclipse.cdt.ui;
import org.eclipse.cdt.core.model.ICElement;
import org.eclipse.cdt.internal.ui.viewsupport.CElementImageProvider;
import org.eclipse.cdt.internal.ui.viewsupport.CElementLabels;
import org.eclipse.cdt.internal.ui.viewsupport.CUILabelProvider;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.Display;
import org.eclipse.ui.model.WorkbenchLabelProvider;
/**
* The label provider for the c model elements.
*/
public class CElementLabelProvider 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 method label include thrown exception.
*/
public final static int SHOW_EXCEPTION = 0x004;
/**
* 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 label should include overlay icons
* for element type and modifiers.
*/
public final static int SHOW_OVERLAY_ICONS = 0x010;
/**
* 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 Compilation Units, Class Files, Types, Declarations and Members
* should be rendered qualified. The qualification 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;
public final static int SHOW_DEFAULT = Integer.valueOf(SHOW_PARAMETERS | SHOW_OVERLAY_ICONS).intValue();
private volatile WorkbenchLabelProvider fWorkbenchLabelProvider;
protected CElementImageProvider fImageLabelProvider;
private CUILabelProvider fCElementLabelProvider;
private int fFlags;
private int fImageFlags;
private int fTextFlags;
public CElementLabelProvider() {
this(SHOW_DEFAULT);
}
public CElementLabelProvider(int flags) {
// WorkbenchLabelProvider may only be initialized on the UI thread
// http://bugs.eclipse.org/247274
if (Display.getCurrent() != null) {
fWorkbenchLabelProvider = new WorkbenchLabelProvider();
} else {
// Delay initialization
CUIPlugin.getStandardDisplay().asyncExec(() -> {
if (fCElementLabelProvider != null) {
fWorkbenchLabelProvider = new WorkbenchLabelProvider();
}
});
}
fImageLabelProvider = new CElementImageProvider();
fFlags = flags;
fCElementLabelProvider = new CUILabelProvider(getTextFlags() | CElementLabels.TEMPLATE_PARAMETERS,
getImageFlags());
}
@Override
public String getText(Object element) {
if (element instanceof ICElement) {
return fCElementLabelProvider.getText(element);
}
if (fWorkbenchLabelProvider != null) {
return fWorkbenchLabelProvider.getText(element);
}
return super.getText(element);
}
@Override
public Image getImage(Object element) {
return fImageLabelProvider.getImageLabel(element, getImageFlags());
}
@Override
public void dispose() {
if (fCElementLabelProvider != null) {
fCElementLabelProvider.dispose();
fCElementLabelProvider = null;
}
if (fWorkbenchLabelProvider != null) {
fWorkbenchLabelProvider.dispose();
fWorkbenchLabelProvider = null;
}
if (fImageLabelProvider != null) {
fImageLabelProvider.dispose();
}
}
private boolean getFlag(int flag) {
return (fFlags & flag) != 0;
}
/**
* Gets the image flags.
* Can be overwritten by super classes.
* @return Returns a int
*/
public int getImageFlags() {
fImageFlags = 0;
if (getFlag(SHOW_OVERLAY_ICONS)) {
fImageFlags |= CElementImageProvider.OVERLAY_ICONS;
}
if (getFlag(SHOW_SMALL_ICONS)) {
fImageFlags |= CElementImageProvider.SMALL_ICONS;
}
return fImageFlags;
}
/**
* Gets the text flags. Can be overwritten by super classes.
* @return Returns a int
*/
public int getTextFlags() {
fTextFlags = 0;
if (getFlag(SHOW_RETURN_TYPE)) {
fTextFlags |= CElementLabels.M_APP_RETURNTYPE;
}
if (getFlag(SHOW_PARAMETERS)) {
fTextFlags |= CElementLabels.M_PARAMETER_TYPES;
}
if (getFlag(SHOW_EXCEPTION)) {
fTextFlags |= CElementLabels.M_EXCEPTIONS;
}
if (getFlag(SHOW_POST_QUALIFIED)) {
fTextFlags |= CElementLabels.M_POST_QUALIFIED;
}
return fTextFlags;
}
}