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}