// License: GPL. For details, see LICENSE file.
package org.openstreetmap.josm.gui.history;
import java.awt.Color;
import java.awt.Component;
import javax.swing.JLabel;
import javax.swing.JTable;
import javax.swing.UIManager;
import javax.swing.table.TableCellRenderer;
import org.openstreetmap.josm.gui.util.GuiHelper;
/**
* The {@link TableCellRenderer} for a list of tags in {@link HistoryBrowser}
*
*/
public class TagTableCellRenderer extends JLabel implements TableCellRenderer {
/**
* The background color for a selected row that has the focus.
*/
public static final Color BGCOLOR_SELECTED_FOCUS = new Color(0xff8faaff);
/**
* The background color for a selected row while the table is not focused.
*/
public static final Color BGCOLOR_SELECTED = new Color(0xffafc2ff);
/**
* Constructs a new {@code TagTableCellRenderer}.
*/
public TagTableCellRenderer() {
setOpaque(true);
}
protected void setBackgroundReadable(String key, TagTableModel model, boolean isSelected, boolean hasFocus, boolean isValue) {
Color bgColor = UIManager.getColor("Table.background");
if ((!model.hasTag(key) && model.isCurrentPointInTime())
|| (!model.oppositeHasTag(key) && model.isReferencePointInTime())) {
bgColor = TwoColumnDiff.Item.DiffItemType.DELETED.getColor();
} else if ((!model.oppositeHasTag(key) && model.isCurrentPointInTime())
|| (!model.hasTag(key) && model.isReferencePointInTime())) {
bgColor = TwoColumnDiff.Item.DiffItemType.INSERTED.getColor();
} else if (isValue && model.hasTag(key) && model.oppositeHasTag(key) && !model.hasSameValueAsOpposite(key)) {
bgColor = TwoColumnDiff.Item.DiffItemType.CHANGED.getColor();
}
if (isSelected) {
if (hasFocus) {
bgColor = BGCOLOR_SELECTED_FOCUS;
} else {
bgColor = BGCOLOR_SELECTED;
}
}
GuiHelper.setBackgroundReadable(this, bgColor);
}
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus,
int row, int column) {
if (value == null)
return this;
String key = (String) value;
TagTableModel model = getTagTableModel(table);
String text = "";
if (model.hasTag(key)) {
switch(column) {
case TagTableColumnModel.COLUMN_KEY:
// the name column
text = key;
break;
case TagTableColumnModel.COLUMN_VALUE:
// the value column
text = model.getValue(key);
break;
default: // Do nothing
}
}
setText(text);
setToolTipText(text);
setBackgroundReadable(key, model, isSelected, table.hasFocus(), column == TagTableColumnModel.COLUMN_VALUE);
return this;
}
protected TagTableModel getTagTableModel(JTable table) {
return (TagTableModel) table.getModel();
}
}