source: josm/trunk/src/org/openstreetmap/josm/gui/history/VersionTableCellRenderer.java@ 2448

Last change on this file since 2448 was 2448, checked in by Gubaer, 14 years ago

fixed #3352: History doesn't get invalidated on upload?
fixed #3912: Extend history dialog to contain the currently modified version
new: zoom to node in list of nodes in history dialog (popup menu)
new: load history of node from node list in history dialog (popup menu or double click)
fixed: close all history dialogs when the number of layers drop to 0
fixed: implemented equals() and hashCode() on SimplePrimitiveId
fixed: history features now usePrimitiveId instead of long.

File size: 5.4 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.text.SimpleDateFormat;
9import java.util.HashMap;
10import java.util.logging.Logger;
11
12import javax.swing.ImageIcon;
13import javax.swing.JLabel;
14import javax.swing.JTable;
15import javax.swing.table.TableCellRenderer;
16
17import org.openstreetmap.josm.Main;
18import org.openstreetmap.josm.data.osm.OsmPrimitive;
19import org.openstreetmap.josm.data.osm.OsmPrimitiveType;
20import org.openstreetmap.josm.data.osm.history.HistoryOsmPrimitive;
21import org.openstreetmap.josm.gui.layer.OsmDataLayer;
22import org.openstreetmap.josm.tools.ImageProvider;
23
24/**
25 * The {@see TableCellRenderer} for a list of versions in {@see HistoryBrower}
26 *
27 */
28public class VersionTableCellRenderer extends JLabel implements TableCellRenderer {
29
30 static private Logger logger = Logger.getLogger(VersionTableCellRenderer.class.getName());
31
32 public final static Color BGCOLOR_SELECTED = new Color(143,170,255);
33 public final static Color BGCOLOR_IS_REFERENCE_POINT = new Color(255,197,197);
34
35 protected HashMap<OsmPrimitiveType, ImageIcon> icons = null;
36
37 public VersionTableCellRenderer() {
38 loadIcons();
39 setOpaque(true);
40 }
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 protected void renderIcon(OsmPrimitiveType type) {
50 ImageIcon icon = type == null? null : icons.get(type);
51 setIcon(icon);
52 }
53
54 protected void renderText(HistoryOsmPrimitive primitive) {
55 // render label text
56 //
57 StringBuilder sb = new StringBuilder();
58 if (primitive == null) {
59 sb.append("");
60 } else {
61 String msg = tr(
62 "Version {0}, {1} (by {2})",
63 Long.toString(primitive.getVersion()),
64 new SimpleDateFormat().format(primitive.getTimestamp()),
65 primitive.getUser()
66 );
67 sb.append(msg);
68 }
69 setText(sb.toString());
70
71 // render tooltip text
72 //
73 sb = new StringBuilder();
74 if (primitive == null) {
75 sb.append("");
76 } else {
77 sb.append(
78 tr("Version {0} created on {1} by {2}",
79 Long.toString(primitive.getVersion()),
80 new SimpleDateFormat().format(primitive.getTimestamp()),
81 primitive.getUser()
82 )
83 );
84 }
85 setToolTipText(sb.toString());
86 }
87
88 protected OsmDataLayer getEditLayer() {
89 try {
90 return Main.map.mapView.getEditLayer();
91 } catch(NullPointerException e) {
92 return null;
93 }
94 }
95
96 protected void renderLatestText(OsmPrimitive primitive) {
97 // -- label text
98 StringBuffer sb = new StringBuffer();
99 if (primitive == null) {
100 setText("");
101 return;
102 }
103 if (primitive.isModified()) {
104 sb.append("*");
105 }
106 sb.append(tr("Version {0} in editor", primitive.getVersion()));
107 if (primitive.isDeleted()) {
108 sb.append(tr("[deleted]"));
109 }
110 setText(sb.toString());
111
112 // -- tooltip text
113 sb = new StringBuffer();
114 OsmDataLayer l = getEditLayer();
115
116 sb.append(
117 tr(
118 "Version {0} currently edited in data layer ''{1}''",
119 primitive.getId(),
120 l == null ? tr("unknown") : l.getName()
121 )
122 );
123 setToolTipText(sb.toString());
124 }
125
126 protected void renderBackground(JTable table, int row, boolean isSelected) {
127 Color bgColor = Color.WHITE;
128 if (isSelected) {
129 bgColor = BGCOLOR_SELECTED;
130 } else if (getModel(table).isReferencePointInTime(row)) {
131 bgColor = BGCOLOR_IS_REFERENCE_POINT;
132 }
133 setBackground(bgColor);
134 }
135
136 public void renderVersionFromHistory(HistoryOsmPrimitive primitive, JTable table, int row, boolean isSelected) {
137 renderIcon(primitive.getType());
138 renderText(primitive);
139 renderBackground(table, row, isSelected);
140 }
141
142 public void renderLatest(OsmPrimitive primitive, JTable table, int row, boolean isSelected) {
143 renderIcon(primitive.getType());
144 renderLatestText(getModel(table).getLatest());
145 renderBackground(table, row, isSelected);
146 }
147
148 public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus,
149 int row, int column) {
150 if (getModel(table).isLatest(row)) {
151 renderLatest(getModel(table).getLatest(),table, row, isSelected);
152 } else {
153 renderVersionFromHistory((HistoryOsmPrimitive)value, table, row, isSelected);
154 }
155 return this;
156 }
157
158 protected HistoryBrowserModel.VersionTableModel getModel(JTable table) {
159 return (HistoryBrowserModel.VersionTableModel)table.getModel();
160 }
161}
Note: See TracBrowser for help on using the repository browser.