source: josm/trunk/src/org/openstreetmap/josm/gui/history/HistoryBrowser.java@ 4408

Last change on this file since 4408 was 4406, checked in by simon04, 13 years ago

fix #6776 - sensible pre-selection of versions in history dialog

  • Property svn:eol-style set to native
File size: 4.7 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.BorderLayout;
7import java.awt.Dimension;
8
9import javax.swing.JPanel;
10import javax.swing.JScrollPane;
11import javax.swing.JSplitPane;
12import javax.swing.JTabbedPane;
13import javax.swing.JTable;
14
15import org.openstreetmap.josm.data.osm.OsmPrimitiveType;
16import org.openstreetmap.josm.data.osm.history.History;
17
18/**
19 * HistoryBrowser is an UI component which displays history information about an {@see OsmPrimitive}.
20 *
21 *
22 */
23public class HistoryBrowser extends JPanel {
24
25 /** the model */
26 private HistoryBrowserModel model;
27 private TagInfoViewer tagInfoViewer;
28 private NodeListViewer nodeListViewer;
29 private RelationMemberListViewer relationMemberListViewer;
30 private CoordinateInfoViewer coordinateInfoViewer;
31 private JTabbedPane tpViewers;
32 private VersionTable versionTable;
33
34 /**
35 * embedds table in a {@see JScrollPane}
36 *
37 * @param table the table
38 * @return the {@see JScrollPane} with the embedded table
39 */
40 protected JScrollPane embeddInScrollPane(JTable table) {
41 JScrollPane pane = new JScrollPane(table);
42 pane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
43 pane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
44 return pane;
45 }
46
47 /**
48 * creates the table which shows the list of versions
49 *
50 * @return the panel with the version table
51 */
52 protected JPanel createVersionTablePanel() {
53 JPanel pnl = new JPanel();
54 pnl.setLayout(new BorderLayout());
55
56 versionTable = new VersionTable(model);
57 pnl.add(embeddInScrollPane(versionTable), BorderLayout.CENTER);
58 return pnl;
59 }
60
61 /**
62 * creates the panel which shows information about two different versions
63 * of the same {@see OsmPrimitive}.
64 *
65 * @return the panel
66 */
67 protected JPanel createVersionComparePanel() {
68 tpViewers = new JTabbedPane();
69
70 // create the viewers, but don't add them yet.
71 // see populate()
72 //
73 tagInfoViewer = new TagInfoViewer(model);
74 nodeListViewer = new NodeListViewer(model);
75 relationMemberListViewer = new RelationMemberListViewer(model);
76 coordinateInfoViewer = new CoordinateInfoViewer(model);
77 JPanel pnl = new JPanel();
78 pnl.setLayout(new BorderLayout());
79 pnl.add(tpViewers, BorderLayout.CENTER);
80 return pnl;
81 }
82
83 /**
84 * builds the GUI
85 */
86 protected void build() {
87 JPanel left;
88 JPanel right;
89 setLayout(new BorderLayout());
90 JSplitPane pane = new JSplitPane(
91 JSplitPane.HORIZONTAL_SPLIT,
92 left = createVersionTablePanel(),
93 right = createVersionComparePanel()
94 );
95 add(pane, BorderLayout.CENTER);
96
97 pane.setOneTouchExpandable(true);
98 pane.setDividerLocation(200);
99
100 Dimension minimumSize = new Dimension(100, 50);
101 left.setMinimumSize(minimumSize);
102 right.setMinimumSize(minimumSize);
103 }
104
105 /**
106 * constructor
107 */
108 public HistoryBrowser() {
109 model = new HistoryBrowserModel();
110 build();
111 }
112
113 /**
114 * constructor
115 * @param history the history of an {@see OsmPrimitive}
116 */
117 public HistoryBrowser(History history) {
118 this();
119 populate(history);
120 }
121
122 /**
123 * populates the browser with the history of a specific {@see OsmPrimitive}
124 *
125 * @param history the history
126 */
127 public void populate(History history) {
128 model.setHistory(history);
129 versionTable.updateSelection();
130
131 tpViewers.removeAll();
132
133 tpViewers.add(tagInfoViewer);
134 tpViewers.setTitleAt(0, tr("Tags"));
135
136 if (history.getEarliest().getType().equals(OsmPrimitiveType.NODE)) {
137 tpViewers.add(coordinateInfoViewer);
138 tpViewers.setTitleAt(1, tr("Coordinates"));
139 } else if (history.getEarliest().getType().equals(OsmPrimitiveType.WAY)) {
140 tpViewers.add(nodeListViewer);
141 tpViewers.setTitleAt(1, tr("Nodes"));
142 } else if (history.getEarliest().getType().equals(OsmPrimitiveType.RELATION)) {
143 tpViewers.add(relationMemberListViewer);
144 tpViewers.setTitleAt(1, tr("Members"));
145 }
146 revalidate();
147 }
148
149 /**
150 * replies the {@see History} currently displayed by this browser
151 *
152 * @return the current history
153 */
154 public History getHistory() {
155 return model.getHistory();
156 }
157
158 /**
159 * replies the model used by this browser
160 * @return the model
161 */
162 public HistoryBrowserModel getModel() {
163 return model;
164 }
165}
Note: See TracBrowser for help on using the repository browser.