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}