// 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 java.util.HashMap;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JTable;
import javax.swing.table.TableCellRenderer;
import org.openstreetmap.josm.data.osm.OsmPrimitiveType;
import org.openstreetmap.josm.data.osm.history.RelationMember;
import org.openstreetmap.josm.tools.ImageProvider;
/**
* The {@see TableCellRenderer} for a list of relation members in {@see HistoryBrower}
*
*
*/
public class RelationMemberListTableCellRenderer 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 HashMap<OsmPrimitiveType, ImageIcon> icons;
public RelationMemberListTableCellRenderer(){
setOpaque(true);
icons = new HashMap<OsmPrimitiveType, ImageIcon>();
icons.put(OsmPrimitiveType.NODE, ImageProvider.get("data", "node"));
icons.put(OsmPrimitiveType.WAY, ImageProvider.get("data", "way"));
icons.put(OsmPrimitiveType.RELATION, ImageProvider.get("data", "relation"));
}
protected void renderIcon(RelationMember member) {
if (member == null) {
setIcon(null);
} else {
setIcon(icons.get(member.getPrimitiveType()));
}
}
protected void renderRole( HistoryBrowserModel.RelationMemberTableModel model, RelationMember member, int row, boolean isSelected) {
String text = "";
Color bgColor = Color.WHITE;
if (member == null) {
bgColor = BGCOLOR_EMPTY_ROW;
} else {
text = member.getRole();
if (model.isSameInOppositeWay(row)) {
bgColor = Color.WHITE;
} else if (model.isInOppositeWay(row)) {
bgColor = BGCOLOR_IN_OPPOSITE;
} else {
bgColor = BGCOLOR_NOT_IN_OPPOSITE;
}
}
setText(text);
setToolTipText(text);
setBackground(bgColor);
}
protected void renderPrimitive( HistoryBrowserModel.RelationMemberTableModel model, RelationMember member, int row, boolean isSelected) {
String text = "";
Color bgColor = Color.WHITE;
if (member == null) {
bgColor = BGCOLOR_EMPTY_ROW;
} else {
text = "";
switch(member.getPrimitiveType()) {
case NODE: text = tr("Node {0}", member.getPrimitiveId()); break;
case WAY: text = tr("Way {0}", member.getPrimitiveId()); break;
case RELATION: text = tr("Relation {0}", member.getPrimitiveId()); break;
}
if (model.isSameInOppositeWay(row)) {
bgColor = Color.WHITE;
} else if (model.isInOppositeWay(row)) {
bgColor = BGCOLOR_IN_OPPOSITE;
} else {
bgColor = BGCOLOR_NOT_IN_OPPOSITE;
}
}
setText(text);
setToolTipText(text);
setBackground(bgColor);
}
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus,
int row, int column) {
HistoryBrowserModel.RelationMemberTableModel model = gteRelationMemberTableModel(table);
RelationMember member = (RelationMember)value;
renderIcon(member);
switch(column) {
case 0:
renderRole(model, member, row, isSelected);
break;
case 1:
renderPrimitive(model, member, row, isSelected);
break;
}
return this;
}
protected HistoryBrowserModel.RelationMemberTableModel gteRelationMemberTableModel(JTable table) {
return (HistoryBrowserModel.RelationMemberTableModel) table.getModel();
}
}