X-Git-Url: https://gerrit.simantics.org/r/gitweb?p=simantics%2Fplatform.git;a=blobdiff_plain;f=bundles%2Forg.simantics.browsing.ui.nattable%2Fsrc%2Forg%2Fsimantics%2Fbrowsing%2Fui%2Fnattable%2FGEStyler.java;fp=bundles%2Forg.simantics.browsing.ui.nattable%2Fsrc%2Forg%2Fsimantics%2Fbrowsing%2Fui%2Fnattable%2FGEStyler.java;h=3ab490c6f806314358d051727eddf47703b8cf3a;hp=0000000000000000000000000000000000000000;hb=96bb7ef9cbe42d82eb58306d8f9b62392cc29ba8;hpb=ae5bb63c5c88f6569518fed2a24df86fbd0570ff diff --git a/bundles/org.simantics.browsing.ui.nattable/src/org/simantics/browsing/ui/nattable/GEStyler.java b/bundles/org.simantics.browsing.ui.nattable/src/org/simantics/browsing/ui/nattable/GEStyler.java new file mode 100644 index 000000000..3ab490c6f --- /dev/null +++ b/bundles/org.simantics.browsing.ui.nattable/src/org/simantics/browsing/ui/nattable/GEStyler.java @@ -0,0 +1,161 @@ +package org.simantics.browsing.ui.nattable; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.eclipse.nebula.widgets.nattable.config.CellConfigAttributes; +import org.eclipse.nebula.widgets.nattable.config.ConfigRegistry; +import org.eclipse.nebula.widgets.nattable.config.IConfigRegistry; +import org.eclipse.nebula.widgets.nattable.layer.cell.ILayerCell; +import org.eclipse.nebula.widgets.nattable.painter.cell.CellPainterWrapper; +import org.eclipse.nebula.widgets.nattable.painter.cell.ICellPainter; +import org.eclipse.nebula.widgets.nattable.style.CellStyleAttributes; +import org.eclipse.nebula.widgets.nattable.style.ConfigAttribute; +import org.eclipse.nebula.widgets.nattable.style.DisplayMode; +import org.eclipse.nebula.widgets.nattable.style.IDisplayModeOrdering; +import org.eclipse.nebula.widgets.nattable.style.Style; +import org.eclipse.swt.graphics.GC; +import org.eclipse.swt.graphics.Image; +import org.eclipse.swt.graphics.Rectangle; + +public class GEStyler extends CellPainterWrapper{ + + private GETreeData treeData; + + public GEStyler(GETreeData treeData, ICellPainter painter) { + super(painter); + this.treeData = treeData; + } + + private ConfigRegistryWrapper wrapper = new ConfigRegistryWrapper(); + + @Override + public void paintCell(ILayerCell cell, GC gc, Rectangle rectangle, IConfigRegistry configRegistry) { + wrapper.clear(); + wrapper.wrappedRegistry = configRegistry; + TreeNode node = treeData.getDataAtIndex(cell.getRowIndex()); + Style style = new Style(); + node.getStyle(cell.getColumnIndex(), style); + Image image = node.getImage(cell.getColumnIndex()); + if (image != null) + style.setAttributeValue(CellStyleAttributes.IMAGE, image); + + wrapper.setSpecificConfigAttribute(CellConfigAttributes.CELL_STYLE, DisplayMode.NORMAL, "BODY", style); +// wrapper.setSpecificConfigAttribute(CellStyleAttributes.FOREGROUND_COLOR, DisplayMode.NORMAL, "BODY", style.getAttributeValue(CellStyleAttributes.FOREGROUND_COLOR)); +// wrapper.setSpecificConfigAttribute(CellStyleAttributes.BACKGROUND_COLOR, DisplayMode.NORMAL, "BODY", style.getAttributeValue(CellStyleAttributes.BACKGROUND_COLOR)); +// wrapper.setSpecificConfigAttribute(CellStyleAttributes.FONT, DisplayMode.NORMAL, "BODY", style.getAttributeValue(CellStyleAttributes.FONT)); + super.paintCell(cell, gc, rectangle, wrapper); + } + + private class ConfigRegistryWrapper extends ConfigRegistry { + IConfigRegistry wrappedRegistry; + Map, Map>> configRegistry = new HashMap, Map>>(); + + public void clear() { + configRegistry.clear(); + } + + @Override + public T getConfigAttribute(ConfigAttribute configAttribute, String targetDisplayMode, + String... configLabels) { + return wrappedRegistry.getConfigAttribute(configAttribute, targetDisplayMode, configLabels); + } + + @Override + public T getConfigAttribute(ConfigAttribute configAttribute, String targetDisplayMode, + List configLabels) { + return wrappedRegistry.getConfigAttribute(configAttribute, targetDisplayMode, configLabels); + } + + @Override + public T getSpecificConfigAttribute(ConfigAttribute configAttribute, String displayMode, + String configLabel) { + T value = _getSpecificConfigAttribute(configAttribute, displayMode, configLabel); + if (value != null) + return value; + return wrappedRegistry.getSpecificConfigAttribute(configAttribute, displayMode, configLabel); + } + + public T _getSpecificConfigAttribute(ConfigAttribute configAttribute, + String displayMode, String configLabel) { + T attributeValue = null; + + Map> displayModeConfigAttributeMap = this.configRegistry + .get(configAttribute); + if (displayModeConfigAttributeMap != null) { + Map configAttributeMap = (Map) displayModeConfigAttributeMap.get(displayMode); + if (configAttributeMap != null) { + attributeValue = configAttributeMap.get(configLabel); + if (attributeValue != null) { + return attributeValue; + } + } + } + + return attributeValue; + } + + public void setSpecificConfigAttribute(ConfigAttribute configAttribute, String displayMode, + String configLabel, T attributeValue) { + Map> displayModeConfigAttributeMap = this.configRegistry + .get(configAttribute); + if (displayModeConfigAttributeMap == null) { + displayModeConfigAttributeMap = new HashMap>(); + this.configRegistry.put(configAttribute, displayModeConfigAttributeMap); + } + + Map configAttributeMap = (Map) displayModeConfigAttributeMap.get(displayMode); + if (configAttributeMap == null) { + configAttributeMap = new HashMap(); + displayModeConfigAttributeMap.put(displayMode, configAttributeMap); + } + + configAttributeMap.put(configLabel, attributeValue); + } + + @Override + public void registerConfigAttribute(ConfigAttribute configAttribute, T attributeValue) { + wrappedRegistry.registerConfigAttribute(configAttribute, attributeValue); + + } + + @Override + public void registerConfigAttribute(ConfigAttribute configAttribute, T attributeValue, + String targetDisplayMode) { + wrappedRegistry.registerConfigAttribute(configAttribute, attributeValue, targetDisplayMode); + + } + + @Override + public void registerConfigAttribute(ConfigAttribute configAttribute, T attributeValue, + String targetDisplayMode, String configLabel) { + wrappedRegistry.registerConfigAttribute(configAttribute, attributeValue, targetDisplayMode, configLabel); + + } + + @Override + public void unregisterConfigAttribute(ConfigAttribute configAttributeType) { + wrappedRegistry.unregisterConfigAttribute(configAttributeType); + + } + + @Override + public void unregisterConfigAttribute(ConfigAttribute configAttributeType, String displayMode) { + wrappedRegistry.unregisterConfigAttribute(configAttributeType, displayMode); + + } + + @Override + public void unregisterConfigAttribute(ConfigAttribute configAttributeType, String displayMode, + String configLabel) { + wrappedRegistry.unregisterConfigAttribute(configAttributeType, displayMode, configLabel); + } + + @Override + public IDisplayModeOrdering getDisplayModeOrdering() { + return wrappedRegistry.getDisplayModeOrdering(); + } + + } +}