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