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 final 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}