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

Last change on this file since 8470 was 8388, checked in by Don-vip, 9 years ago

performance - use of EnumMap / EnumSet

  • Property svn:eol-style set to native
File size: 3.6 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.EnumMap;
9import java.util.Map;
10
11import javax.swing.ImageIcon;
12import javax.swing.JLabel;
13import javax.swing.JTable;
14import javax.swing.table.TableCellRenderer;
15
16import org.openstreetmap.josm.data.osm.OsmPrimitiveType;
17import org.openstreetmap.josm.data.osm.RelationMemberData;
18import org.openstreetmap.josm.gui.history.TwoColumnDiff.Item;
19import org.openstreetmap.josm.tools.ImageProvider;
20
21/**
22 * The {@link TableCellRenderer} for a list of relation members in {@link HistoryBrowser}.
23 * @since 1709
24 */
25public class RelationMemberListTableCellRenderer extends JLabel implements TableCellRenderer {
26
27 public static final Color BGCOLOR_EMPTY_ROW = new Color(234,234,234);
28 public static final Color BGCOLOR_NOT_IN_OPPOSITE = new Color(255,197,197);
29 public static final Color BGCOLOR_IN_OPPOSITE = new Color(255,234,213);
30 public static final Color BGCOLOR_SELECTED = new Color(143,170,255);
31
32 private transient Map<OsmPrimitiveType, ImageIcon> icons;
33
34 /**
35 * Constructs a new {@code RelationMemberListTableCellRenderer}.
36 */
37 public RelationMemberListTableCellRenderer() {
38 setOpaque(true);
39 icons = new EnumMap<>(OsmPrimitiveType.class);
40 icons.put(OsmPrimitiveType.NODE, ImageProvider.get("data", "node"));
41 icons.put(OsmPrimitiveType.WAY, ImageProvider.get("data", "way"));
42 icons.put(OsmPrimitiveType.RELATION, ImageProvider.get("data", "relation"));
43 }
44
45 protected void renderIcon(RelationMemberData member) {
46 if (member == null) {
47 setIcon(null);
48 } else {
49 setIcon(icons.get(member.getMemberType()));
50 }
51 }
52
53 protected void renderRole(Item diffItem, int row, boolean isSelected) {
54 String text = "";
55 Color bgColor = diffItem.state.getColor();
56 RelationMemberData member = (RelationMemberData) diffItem.value;
57 text = member == null?"":member.getRole();
58 setText(text);
59 setToolTipText(text);
60 setBackground(bgColor);
61 }
62
63 protected void renderPrimitive(Item diffItem, int row, boolean isSelected) {
64 String text = "";
65 Color bgColor = diffItem.state.getColor();
66 RelationMemberData member = (RelationMemberData) diffItem.value;
67 text = "";
68 if (member != null) {
69 switch(member.getMemberType()) {
70 case NODE: text = tr("Node {0}", member.getMemberId()); break;
71 case WAY: text = tr("Way {0}", member.getMemberId()); break;
72 case RELATION: text = tr("Relation {0}", member.getMemberId()); break;
73 }
74 }
75 setText(text);
76 setToolTipText(text);
77 setBackground(bgColor);
78 }
79
80 // Warning: The model pads with null-rows to match the size of the opposite table. 'value' could be null
81 @Override
82 public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus,
83 int row, int column) {
84
85 Item member = (TwoColumnDiff.Item)value;
86 renderIcon((RelationMemberData) member.value);
87 switch(column) {
88 case 0:
89 renderRole(member, row, isSelected);
90 break;
91 case 1:
92 renderPrimitive(member, row, isSelected);
93 break;
94 }
95
96 return this;
97 }
98
99 protected DiffTableModel getRelationMemberTableModel(JTable table) {
100 return (DiffTableModel) table.getModel();
101 }
102}
Note: See TracBrowser for help on using the repository browser.