package com.redhat.ceylon.eclipse.code.outline;
import static com.redhat.ceylon.eclipse.code.complete.CodeCompletions.getQualifiedDescriptionFor;
import static com.redhat.ceylon.eclipse.code.outline.CeylonLabelProvider.getDecoratedImage;
import static com.redhat.ceylon.eclipse.code.outline.CeylonLabelProvider.getImageForDeclaration;
import static com.redhat.ceylon.eclipse.code.preferences.CeylonPreferenceInitializer.PARAMS_IN_OUTLINES;
import static com.redhat.ceylon.eclipse.code.preferences.CeylonPreferenceInitializer.PARAM_TYPES_IN_OUTLINES;
import static com.redhat.ceylon.eclipse.code.preferences.CeylonPreferenceInitializer.RETURN_TYPES_IN_OUTLINES;
import static com.redhat.ceylon.eclipse.code.preferences.CeylonPreferenceInitializer.TYPE_PARAMS_IN_OUTLINES;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.viewers.DelegatingStyledCellLabelProvider;
import org.eclipse.jface.viewers.ILabelProvider;
import org.eclipse.jface.viewers.ILabelProviderListener;
import org.eclipse.jface.viewers.StyledCellLabelProvider;
import org.eclipse.jface.viewers.StyledString;
import org.eclipse.jface.viewers.ViewerCell;
import org.eclipse.swt.graphics.Font;
import org.eclipse.swt.graphics.Image;
import com.redhat.ceylon.eclipse.ui.CeylonPlugin;
import com.redhat.ceylon.model.typechecker.model.Declaration;
public class CeylonOutlineLabelProvider
extends StyledCellLabelProvider
implements DelegatingStyledCellLabelProvider.IStyledLabelProvider,
ILabelProvider {
@Override
public void removeListener(ILabelProviderListener listener) {}
@Override
public boolean isLabelProperty(Object element, String property) {
return false;
}
@Override
public void dispose() {}
@Override
public void addListener(ILabelProviderListener listener) {}
Font getFont() {
return null;
}
String getPrefix() {
return null;
}
@Override
public StyledString getStyledText(Object element) {
if (element instanceof CeylonOutlineNode) {
CeylonOutlineNode node =
(CeylonOutlineNode) element;
return node.getLabel(getPrefix(), getFont());
}
else if (element instanceof Declaration) {
IPreferenceStore prefs = CeylonPlugin.getPreferences();
return getQualifiedDescriptionFor((Declaration) element,
prefs.getBoolean(TYPE_PARAMS_IN_OUTLINES),
prefs.getBoolean(PARAMS_IN_OUTLINES),
prefs.getBoolean(PARAM_TYPES_IN_OUTLINES),
prefs.getBoolean(RETURN_TYPES_IN_OUTLINES),
getPrefix(), getFont());
}
else {
return new StyledString();
}
}
@Override
public Image getImage(Object element) {
if (element instanceof CeylonOutlineNode) {
CeylonOutlineNode node =
(CeylonOutlineNode) element;
return getDecoratedImage(
node.getImageKey(),
node.getDecorations(),
false);
}
else if (element instanceof Declaration) {
return getImageForDeclaration((Declaration) element);
}
else {
return null;
}
}
@Override
public void update(ViewerCell cell) {
Object element = cell.getElement();
StyledString styledText = getStyledText(element);
cell.setText(styledText.toString());
cell.setStyleRanges(styledText.getStyleRanges());
cell.setImage(getImage(element));
super.update(cell);
}
@Override
public String getText(Object element) {
return getStyledText(element).toString();
}
}