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    }