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 == decision) { 080 setFont(getFont().deriveFont(Font.ITALIC)); 081 } 082 return this; 083 } 084}