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<RelationMemberConflictDecisionType> {
017
018    private JosmComboBox<RelationMemberConflictDecisionType> 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    /**
035     * Constructs a new {@code RelationMemberConflictDecisionRenderer}.
036     */
037    public RelationMemberConflictDecisionRenderer() {
038        cbDecisionTypes = new JosmComboBox<>(RelationMemberConflictDecisionType.values());
039        cbDecisionTypes.setRenderer(this);
040    }
041
042    /* --------------------------------------------------------------------------------- */
043    /* TableCellRenderer                                                                 */
044    /* --------------------------------------------------------------------------------- */
045    @Override
046    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus,
047            int row, int column) {
048        resetTableRenderer();
049        if (value == null)
050            return this;
051
052        if (isSelected) {
053            setBackground(UIManager.getColor("Table.selectionBackground"));
054            setForeground(UIManager.getColor("Table.selectionForeground"));
055        }
056        RelationMemberConflictDecisionType decision = (RelationMemberConflictDecisionType)value;
057        cbDecisionTypes.setSelectedItem(decision);
058        return cbDecisionTypes;
059    }
060
061    /* --------------------------------------------------------------------------------- */
062    /* ListCellRenderer                                                                  */
063    /* --------------------------------------------------------------------------------- */
064    @Override
065    public Component getListCellRendererComponent(
066            JList<? extends RelationMemberConflictDecisionType> list,
067            RelationMemberConflictDecisionType decision, int index, boolean isSelected,
068            boolean cellHasFocus) {
069        resetListRenderer();
070        if (isSelected) {
071            setBackground(UIManager.getColor("ComboBox.selectionBackground"));
072            setForeground(UIManager.getColor("ComboBox.selectionForeground"));
073        }
074        RelationMemberConflictDecisionType.prepareLabel(decision, this);
075        if (RelationMemberConflictDecisionType.UNDECIDED.equals(decision)) {
076            setFont(getFont().deriveFont(Font.ITALIC));
077        }
078        return this;
079    }
080}