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; 013 014/** 015 * This is the {@link TableCellRenderer} used in the tables of 016 * {@link org.openstreetmap.josm.gui.conflict.pair.relation.RelationMemberMerger}. 017 * 018 */ 019public abstract class MemberTableCellRenderer extends JLabel implements TableCellRenderer { 020 public final static Color BGCOLOR_EMPTY_ROW = new Color(234, 234, 234); 021 public final static Color BGCOLOR_IN_JOSM_SELECTION = new Color(235,255,177); 022 023 public final static Color BGCOLOR_NOT_IN_OPPOSITE = new Color(255, 197, 197); 024 public final static Color BGCOLOR_DOUBLE_ENTRY = new Color(254,226,214); 025 026 /** 027 * constructor 028 */ 029 public MemberTableCellRenderer() { 030 setIcon(null); 031 setOpaque(true); 032 } 033 034 /** 035 * reset the renderer 036 */ 037 protected void reset() { 038 setBackground(UIManager.getColor("Table.background")); 039 setForeground(UIManager.getColor("Table.foreground")); 040 setBorder(null); 041 setIcon(null); 042 setToolTipText(null); 043 } 044 045 protected void renderBackground(MemberTableModel model, OsmPrimitive primitive, boolean isSelected) { 046 Color bgc = UIManager.getColor("Table.background"); 047 if (isSelected) { 048 bgc = UIManager.getColor("Table.selectionBackground"); 049 } else if (primitive != null && model.isInJosmSelection(primitive)) { 050 bgc = BGCOLOR_IN_JOSM_SELECTION; 051 } else if (primitive != null && model.getNumMembersWithPrimitive(primitive) > 1) { 052 bgc = BGCOLOR_DOUBLE_ENTRY; 053 } 054 setBackground(bgc); 055 } 056 057 protected void renderForeground(boolean isSelected) { 058 Color fgc; 059 if (isSelected) { 060 fgc = UIManager.getColor("Table.selectionForeground"); 061 } else { 062 fgc = UIManager.getColor("Table.foreground"); 063 } 064 setForeground(fgc); 065 } 066 067 @Override 068 abstract public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, 069 boolean hasFocus, int row, int column); 070 071 /** 072 * replies the model 073 * @param table the table 074 * @return the table model 075 */ 076 protected MemberTableModel getModel(JTable table) { 077 return (MemberTableModel) table.getModel(); 078 } 079}