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}