--- /dev/null
+package org.simantics.browsing.ui.content;\r
+\r
+import java.util.Collection;\r
+\r
+public class CompositeLabelDecorator implements LabelDecorator {\r
+\r
+ Collection<LabelDecorator> decorators;\r
+ \r
+ public static final LabelDecorator ID = new LabelDecorator() {\r
+\r
+ @Override\r
+ public String decorateLabel(String label, String column, int itemIndex) {\r
+ return label;\r
+ }\r
+\r
+ @Override\r
+ public <Color> Color decorateForeground(Color color, String column,\r
+ int itemIndex) {\r
+ return color;\r
+ }\r
+\r
+ @Override\r
+ public <Color> Color decorateBackground(Color color, String column,\r
+ int itemIndex) {\r
+ return color;\r
+ }\r
+\r
+ @Override\r
+ public <Font> Font decorateFont(Font font, String column, int itemIndex) {\r
+ return font;\r
+ }\r
+ \r
+ };\r
+ \r
+ private CompositeLabelDecorator(Collection<LabelDecorator> decorators) {\r
+ this.decorators = decorators;\r
+ }\r
+ \r
+ public static LabelDecorator create(Collection<LabelDecorator> decorators) {\r
+ if(decorators.isEmpty())\r
+ return ID;\r
+ else if(decorators.size() == 1)\r
+ return decorators.iterator().next();\r
+ else\r
+ return new CompositeLabelDecorator(decorators);\r
+ }\r
+\r
+ @Override\r
+ public String decorateLabel(String label, String column, int itemIndex) {\r
+ for(LabelDecorator decorator : decorators) {\r
+ String dlabel = decorator.decorateLabel(label, column, itemIndex);\r
+ if(dlabel != null)\r
+ label = dlabel;\r
+ }\r
+ return label;\r
+ }\r
+\r
+ @Override\r
+ public <Color> Color decorateForeground(Color color, String column,\r
+ int itemIndex) {\r
+ for(LabelDecorator decorator : decorators) {\r
+ Color dcolor = decorator.decorateForeground(color, column, itemIndex);\r
+ if (dcolor != null)\r
+ color = dcolor;\r
+ }\r
+ return color;\r
+ }\r
+\r
+ @Override\r
+ public <Color> Color decorateBackground(Color color, String column,\r
+ int itemIndex) {\r
+ for(LabelDecorator decorator : decorators) {\r
+ Color dcolor = decorator.decorateBackground(color, column, itemIndex);\r
+ if (dcolor != null)\r
+ color = dcolor;\r
+ }\r
+ return color;\r
+ }\r
+\r
+ @Override\r
+ public <Font> Font decorateFont(Font font, String column, int itemIndex) {\r
+ for(LabelDecorator decorator : decorators) {\r
+ Font dfont = decorator.decorateFont(font, column, itemIndex);\r
+ if (dfont != null)\r
+ font = dfont;\r
+ }\r
+ return font;\r
+ }\r
+\r
+}\r