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

Last change on this file since 7005 was 6743, checked in by simon04, 10 years ago

see #7326 - History dialog: move user id to toolbar, remember size/position

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