package damp.ekeko.snippets.gui;
import org.eclipse.jface.viewers.StyledCellLabelProvider;
import org.eclipse.jface.viewers.ViewerCell;
import clojure.lang.IFn;
import damp.ekeko.snippets.data.TemplateGroup;
public class TemplateTreeLabelProviders {
public static IFn FN_LABELPROVIDER_NODE;
public static IFn FN_LABELPROVIDER_KIND;
public static IFn FN_LABELPROVIDER_PROPERTY;
public static IFn FN_LABELPROVIDER_DIRECTIVES;
//These were ColumnLabelProviders before,
//but since the provider for one column was changed to StyledCellLabelProvider
//had to change them all to ensure consistency of rendering (StyledCellLabelProvider=platform-specific, ColumnLabelProvider=generic)
public abstract static class SnippetGroupColumnLabelProvider extends StyledCellLabelProvider {
protected Object cljSnippetGroup;
protected TemplateGroup jTemplateGroup;
public SnippetGroupColumnLabelProvider(Object cljSnippetGroup) {
this.cljSnippetGroup = cljSnippetGroup;
this.jTemplateGroup = TemplateGroup.newFromClojureGroup(cljSnippetGroup);
}
protected Object getCljGroup() {
return cljSnippetGroup;
}
protected TemplateGroup getJGroup() {
return jTemplateGroup;
}
public String getText(Object element) {
return element.toString();
}
public void internalUpdate(ViewerCell cell) {
Object element = cell.getElement();
cell.setText(getText(element));
}
@Override
public void update(ViewerCell cell) {
internalUpdate(cell);
super.update(cell);
}
}
public static class NodeColumnLabelProvider extends SnippetGroupColumnLabelProvider {
public NodeColumnLabelProvider(Object s) {
super(s);
}
public String getText(Object element) {
return (String) FN_LABELPROVIDER_NODE.invoke(getCljGroup(), element);
}
}
public static class KindColumnLabelProvider extends SnippetGroupColumnLabelProvider {
public KindColumnLabelProvider(Object s) {
super(s);
}
public String getText(Object element) {
return (String) FN_LABELPROVIDER_KIND.invoke(getCljGroup(), element);
}
}
public static class PropertyColumnLabelProvider extends SnippetGroupColumnLabelProvider {
public PropertyColumnLabelProvider(Object s) {
super(s);
}
public String getText(Object element) {
return (String) FN_LABELPROVIDER_PROPERTY.invoke(getCljGroup(), element);
}
}
public static class DirectivesColumnLabelProvider extends SnippetGroupColumnLabelProvider {
public DirectivesColumnLabelProvider(Object s) {
super(s);
}
public String getText(Object element) {
return (String) TemplatePrettyPrinter.boundDirectivesString(getJGroup().getSnippet(element), element);
}
}
public static class ElementColumnLabelProvider extends SnippetGroupColumnLabelProvider {
public ElementColumnLabelProvider(Object cljGroup) {
super(cljGroup);
}
@Override
public void internalUpdate(ViewerCell cell) {
Object element = cell.getElement();
TemplatePrettyPrinter tpp = new TemplatePrettyPrinter(getJGroup());
String text = tpp.prettyPrintElement(getJGroup().getSnippet(element), element);
cell.setText(text);
cell.setStyleRanges(tpp.getStyleRanges());
}
}
}