001    // License: GPL. For details, see LICENSE file.
002    package org.openstreetmap.josm.gui.conflict.tags;
003    
004    import java.awt.Component;
005    import java.awt.Font;
006    
007    import javax.swing.JLabel;
008    import javax.swing.JList;
009    import javax.swing.JTable;
010    import javax.swing.ListCellRenderer;
011    import javax.swing.UIManager;
012    import javax.swing.table.TableCellRenderer;
013    
014    import org.openstreetmap.josm.gui.widgets.JosmComboBox;
015    
016    public 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        public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus,
043                int row, int column) {
044            resetTableRenderer();
045            if (value == null)
046                return this;
047    
048            if (isSelected) {
049                setBackground(UIManager.getColor("Table.selectionBackground"));
050                setForeground(UIManager.getColor("Table.selectionForeground"));
051            }
052            RelationMemberConflictDecisionType decision = (RelationMemberConflictDecisionType)value;
053            cbDecisionTypes.setSelectedItem(decision);
054            return cbDecisionTypes;
055        }
056    
057        /* --------------------------------------------------------------------------------- */
058        /* ListCellRenderer                                                                  */
059        /* --------------------------------------------------------------------------------- */
060        public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected,
061                boolean cellHasFocus) {
062            resetListRenderer();
063            if (isSelected) {
064                setBackground(UIManager.getColor("ComboBox.selectionBackground"));
065                setForeground(UIManager.getColor("ComboBox.selectionForeground"));
066            }
067            RelationMemberConflictDecisionType decision = (RelationMemberConflictDecisionType)value;
068            RelationMemberConflictDecisionType.prepareLabel(decision, this);
069            if (RelationMemberConflictDecisionType.UNDECIDED.equals(decision)) {
070                setFont(getFont().deriveFont(Font.ITALIC));
071            }
072            return this;
073        }
074    }