// License: GPL. For details, see LICENSE file. package org.openstreetmap.josm.gui.dialogs.relation; import java.awt.Color; import java.awt.Component; import javax.swing.ImageIcon; import javax.swing.JLabel; import javax.swing.JTree; import javax.swing.tree.TreeCellRenderer; import org.openstreetmap.josm.data.osm.Relation; import org.openstreetmap.josm.gui.DefaultNameFormatter; import org.openstreetmap.josm.tools.ImageProvider; /** * This is the cell renderer used in {@link RelationTree}. * * */ public class RelationTreeCellRenderer extends JLabel implements TreeCellRenderer { public static final Color BGCOLOR_SELECTED = new Color(143, 170, 255); /** the relation icon */ private final ImageIcon icon; /** * constructor */ public RelationTreeCellRenderer() { icon = ImageProvider.get("data", "relation"); setOpaque(true); } /** * renders the icon */ protected void renderIcon() { setIcon(icon); } /** * renders the textual value. Uses the relations names as value * * @param relation the relation */ protected void renderValue(Relation relation) { setText(relation.getDisplayName(DefaultNameFormatter.getInstance())); } /** * renders the background * * @param selected true, if the current node is selected */ protected void renderBackground(boolean selected) { Color bgColor = Color.WHITE; if (selected) { bgColor = BGCOLOR_SELECTED; } setBackground(bgColor); } @Override public Component getTreeCellRendererComponent(JTree tree, Object value, boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus) { // Hackish fix for #7056 - if name template for duplicated relation contains tags from parent, // template will fail because getReffers doesn't work on primitives not yet in dataset if (!tree.isRootVisible() && tree.getModel().getRoot() == value) return this; renderIcon(); renderValue((Relation) value); renderBackground(selected); return this; } }