package org.geopublishing.geopublisher.gui.group; import java.awt.Color; import java.awt.Component; import java.awt.Graphics2D; import java.awt.Image; import java.awt.image.BufferedImage; import javax.swing.ImageIcon; import javax.swing.JTree; import javax.swing.tree.DefaultMutableTreeNode; import javax.swing.tree.DefaultTreeCellRenderer; import org.geopublishing.atlasViewer.GpCoreUtil; import org.geopublishing.atlasViewer.dp.DpEntry; import org.geopublishing.atlasViewer.dp.DpEntryType; import org.geopublishing.atlasViewer.dp.DpRef; import org.geopublishing.atlasViewer.dp.Group; import org.geopublishing.atlasViewer.map.MapRef; import org.geopublishing.atlasViewer.swing.Icons; import de.schmitzm.jfree.chart.style.ChartStyle; public class GroupTreeCellRenderer extends DefaultTreeCellRenderer { @Override public Component getTreeCellRendererComponent(final JTree tree, final Object value, final boolean sel, final boolean expanded, final boolean leaf, final int row, final boolean hasFocus) { final Component fromSuper = super.getTreeCellRendererComponent(tree, value, sel, expanded, leaf, row, hasFocus); final DefaultMutableTreeNode node = (DefaultMutableTreeNode) value; if (leaf) { if (node instanceof MapRef) { // MapRef mapRef = (MapRef)unknown; setIcon(Icons.ICON_MAP_SMALL); } else if (node instanceof DpRef<?>) { final DpRef<? extends DpEntry<? extends ChartStyle>> dpr = (DpRef<?>) node; DpEntry<? extends ChartStyle> target = dpr.getTarget(); if (target == null) setIcon(DpEntryType.UNKNOWN.getIconSmall()); else setIcon(target.getType().getIconSmall()); } } else { if (node instanceof Group) { /** * Depending on the QM value, we paint some red/green color over * the icon. */ final Group group2 = (Group) node; final Double d = group2.getQuality(); final Float green = d.floatValue(); final Float red = 1f - d.floatValue(); final Color c = new Color(red, green, 0.1f); final Image im = new BufferedImage(16, 16, BufferedImage.TYPE_INT_RGB); final Graphics2D g2 = (Graphics2D) im.getGraphics(); g2.setColor(getBackground()); g2.fillRect(0, 0, 16, 16); if (getIcon() != null) getIcon().paintIcon(this, g2, 0, 0); g2.setColor(c); g2.fillRect(0, 1, 4, 15); setIcon(new ImageIcon(im)); /** * Mark the Group if it is a special Group */ if (group2.isFileMenu()) { setText(getText() + " (<-" + GpCoreUtil.R("AtlasViewer.FileMenu") + ")"); } if (group2.isHelpMenu()) { setText(getText() + " (<-" + GpCoreUtil.R("AtlasViewer.HelpMenu") + ")"); } } } return fromSuper; } }