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