001// License: GPL. For details, see LICENSE file. 002package org.openstreetmap.josm.gui.history; 003 004import static org.openstreetmap.josm.tools.I18n.tr; 005 006import java.awt.Color; 007import java.awt.Component; 008import java.awt.Font; 009 010import javax.swing.JLabel; 011import javax.swing.JTable; 012import javax.swing.UIManager; 013import javax.swing.table.TableCellRenderer; 014 015/** 016 * The {@link TableCellRenderer} for a list of tags in {@link HistoryBrowser} 017 * 018 */ 019public class TagTableCellRenderer extends JLabel implements TableCellRenderer { 020 public static final Color BGCOLOR_DIFFERENCE = new Color(255,197,197); 021 022 /** 023 * Constructs a new {@code TagTableCellRenderer}. 024 */ 025 public TagTableCellRenderer() { 026 setOpaque(true); 027 } 028 029 protected void renderName(String key, HistoryBrowserModel.TagTableModel model, boolean isSelected) { 030 String text = key; 031 Color bgColor = UIManager.getColor("Table.background"); 032 Color fgColor = UIManager.getColor("Table.foreground"); 033 Font font = UIManager.getFont("Table.font"); 034 if (! model.hasTag(key)) { 035 text = tr("not present"); 036 bgColor = BGCOLOR_DIFFERENCE; 037 font = font.deriveFont(Font.ITALIC); 038 } else if (!model.oppositeHasTag(key)) { 039 bgColor = BGCOLOR_DIFFERENCE; 040 } 041 if (isSelected) { 042 bgColor = UIManager.getColor("Table.backgroundSelected"); 043 fgColor = UIManager.getColor("Table.foregroundSelected"); 044 } 045 046 setText(text); 047 setToolTipText(text); 048 setBackground(bgColor); 049 setForeground(fgColor); 050 setFont(font); 051 } 052 053 protected void renderValue(String key, HistoryBrowserModel.TagTableModel model, boolean isSelected) { 054 String text = ""; 055 Color bgColor = UIManager.getColor("Table.background"); 056 Color fgColor = UIManager.getColor("Table.foreground"); 057 Font font = UIManager.getFont("Table.font"); 058 if (! model.hasTag(key)) { 059 text = tr("not present"); 060 bgColor = BGCOLOR_DIFFERENCE; 061 font = font.deriveFont(Font.ITALIC); 062 } else { 063 text = model.getValue(key); 064 if (!model.hasSameValueAsOpposite(key)) { 065 bgColor = BGCOLOR_DIFFERENCE; 066 } 067 } 068 if (isSelected) { 069 bgColor = UIManager.getColor("Table.backgroundSelected"); 070 fgColor = UIManager.getColor("Table.foregroundSelected"); 071 } 072 073 setText(text); 074 setToolTipText(text); 075 setBackground(bgColor); 076 setForeground(fgColor); 077 setFont(font); 078 } 079 080 @Override 081 public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, 082 int row, int column) { 083 084 if (value == null) 085 return this; 086 087 String key = (String)value; 088 HistoryBrowserModel.TagTableModel model = getTagTableModel(table); 089 090 switch(column) { 091 case 0: 092 // the name column 093 renderName(key, model, isSelected); 094 break; 095 case 1: 096 // the value column 097 renderValue(key, model, isSelected); 098 break; 099 } 100 101 return this; 102 } 103 104 protected HistoryBrowserModel.TagTableModel getTagTableModel(JTable table) { 105 return (HistoryBrowserModel.TagTableModel) table.getModel(); 106 } 107}