blob: 5e56f690a237bdf0d4cb91b1fd8084f4dbb6c603 [file] [log] [blame]
package org.eclipse.cdt.ui;
/*
* (c) Copyright IBM Corp. 2000, 2001.
* All Rights Reserved.
*/
import org.eclipse.cdt.core.model.IBinary;
import org.eclipse.cdt.core.model.ICElement;
import org.eclipse.cdt.core.model.IFunctionDeclaration;
import org.eclipse.cdt.core.model.INamespace;
import org.eclipse.cdt.core.model.ITemplate;
import org.eclipse.cdt.core.model.ITypeDef;
import org.eclipse.cdt.core.model.IVariableDeclaration;
import org.eclipse.cdt.internal.ui.CElementImageProvider;
import org.eclipse.cdt.internal.ui.ErrorTickAdornmentProvider;
import org.eclipse.cdt.internal.ui.IAdornmentProvider;
import org.eclipse.jface.resource.ImageRegistry;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.swt.graphics.Image;
import org.eclipse.ui.model.WorkbenchLabelProvider;
/**
* The label provider for the c model elements.
*/
public class CElementLabelProvider extends LabelProvider {
private ImageRegistry fImageRegistry;
private WorkbenchLabelProvider fWorkbenchLabelProvider;
private CElementImageProvider fImageLabelProvider;
private IAdornmentProvider[] fAdornmentProviders;
private int fImageFlags;
private int fTextFlags;
public CElementLabelProvider() {
this(0 /* CElementLabels.M_PARAMETER_TYPES */, CElementImageProvider.OVERLAY_ICONS, null);
}
/**
* @param textFlags Flags defined in <code>JavaElementLabels</code>.
* @param imageFlags Flags defined in <code>JavaElementImageProvider</code>.
*/
public CElementLabelProvider(int textFlags, int imageFlags, IAdornmentProvider[] adormentProviders) {
fImageRegistry= CUIPlugin.getDefault().getImageRegistry();
fWorkbenchLabelProvider= new WorkbenchLabelProvider();
fImageLabelProvider= new CElementImageProvider();
fAdornmentProviders= adormentProviders;
fImageFlags= imageFlags;
fTextFlags= textFlags;
}
/**
* @see ILabelProvider#getText
*/
public String getText(Object element) {
if (element instanceof ICElement) {
ICElement celem= (ICElement)element;
StringBuffer name = new StringBuffer();
switch(celem.getElementType()){
case ICElement.C_FIELD:
case ICElement.C_VARIABLE:
case ICElement.C_VARIABLE_DECLARATION:
IVariableDeclaration vDecl = (IVariableDeclaration) celem;
name.append(vDecl.getElementName());
if((vDecl.getTypeName() != null) &&(vDecl.getTypeName().length() > 0)){
name.append(" : ");
name.append(vDecl.getTypeName());
}
break;
case ICElement.C_FUNCTION:
case ICElement.C_FUNCTION_DECLARATION:
case ICElement.C_METHOD:
case ICElement.C_METHOD_DECLARATION:
IFunctionDeclaration fDecl = (IFunctionDeclaration) celem;
name.append(fDecl.getSignature());
if((fDecl.getReturnType() != null) &&(fDecl.getReturnType().length() > 0)){
name.append(" : ");
name.append(fDecl.getReturnType());
}
break;
case ICElement.C_STRUCT:
case ICElement.C_UNION:
case ICElement.C_ENUMERATION:
if((celem.getElementName() != null) && (celem.getElementName().length() > 0)){
name.append(celem.getElementName());
} else if (celem instanceof IVariableDeclaration) {
IVariableDeclaration varDecl = (IVariableDeclaration) celem;
name.append(varDecl.getTypeName());
}
break;
case ICElement.C_TYPEDEF:
ITypeDef tDecl = (ITypeDef) celem;
name.append(tDecl.getElementName());
if((tDecl.getTypeName() != null) &&(tDecl.getTypeName().length() > 0)){
name.append(" : ");
name.append(tDecl.getTypeName());
}
break;
case ICElement.C_NAMESPACE:
if((celem.getElementName() != null) && (celem.getElementName().length() > 0)){
name.append(celem.getElementName());
} else if (celem instanceof INamespace) {
INamespace nDecl = (INamespace) celem;
name.append(nDecl.getTypeName());
}
break;
case ICElement.C_TEMPLATE_CLASS:
case ICElement.C_TEMPLATE_FUNCTION:
case ICElement.C_TEMPLATE_METHOD:
case ICElement.C_TEMPLATE_STRUCT:
case ICElement.C_TEMPLATE_UNION:
case ICElement.C_TEMPLATE_VARIABLE:
ITemplate template = (ITemplate) celem;
String signature = template.getTemplateSignature();
name.append(signature);
break;
default:
name.append(celem.getElementName());
break;
}
if (celem instanceof IBinary) {
IBinary bin = (IBinary)celem;
name.append(" - [" + bin.getCPU() + (bin.isLittleEndian() ? "le" : "be") + "]");
}
return name.toString();
}
return fWorkbenchLabelProvider.getText(element);
}
/**
* @see ILabelProvider#getImage
*/
public Image getImage(Object element) {
int imageFlags= getImageFlags();
if (fAdornmentProviders != null) {
for (int i= 0; i < fAdornmentProviders.length; i++) {
imageFlags |= fAdornmentProviders[i].computeAdornmentFlags(element);
}
}
if(element instanceof ICElement) {
Image result= fImageLabelProvider.getImageLabel(element, imageFlags);
if (result != null) {
return result;
}
}
return fWorkbenchLabelProvider.getImage(element);
}
/**
* @see IBaseLabelProvider#dispose()
*/
public void dispose() {
if (fAdornmentProviders != null) {
for (int i= 0; i < fAdornmentProviders.length; i++) {
fAdornmentProviders[i].dispose();
}
}
if (fWorkbenchLabelProvider != null) {
fWorkbenchLabelProvider.dispose();
fWorkbenchLabelProvider= null;
}
fImageRegistry= null;
if(fImageLabelProvider != null) {
fImageLabelProvider.dispose();
}
}
/**
* Sets the textFlags.
* @param textFlags The textFlags to set
*/
public void setTextFlags(int textFlags) {
fTextFlags= textFlags;
}
/**
* Sets the imageFlags
* @param imageFlags The imageFlags to set
*/
public void setImageFlags(int imageFlags) {
fImageFlags= imageFlags;
}
/**
* Gets the image flags.
* Can be overwriten by super classes.
* @return Returns a int
*/
public int getImageFlags() {
return fImageFlags;
}
/**
* Gets the text flags. Can be overwriten by super classes.
* @return Returns a int
*/
public int getTextFlags() {
return fTextFlags;
}
public static IAdornmentProvider[] getAdornmentProviders(boolean errortick, IAdornmentProvider extra) {
if (errortick) {
if (extra == null) {
return new IAdornmentProvider[] { new ErrorTickAdornmentProvider() };
} else {
return new IAdornmentProvider[] { new ErrorTickAdornmentProvider(), extra };
}
}
if (extra != null) {
return new IAdornmentProvider[] { extra };
}
return null;
}
}