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

Last change on this file since 10212 was 10021, checked in by bastiK, 8 years ago

see #6301 - fix issues detected by the test

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