source: josm/trunk/src/org/openstreetmap/josm/gui/history/RelationMemberListTableCellRenderer.java@ 4566

Last change on this file since 4566 was 4566, checked in by stoecker, 12 years ago

fix #6652 - patch by olejorgenb - Members list in history panel for relations and ways is broken

  • Property svn:eol-style set to native
File size: 4.1 KB
Line 
1// License: GPL. For details, see LICENSE file.
2package org.openstreetmap.josm.gui.history;
3
4import static org.openstreetmap.josm.tools.I18n.tr;
5
6import java.awt.Color;
7import java.awt.Component;
8import java.util.HashMap;
9
10import javax.swing.ImageIcon;
11import javax.swing.JLabel;
12import javax.swing.JTable;
13import javax.swing.table.TableCellRenderer;
14
15import org.openstreetmap.josm.data.osm.OsmPrimitiveType;
16import org.openstreetmap.josm.data.osm.history.RelationMember;
17import org.openstreetmap.josm.tools.ImageProvider;
18
19/**
20 * The {@see TableCellRenderer} for a list of relation members in {@see HistoryBrower}
21 *
22 *
23 */
24public class RelationMemberListTableCellRenderer extends JLabel implements TableCellRenderer {
25
26 public final static Color BGCOLOR_EMPTY_ROW = new Color(234,234,234);
27 public final static Color BGCOLOR_NOT_IN_OPPOSITE = new Color(255,197,197);
28 public final static Color BGCOLOR_IN_OPPOSITE = new Color(255,234,213);
29 public final static Color BGCOLOR_SELECTED = new Color(143,170,255);
30
31 private HashMap<OsmPrimitiveType, ImageIcon> icons;
32
33 public RelationMemberListTableCellRenderer(){
34 setOpaque(true);
35 icons = new HashMap<OsmPrimitiveType, ImageIcon>();
36 icons.put(OsmPrimitiveType.NODE, ImageProvider.get("data", "node"));
37 icons.put(OsmPrimitiveType.WAY, ImageProvider.get("data", "way"));
38 icons.put(OsmPrimitiveType.RELATION, ImageProvider.get("data", "relation"));
39 }
40
41 protected void renderIcon(RelationMember member) {
42 if (member == null) {
43 setIcon(null);
44 } else {
45 setIcon(icons.get(member.getPrimitiveType()));
46 }
47 }
48
49 protected void renderRole( HistoryBrowserModel.RelationMemberTableModel model, RelationMember member, int row, boolean isSelected) {
50 String text = "";
51 Color bgColor = Color.WHITE;
52 if (member == null) {
53 bgColor = BGCOLOR_EMPTY_ROW;
54 } else {
55 text = member.getRole();
56 if (model.isSameInOppositeWay(row)) {
57 bgColor = Color.WHITE;
58 } else if (model.isInOppositeWay(row)) {
59 bgColor = BGCOLOR_IN_OPPOSITE;
60 } else {
61 bgColor = BGCOLOR_NOT_IN_OPPOSITE;
62 }
63 }
64 setText(text);
65 setToolTipText(text);
66 setBackground(bgColor);
67 }
68
69 protected void renderPrimitive( HistoryBrowserModel.RelationMemberTableModel model, RelationMember member, int row, boolean isSelected) {
70 String text = "";
71 Color bgColor = Color.WHITE;
72 if (member == null) {
73 bgColor = BGCOLOR_EMPTY_ROW;
74 } else {
75 text = "";
76 switch(member.getPrimitiveType()) {
77 case NODE: text = tr("Node {0}", member.getPrimitiveId()); break;
78 case WAY: text = tr("Way {0}", member.getPrimitiveId()); break;
79 case RELATION: text = tr("Relation {0}", member.getPrimitiveId()); break;
80 }
81 if (model.isSameInOppositeWay(row)) {
82 bgColor = Color.WHITE;
83 } else if (model.isInOppositeWay(row)) {
84 bgColor = BGCOLOR_IN_OPPOSITE;
85 } else {
86 bgColor = BGCOLOR_NOT_IN_OPPOSITE;
87 }
88 }
89 setText(text);
90 setToolTipText(text);
91 setBackground(bgColor);
92 }
93
94 // Warning: The model pads with null-rows to match the size of the opposite table. 'value' could be null
95 public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus,
96 int row, int column) {
97
98 HistoryBrowserModel.RelationMemberTableModel model = gteRelationMemberTableModel(table);
99 RelationMember member = (RelationMember)value;
100 renderIcon(member);
101 switch(column) {
102 case 0:
103 renderRole(model, member, row, isSelected);
104 break;
105 case 1:
106 renderPrimitive(model, member, row, isSelected);
107 break;
108 }
109
110 return this;
111 }
112
113 protected HistoryBrowserModel.RelationMemberTableModel gteRelationMemberTableModel(JTable table) {
114 return (HistoryBrowserModel.RelationMemberTableModel) table.getModel();
115 }
116}
Note: See TracBrowser for help on using the repository browser.