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 /** 020 * The background color for a selected row that has the focus. 021 */ 022 public static final Color BGCOLOR_SELECTED_FOCUS = new Color(0xff8faaff); 023 /** 024 * The background color for a selected row while the table is not focused. 025 */ 026 public static final Color BGCOLOR_SELECTED = new Color(0xffafc2ff); 027 028 /** 029 * Constructs a new {@code TagTableCellRenderer}. 030 */ 031 public TagTableCellRenderer() { 032 setOpaque(true); 033 } 034 035 protected void setBackgroundReadable(String key, HistoryBrowserModel.TagTableModel model, boolean isSelected, boolean hasFocus, 036 boolean isValue) { 037 Color bgColor = UIManager.getColor("Table.background"); 038 if ((!model.hasTag(key) && model.isCurrentPointInTime()) 039 || (!model.oppositeHasTag(key) && model.isReferencePointInTime())) { 040 bgColor = TwoColumnDiff.Item.DiffItemType.DELETED.getColor(); 041 } else if ((!model.oppositeHasTag(key) && model.isCurrentPointInTime()) 042 || (!model.hasTag(key) && model.isReferencePointInTime())) { 043 bgColor = TwoColumnDiff.Item.DiffItemType.INSERTED.getColor(); 044 } else if (isValue && model.hasTag(key) && model.oppositeHasTag(key) && !model.hasSameValueAsOpposite(key)) { 045 bgColor = TwoColumnDiff.Item.DiffItemType.CHANGED.getColor(); 046 } 047 if (isSelected) { 048 if (hasFocus) { 049 bgColor = BGCOLOR_SELECTED_FOCUS; 050 } else { 051 bgColor = BGCOLOR_SELECTED; 052 } 053 } 054 055 GuiHelper.setBackgroundReadable(this, bgColor); 056 } 057 058 @Override 059 public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, 060 int row, int column) { 061 062 if (value == null) 063 return this; 064 065 String key = (String) value; 066 HistoryBrowserModel.TagTableModel model = getTagTableModel(table); 067 068 String text = ""; 069 if (model.hasTag(key)) { 070 switch(column) { 071 case TagTableColumnModel.COLUMN_KEY: 072 // the name column 073 text = key; 074 break; 075 case TagTableColumnModel.COLUMN_VALUE: 076 // the value column 077 text = model.getValue(key); 078 break; 079 default: // Do nothing 080 } 081 } 082 083 setText(text); 084 setToolTipText(text); 085 setBackgroundReadable(key, model, isSelected, table.hasFocus(), column == TagTableColumnModel.COLUMN_VALUE); 086 return this; 087 } 088 089 protected HistoryBrowserModel.TagTableModel getTagTableModel(JTable table) { 090 return (HistoryBrowserModel.TagTableModel) table.getModel(); 091 } 092}