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 final static Color BGCOLOR_DIFFERENCE = new Color(255,197,197); 021 022 public TagTableCellRenderer() { 023 setOpaque(true); 024 } 025 026 protected void renderName(String key, HistoryBrowserModel.TagTableModel model, boolean isSelected) { 027 String text = key; 028 Color bgColor = UIManager.getColor("Table.background"); 029 Color fgColor = UIManager.getColor("Table.foreground"); 030 Font font = UIManager.getFont("Table.font"); 031 if (! model.hasTag(key)) { 032 text = tr("not present"); 033 bgColor = BGCOLOR_DIFFERENCE; 034 font = font.deriveFont(Font.ITALIC); 035 } else if (!model.oppositeHasTag(key)) { 036 bgColor = BGCOLOR_DIFFERENCE; 037 } 038 if (isSelected) { 039 bgColor = UIManager.getColor("Table.backgroundSelected"); 040 fgColor = UIManager.getColor("Table.foregroundSelected"); 041 } 042 043 setText(text); 044 setToolTipText(text); 045 setBackground(bgColor); 046 setForeground(fgColor); 047 setFont(font); 048 } 049 050 protected void renderValue(String key, HistoryBrowserModel.TagTableModel model, boolean isSelected) { 051 String text = ""; 052 Color bgColor = UIManager.getColor("Table.background"); 053 Color fgColor = UIManager.getColor("Table.foreground"); 054 Font font = UIManager.getFont("Table.font"); 055 if (! model.hasTag(key)) { 056 text = tr("not present"); 057 bgColor = BGCOLOR_DIFFERENCE; 058 font = font.deriveFont(Font.ITALIC); 059 } else { 060 text = model.getValue(key); 061 if (!model.hasSameValueAsOpposite(key)) { 062 bgColor = BGCOLOR_DIFFERENCE; 063 } 064 } 065 if (isSelected) { 066 bgColor = UIManager.getColor("Table.backgroundSelected"); 067 fgColor = UIManager.getColor("Table.foregroundSelected"); 068 } 069 070 setText(text); 071 setToolTipText(text); 072 setBackground(bgColor); 073 setForeground(fgColor); 074 setFont(font); 075 } 076 077 @Override 078 public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, 079 int row, int column) { 080 081 if (value == null) 082 return this; 083 084 String key = (String)value; 085 HistoryBrowserModel.TagTableModel model = getTagTableModel(table); 086 087 switch(column) { 088 case 0: 089 // the name column 090 renderName(key, model, isSelected); 091 break; 092 case 1: 093 // the value column 094 renderValue(key, model, isSelected); 095 break; 096 } 097 098 return this; 099 } 100 101 protected HistoryBrowserModel.TagTableModel getTagTableModel(JTable table) { 102 return (HistoryBrowserModel.TagTableModel) table.getModel(); 103 } 104}