source: josm/trunk/src/org/openstreetmap/josm/gui/history/HistoryBrowserDialog.java@ 3128

Last change on this file since 3128 was 3083, checked in by bastiK, 14 years ago

added svn:eol-style=native to source files

  • Property svn:eol-style set to native
File size: 5.3 KB
Line 
1// License: GPL. For details, see LICENSE file.
2package org.openstreetmap.josm.gui.history;
3
4import static org.openstreetmap.josm.gui.help.HelpUtil.ht;
5import static org.openstreetmap.josm.tools.I18n.marktr;
6import static org.openstreetmap.josm.tools.I18n.tr;
7
8import java.awt.BorderLayout;
9import java.awt.FlowLayout;
10import java.awt.event.ActionEvent;
11import java.awt.event.WindowAdapter;
12import java.awt.event.WindowEvent;
13
14import javax.swing.AbstractAction;
15import javax.swing.JDialog;
16import javax.swing.JOptionPane;
17import javax.swing.JPanel;
18
19import org.openstreetmap.josm.Main;
20import org.openstreetmap.josm.data.osm.PrimitiveId;
21import org.openstreetmap.josm.data.osm.history.History;
22import org.openstreetmap.josm.data.osm.history.HistoryDataSet;
23import org.openstreetmap.josm.data.osm.history.HistoryDataSetListener;
24import org.openstreetmap.josm.gui.SideButton;
25import org.openstreetmap.josm.gui.help.ContextSensitiveHelpAction;
26import org.openstreetmap.josm.gui.help.HelpUtil;
27import org.openstreetmap.josm.tools.ImageProvider;
28
29/**
30 * This is non-modal dialog, always showing on top, which displays history information
31 * about a given {@see OsmPrimitive}.
32 *
33 */
34public class HistoryBrowserDialog extends JDialog implements HistoryDataSetListener{
35
36 /** the embedded browser */
37 private HistoryBrowser browser;
38 private CloseAction closeAction;
39
40 /**
41 * displays the title for this dialog
42 *
43 * @param h the current history
44 */
45 protected void renderTitle(History h) {
46 String title = "";
47 switch(h.getEarliest().getType()) {
48 case NODE: title = marktr("History for node {0}"); break;
49 case WAY: title = marktr("History for way {0}"); break;
50 case RELATION: title = marktr("History for relation {0}"); break;
51 }
52 setTitle(tr(
53 title,
54 Long.toString(h.getId())
55 ));
56 }
57
58 /**
59 * builds the GUI
60 *
61 */
62 protected void build() {
63 setLayout(new BorderLayout());
64 browser = new HistoryBrowser();
65 add(browser, BorderLayout.CENTER);
66
67 JPanel pnl = new JPanel();
68 pnl.setLayout(new FlowLayout(FlowLayout.CENTER));
69
70 SideButton btn = new SideButton(new ReloadAction());
71 btn.setName("btn.reload");
72 pnl.add(btn);
73
74 btn = new SideButton(closeAction = new CloseAction());
75 btn.setName("btn.close");
76 pnl.add(btn);
77
78 btn = new SideButton(new ContextSensitiveHelpAction(ht("/Dialog/History")));
79 btn.setName("btn.help");
80 pnl.add(btn);
81 add(pnl, BorderLayout.SOUTH);
82
83 HelpUtil.setHelpContext(getRootPane(), ht("/Dialog/History"));
84
85 setSize(800, 500);
86 }
87
88 /**
89 * constructor
90 *
91 * @param history the history to be displayed
92 */
93 public HistoryBrowserDialog(History history) {
94 super(JOptionPane.getFrameForComponent(Main.parent), false);
95 build();
96 setHistory(history);
97 renderTitle(history);
98 HistoryDataSet.getInstance().addHistoryDataSetListener(this);
99 addWindowListener(new WindowClosingAdapter());
100 }
101
102 /**
103 * sets the current history
104 * @param history
105 */
106 protected void setHistory(History history) {
107 browser.populate(history);
108 }
109
110 public void unlinkAsListener() {
111 getHistoryBrowser().getModel().unlinkAsListener();
112 }
113
114 /* ---------------------------------------------------------------------------------- */
115 /* interface HistoryDataSetListener */
116 /* ---------------------------------------------------------------------------------- */
117 public void historyUpdated(HistoryDataSet source, PrimitiveId primitiveId) {
118 if (primitiveId == null || primitiveId.equals(browser.getHistory().getPrimitmiveId())) {
119 browser.populate(source.getHistory(browser.getHistory().getPrimitmiveId()));
120 }
121 }
122
123 public void historyDataSetCleared(HistoryDataSet source) {
124 closeAction.run();
125 }
126
127
128 class CloseAction extends AbstractAction {
129 public CloseAction() {
130 putValue(NAME, tr("Close"));
131 putValue(SHORT_DESCRIPTION, tr("Close the dialog"));
132 putValue(SMALL_ICON, ImageProvider.get("ok"));
133 }
134
135 public void run() {
136 getHistoryBrowser().getModel().unlinkAsListener();
137 HistoryDataSet.getInstance().removeHistoryDataSetListener(HistoryBrowserDialog.this);
138 HistoryBrowserDialogManager.getInstance().hide(HistoryBrowserDialog.this);
139 }
140
141 public void actionPerformed(ActionEvent e) {
142 run();
143 }
144 }
145
146 class ReloadAction extends AbstractAction {
147 public ReloadAction() {
148 putValue(NAME, tr("Reload"));
149 putValue(SHORT_DESCRIPTION, tr("Reload the history from the server"));
150 putValue(SMALL_ICON, ImageProvider.get("dialogs", "refresh"));
151 }
152
153 public void actionPerformed(ActionEvent e) {
154 HistoryLoadTask task = new HistoryLoadTask();
155 task.add(browser.getHistory());
156 Main.worker.submit(task);
157 }
158 }
159
160 class WindowClosingAdapter extends WindowAdapter {
161 @Override
162 public void windowClosing(WindowEvent e) {
163 closeAction.run();
164 }
165 }
166
167 public HistoryBrowser getHistoryBrowser() {
168 return browser;
169 }
170}
Note: See TracBrowser for help on using the repository browser.