source: josm/trunk/src/org/openstreetmap/josm/gui/dialogs/relation/SelectionTableCellRenderer.java@ 1990

Last change on this file since 1990 was 1990, checked in by Gubaer, 15 years ago

fixed #3261: Use the "name:$CURRENT_LOCALE" name in the JOSM UI instead of "name" when it exists
new: new checkbox in LAF preferences for enabling/disabling localized names for primitives

File size: 4.4 KB
Line 
1// License: GPL. For details, see LICENSE file.
2package org.openstreetmap.josm.gui.dialogs.relation;
3
4import java.awt.Color;
5import java.awt.Component;
6import java.util.ArrayList;
7import java.util.Collections;
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.OsmPrimitive;
16import org.openstreetmap.josm.data.osm.OsmPrimitiveType;
17import org.openstreetmap.josm.gui.DefaultNameFormatter;
18import org.openstreetmap.josm.tools.ImageProvider;
19
20/**
21 * This is the {@see TableCellRenderer} used in the tables of {@see RelationMemberMerger}.
22 *
23 */
24public class SelectionTableCellRenderer extends JLabel implements TableCellRenderer {
25 public final static Color BGCOLOR_SELECTED = new Color(143,170,255);
26 public final static Color BGCOLOR_DOUBLE_ENTRY = new Color(255,234,213);
27
28
29 private HashMap<OsmPrimitiveType, ImageIcon> icons;
30 /**
31 * reference to the member table model; required, in order to check whether a
32 * selected primitive is already used in the member list of the currently edited
33 * relation
34 */
35 private MemberTableModel model;
36
37 /**
38 * Load the image icon for an OSM primitive of type node
39 *
40 * @return the icon; null, if not found
41 */
42 protected void loadIcons() {
43 icons = new HashMap<OsmPrimitiveType, ImageIcon>();
44 icons.put(OsmPrimitiveType.NODE,ImageProvider.get("data", "node"));
45 icons.put(OsmPrimitiveType.WAY, ImageProvider.get("data", "way"));
46 icons.put(OsmPrimitiveType.RELATION, ImageProvider.get("data", "relation"));
47 }
48
49 /**
50 * constructor
51 */
52 public SelectionTableCellRenderer() {
53 setIcon(null);
54 setOpaque(true);
55 loadIcons();
56 }
57
58 public String buildToolTipText(OsmPrimitive primitive) {
59 StringBuilder sb = new StringBuilder();
60 sb.append("<html>");
61 sb.append("<strong>id</strong>=")
62 .append(primitive.id)
63 .append("<br>");
64 ArrayList<String> keyList = new ArrayList<String>(primitive.keySet());
65 Collections.sort(keyList);
66 for (int i = 0; i < keyList.size(); i++) {
67 if (i > 0) {
68 sb.append("<br>");
69 }
70 String key = keyList.get(i);
71 sb.append("<strong>")
72 .append(key)
73 .append("</strong>")
74 .append("=");
75 String value = primitive.get(key);
76 while(value.length() != 0) {
77 sb.append(value.substring(0,Math.min(50, value.length())));
78 if (value.length() > 50) {
79 sb.append("<br>");
80 value = value.substring(50);
81 } else {
82 value = "";
83 }
84 }
85 }
86 sb.append("</html>");
87 return sb.toString();
88 }
89
90 /**
91 * reset the renderer
92 */
93 protected void reset() {
94 setBackground(Color.WHITE);
95 setForeground(Color.BLACK);
96 setBorder(null);
97 setIcon(null);
98 setToolTipText(null);
99 }
100
101 protected void renderBackground(OsmPrimitive primitive, boolean isSelected) {
102 Color bgc = Color.WHITE;
103 if (isSelected) {
104 bgc = BGCOLOR_SELECTED;
105 } else if (primitive != null && model != null && model.getNumMembersWithPrimitive(primitive) > 0) {
106 bgc = BGCOLOR_DOUBLE_ENTRY;
107 }
108 setBackground(bgc);
109 }
110
111 protected void renderForeground(boolean isSelected) {
112 Color fgc = Color.BLACK;
113 setForeground(fgc);
114 }
115
116 protected void renderPrimitive(OsmPrimitive primitive) {
117 setIcon(icons.get(OsmPrimitiveType.from(primitive)));
118 setText(primitive.getDisplayName(DefaultNameFormatter.getInstance()));
119 setToolTipText(buildToolTipText(primitive));
120 }
121
122 public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus,
123 int row, int column) {
124
125 reset();
126 renderForeground(isSelected);
127 renderBackground((OsmPrimitive)value, isSelected);
128 renderPrimitive((OsmPrimitive)value);
129 return this;
130 }
131
132 public void setMemberTableModel(MemberTableModel model) {
133 this.model = model;
134 }
135}
Note: See TracBrowser for help on using the repository browser.