001 // License: GPL. For details, see LICENSE file. 002 package org.openstreetmap.josm.gui.history; 003 004 import static org.openstreetmap.josm.tools.I18n.tr; 005 006 import java.awt.Color; 007 import java.awt.Component; 008 import java.awt.Font; 009 010 import javax.swing.JLabel; 011 import javax.swing.JTable; 012 import javax.swing.UIManager; 013 import javax.swing.table.TableCellRenderer; 014 015 /** 016 * The {@link TableCellRenderer} for a list of tagsin {@link HistoryBrower} 017 * 018 */ 019 public 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 public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, 078 int row, int column) { 079 080 if (value == null) 081 return this; 082 083 String key = (String)value; 084 HistoryBrowserModel.TagTableModel model = getTagTableModel(table); 085 086 switch(column) { 087 case 0: 088 // the name column 089 renderName(key, model, isSelected); 090 break; 091 case 1: 092 // the value column 093 renderValue(key, model, isSelected); 094 break; 095 } 096 097 return this; 098 } 099 100 protected HistoryBrowserModel.TagTableModel getTagTableModel(JTable table) { 101 return (HistoryBrowserModel.TagTableModel) table.getModel(); 102 } 103 }