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