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
012import org.openstreetmap.josm.gui.util.GuiHelper;
013
014/**
015 * The {@link TableCellRenderer} for a list of tags in {@link HistoryBrowser}
016 *
017 */
018public class TagTableCellRenderer extends JLabel implements TableCellRenderer {
019    public static final Color BGCOLOR_SELECTED = new Color(143, 170, 255);
020
021    /**
022     * Constructs a new {@code TagTableCellRenderer}.
023     */
024    public TagTableCellRenderer() {
025        setOpaque(true);
026    }
027
028    protected void setBackgroundReadable(String key, HistoryBrowserModel.TagTableModel model, boolean isSelected, boolean isValue) {
029        Color bgColor = UIManager.getColor("Table.background");
030        if (!model.hasTag(key) && model.isCurrentPointInTime()
031                || !model.oppositeHasTag(key) && model.isReferencePointInTime()) {
032            bgColor = TwoColumnDiff.Item.DiffItemType.DELETED.getColor();
033        } else if (!model.oppositeHasTag(key) && model.isCurrentPointInTime()
034                || !model.hasTag(key) && model.isReferencePointInTime()) {
035            bgColor = TwoColumnDiff.Item.DiffItemType.INSERTED.getColor();
036        } else if (isValue && model.hasTag(key) && model.oppositeHasTag(key) && !model.hasSameValueAsOpposite(key)) {
037            bgColor = TwoColumnDiff.Item.DiffItemType.CHANGED.getColor();
038        }
039        if (isSelected) {
040            bgColor = BGCOLOR_SELECTED;
041        }
042
043        GuiHelper.setBackgroundReadable(this, bgColor);
044    }
045
046    @Override
047    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus,
048            int row, int column) {
049
050        if (value == null)
051            return this;
052
053        String key = (String) value;
054        HistoryBrowserModel.TagTableModel model = getTagTableModel(table);
055
056        switch(column) {
057        case 0:
058            // the name column
059            setText(model.hasTag(key) ? key : "");
060            setToolTipText(getText());
061            setBackgroundReadable(key, model, isSelected, false);
062            break;
063        case 1:
064            // the value column
065            setText(model.hasTag(key) ? model.getValue(key) : "");
066            setToolTipText(getText());
067            setBackgroundReadable(key, model, isSelected, true);
068            break;
069        }
070
071        return this;
072    }
073
074    protected HistoryBrowserModel.TagTableModel getTagTableModel(JTable table) {
075        return (HistoryBrowserModel.TagTableModel) table.getModel();
076    }
077}