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.BorderFactory; 008import javax.swing.JLabel; 009import javax.swing.JTable; 010import javax.swing.SwingConstants; 011import javax.swing.table.TableCellRenderer; 012 013import org.openstreetmap.josm.data.osm.history.HistoryOsmPrimitive; 014import org.openstreetmap.josm.gui.util.GuiHelper; 015 016import static org.openstreetmap.josm.tools.I18n.tr; 017 018/** 019 * The {@link TableCellRenderer} for a list of tags in {@link HistoryBrowser} 020 * 021 */ 022public class TagTableCellRenderer extends JLabel implements TableCellRenderer { 023 /** 024 * The background color for a selected row that has the focus. 025 */ 026 public static final Color BGCOLOR_SELECTED_FOCUS = new Color(0xff8faaff); 027 /** 028 * The background color for a selected row while the table is not focused. 029 */ 030 public static final Color BGCOLOR_SELECTED = new Color(0xffafc2ff); 031 032 /** 033 * Constructs a new {@code TagTableCellRenderer}. 034 */ 035 public TagTableCellRenderer() { 036 setOpaque(true); 037 } 038 039 @Override 040 public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, 041 int row, int column) { 042 043 if (value == null) 044 return this; 045 046 String key = (String) value; 047 TagTableModel model = getTagTableModel(table); 048 049 String text = ""; 050 String tooltip = null; 051 setBorder(null); 052 if (model.hasTag(key)) { 053 switch(column) { 054 case TagTableColumnModel.COLUMN_KEY: 055 // the name column 056 text = key; 057 break; 058 case TagTableColumnModel.COLUMN_VALUE: 059 // the value column 060 text = model.getValue(key); 061 break; 062 case TagTableColumnModel.COLUMN_VERSION: 063 HistoryOsmPrimitive primitive = model.getWhichChangedTag(key); 064 if (primitive != null) { 065 text = model.getVersionString(primitive); 066 tooltip = tr("Key ''{0}'' was changed in version {1}", key, primitive.getVersion()); 067 setBorder(BorderFactory.createMatteBorder(0, 0, 0, 2, model.getVersionColor(primitive))); 068 } 069 break; 070 default: // Do nothing 071 } 072 } 073 074 setText(text); 075 setToolTipText(tooltip != null ? tooltip : text); 076 setHorizontalAlignment(column == TagTableColumnModel.COLUMN_VERSION ? SwingConstants.TRAILING : SwingConstants.LEADING); 077 TwoColumnDiff.Item.DiffItemType diffItemType = model.getDiffItemType(key, column == TagTableColumnModel.COLUMN_VALUE); 078 GuiHelper.setBackgroundReadable(this, diffItemType.getColor(isSelected, table.hasFocus())); 079 return this; 080 } 081 082 protected TagTableModel getTagTableModel(JTable table) { 083 return (TagTableModel) table.getModel(); 084 } 085}