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 }