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