// License: GPL. For details, see LICENSE file. package org.openstreetmap.josm.gui.history; import static org.openstreetmap.josm.tools.I18n.tr; import java.awt.Color; import java.awt.Component; import javax.swing.ImageIcon; import javax.swing.JLabel; import javax.swing.JTable; import javax.swing.table.TableCellRenderer; import org.openstreetmap.josm.tools.ImageProvider; /** * The {@see TableCellRenderer} for a list of nodes in [@see HistoryBrower} * * */ public class NodeListTableCellRenderer extends JLabel implements TableCellRenderer { public final static Color BGCOLOR_EMPTY_ROW = new Color(234,234,234); public final static Color BGCOLOR_NOT_IN_OPPOSITE = new Color(255,197,197); public final static Color BGCOLOR_IN_OPPOSITE = new Color(255,234,213); public final static Color BGCOLOR_SELECTED = new Color(143,170,255); private ImageIcon nodeIcon; public NodeListTableCellRenderer(){ setOpaque(true); nodeIcon = ImageProvider.get("data", "node"); setIcon(nodeIcon); } protected void renderNode(HistoryBrowserModel.NodeListTableModel model, Long nodeId, int row, boolean isSelected) { String text = ""; Color bgColor = Color.WHITE; if (nodeId == null) { text = ""; bgColor = BGCOLOR_EMPTY_ROW; setIcon(null); } else { text = tr("Node {0}", nodeId.toString()); setIcon(nodeIcon); if (model.isSameInOppositeWay(row)) { bgColor = Color.WHITE; } else if (model.isInOppositeWay(row)) { bgColor = BGCOLOR_IN_OPPOSITE; } else { bgColor = BGCOLOR_NOT_IN_OPPOSITE; } } if (isSelected) { bgColor = BGCOLOR_SELECTED; } setText(text); setBackground(bgColor); } public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { HistoryBrowserModel.NodeListTableModel model = getNodeListTableModel(table); Long nodeId = (Long)value; renderNode(model, nodeId, row, isSelected); return this; } protected HistoryBrowserModel.NodeListTableModel getNodeListTableModel(JTable table) { return (HistoryBrowserModel.NodeListTableModel) table.getModel(); } }