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
016/**
017 * This class renders {@link RelationMemberConflictDecisionType} entries of a list/table
018 */
019public class RelationMemberConflictDecisionRenderer extends JLabel
020implements TableCellRenderer, ListCellRenderer<RelationMemberConflictDecisionType> {
021
022    private final JosmComboBox<RelationMemberConflictDecisionType> cbDecisionTypes;
023
024    protected void resetTableRenderer() {
025        setOpaque(true);
026        setFont(UIManager.getFont("Table.font"));
027        setBackground(UIManager.getColor("Table.background"));
028        setForeground(UIManager.getColor("Table.foreground"));
029    }
030
031    protected void resetListRenderer() {
032        setOpaque(true);
033        setFont(UIManager.getFont("ComboBox.font"));
034        setBackground(UIManager.getColor("ComboBox.background"));
035        setForeground(UIManager.getColor("ComboBox.foreground"));
036    }
037
038    /**
039     * Constructs a new {@code RelationMemberConflictDecisionRenderer}.
040     */
041    public RelationMemberConflictDecisionRenderer() {
042        cbDecisionTypes = new JosmComboBox<>(RelationMemberConflictDecisionType.values());
043        cbDecisionTypes.setRenderer(this);
044    }
045
046    /* --------------------------------------------------------------------------------- */
047    /* TableCellRenderer                                                                 */
048    /* --------------------------------------------------------------------------------- */
049    @Override
050    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus,
051            int row, int column) {
052        resetTableRenderer();
053        if (value == null)
054            return this;
055
056        if (isSelected) {
057            setBackground(UIManager.getColor("Table.selectionBackground"));
058            setForeground(UIManager.getColor("Table.selectionForeground"));
059        }
060        RelationMemberConflictDecisionType decision = (RelationMemberConflictDecisionType) value;
061        cbDecisionTypes.setSelectedItem(decision);
062        return cbDecisionTypes;
063    }
064
065    /* --------------------------------------------------------------------------------- */
066    /* ListCellRenderer                                                                  */
067    /* --------------------------------------------------------------------------------- */
068    @Override
069    public Component getListCellRendererComponent(
070            JList<? extends RelationMemberConflictDecisionType> list,
071            RelationMemberConflictDecisionType decision, int index, boolean isSelected,
072            boolean cellHasFocus) {
073        resetListRenderer();
074        if (isSelected) {
075            setBackground(UIManager.getColor("ComboBox.selectionBackground"));
076            setForeground(UIManager.getColor("ComboBox.selectionForeground"));
077        }
078        RelationMemberConflictDecisionType.prepareLabel(decision, this);
079        if (RelationMemberConflictDecisionType.UNDECIDED.equals(decision)) {
080            setFont(getFont().deriveFont(Font.ITALIC));
081        }
082        return this;
083    }
084}