001 // License: GPL. For details, see LICENSE file. 002 package org.openstreetmap.josm.gui.dialogs.relation; 003 004 import java.awt.Color; 005 import java.awt.Component; 006 007 import javax.swing.JLabel; 008 import javax.swing.JTable; 009 import javax.swing.UIManager; 010 import javax.swing.table.TableCellRenderer; 011 012 import org.openstreetmap.josm.data.osm.OsmPrimitive; 013 import org.openstreetmap.josm.gui.DefaultNameFormatter; 014 import org.openstreetmap.josm.tools.ImageProvider; 015 016 /** 017 * This is the {@link TableCellRenderer} used in {@link SelectionTable}. 018 * 019 */ 020 public class SelectionTableCellRenderer extends JLabel implements TableCellRenderer { 021 public final static Color BGCOLOR_DOUBLE_ENTRY = new Color(254,226,214); 022 public final static 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.getPrimitiveId().getType())); 062 setText(primitive.getDisplayName(DefaultNameFormatter.getInstance())); 063 setToolTipText(DefaultNameFormatter.getInstance().buildDefaultToolTip(primitive)); 064 } 065 066 public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, 067 int row, int column) { 068 069 reset(); 070 if (value == null) 071 return this; 072 073 renderBackground((OsmPrimitive)value, isSelected); 074 renderPrimitive((OsmPrimitive)value); 075 return this; 076 } 077 078 public void setMemberTableModel(MemberTableModel model) { 079 this.model = model; 080 } 081 }