001// License: GPL. For details, see LICENSE file. 002package org.openstreetmap.josm.gui.dialogs.relation; 003 004import java.awt.Color; 005import java.awt.Component; 006 007import javax.swing.JLabel; 008import javax.swing.JTable; 009import javax.swing.UIManager; 010import javax.swing.table.TableCellRenderer; 011 012import org.openstreetmap.josm.data.osm.OsmPrimitive; 013import org.openstreetmap.josm.gui.DefaultNameFormatter; 014import org.openstreetmap.josm.tools.ImageProvider; 015 016/** 017 * This is the {@link TableCellRenderer} used in {@link SelectionTable}. 018 * 019 */ 020public class SelectionTableCellRenderer extends JLabel implements TableCellRenderer { 021 public static final Color BGCOLOR_DOUBLE_ENTRY = new Color(254,226,214); 022 public static final Color BGCOLOR_SINGLE_ENTRY = new Color(235,255,177); 023 024 /** 025 * reference to the member table model; required, in order to check whether a 026 * selected primitive is already used in the member list of the currently edited 027 * relation 028 */ 029 private MemberTableModel model; 030 031 /** 032 * constructor 033 */ 034 public SelectionTableCellRenderer() { 035 setIcon(null); 036 setOpaque(true); 037 } 038 039 /** 040 * reset the renderer 041 */ 042 protected void reset() { 043 setBackground(UIManager.getColor("Table.background")); 044 setForeground(UIManager.getColor("Table.foreground")); 045 setBorder(null); 046 setIcon(null); 047 setToolTipText(null); 048 } 049 050 protected void renderBackground(OsmPrimitive primitive, boolean isSelected) { 051 Color bgc = UIManager.getColor("Table.background"); 052 if (primitive != null && model != null && model.getNumMembersWithPrimitive(primitive) == 1) { 053 bgc = BGCOLOR_SINGLE_ENTRY; 054 } else if (primitive != null && model != null && model.getNumMembersWithPrimitive(primitive) > 1) { 055 bgc = BGCOLOR_DOUBLE_ENTRY; 056 } 057 setBackground(bgc); 058 } 059 060 protected void renderPrimitive(OsmPrimitive primitive) { 061 setIcon(ImageProvider.get(primitive.getDisplayType())); 062 setText(primitive.getDisplayName(DefaultNameFormatter.getInstance())); 063 setToolTipText(DefaultNameFormatter.getInstance().buildDefaultToolTip(primitive)); 064 } 065 066 @Override 067 public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, 068 int row, int column) { 069 070 reset(); 071 if (value == null) 072 return this; 073 074 renderBackground((OsmPrimitive)value, isSelected); 075 renderPrimitive((OsmPrimitive)value); 076 return this; 077 } 078 079 public void setMemberTableModel(MemberTableModel model) { 080 this.model = model; 081 } 082}