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}