001// License: GPL. For details, see LICENSE file.
002package org.openstreetmap.josm.gui.conflict.tags;
003
004import java.awt.Component;
005import java.awt.Font;
006
007import javax.swing.JLabel;
008import javax.swing.JList;
009import javax.swing.JTable;
010import javax.swing.ListCellRenderer;
011import javax.swing.UIManager;
012import javax.swing.table.TableCellRenderer;
013
014import org.openstreetmap.josm.gui.widgets.JosmComboBox;
015
016public class RelationMemberConflictDecisionRenderer extends JLabel implements TableCellRenderer, ListCellRenderer{
017
018    private JosmComboBox cbDecisionTypes;
019
020    protected void resetTableRenderer() {
021        setOpaque(true);
022        setFont(UIManager.getFont("Table.font"));
023        setBackground(UIManager.getColor("Table.background"));
024        setForeground(UIManager.getColor("Table.foreground"));
025    }
026
027    protected void resetListRenderer() {
028        setOpaque(true);
029        setFont(UIManager.getFont("ComboBox.font"));
030        setBackground(UIManager.getColor("ComboBox.background"));
031        setForeground(UIManager.getColor("ComboBox.foreground"));
032    }
033
034    public RelationMemberConflictDecisionRenderer() {
035        cbDecisionTypes = new JosmComboBox(RelationMemberConflictDecisionType.values());
036        cbDecisionTypes.setRenderer(this);
037    }
038
039    /* --------------------------------------------------------------------------------- */
040    /* TableCellRenderer                                                                 */
041    /* --------------------------------------------------------------------------------- */
042    @Override
043    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus,
044            int row, int column) {
045        resetTableRenderer();
046        if (value == null)
047            return this;
048
049        if (isSelected) {
050            setBackground(UIManager.getColor("Table.selectionBackground"));
051            setForeground(UIManager.getColor("Table.selectionForeground"));
052        }
053        RelationMemberConflictDecisionType decision = (RelationMemberConflictDecisionType)value;
054        cbDecisionTypes.setSelectedItem(decision);
055        return cbDecisionTypes;
056    }
057
058    /* --------------------------------------------------------------------------------- */
059    /* ListCellRenderer                                                                  */
060    /* --------------------------------------------------------------------------------- */
061    @Override
062    public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected,
063            boolean cellHasFocus) {
064        resetListRenderer();
065        if (isSelected) {
066            setBackground(UIManager.getColor("ComboBox.selectionBackground"));
067            setForeground(UIManager.getColor("ComboBox.selectionForeground"));
068        }
069        RelationMemberConflictDecisionType decision = (RelationMemberConflictDecisionType)value;
070        RelationMemberConflictDecisionType.prepareLabel(decision, this);
071        if (RelationMemberConflictDecisionType.UNDECIDED.equals(decision)) {
072            setFont(getFont().deriveFont(Font.ITALIC));
073        }
074        return this;
075    }
076}