source: josm/trunk/src/org/openstreetmap/josm/gui/history/VersionTable.java@ 2044

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

fixed #3383: changeset tags in history dialog

File size: 5.2 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.event.ActionEvent;
7import java.awt.event.MouseAdapter;
8import java.awt.event.MouseEvent;
9import java.util.Observable;
10import java.util.Observer;
11import java.util.logging.Logger;
12
13import javax.swing.DefaultListSelectionModel;
14import javax.swing.JPopupMenu;
15import javax.swing.JTable;
16import javax.swing.ListSelectionModel;
17import javax.swing.event.ListSelectionEvent;
18import javax.swing.event.ListSelectionListener;
19
20import org.openstreetmap.josm.actions.AbstractInfoAction;
21import org.openstreetmap.josm.data.osm.history.HistoryOsmPrimitive;
22import org.openstreetmap.josm.tools.ImageProvider;
23
24/**
25 * VersionTable shows a list of version in a {@see History} of an {@see OsmPrimitive}.
26 *
27 *
28 */
29public class VersionTable extends JTable implements Observer{
30
31 private static Logger logger = Logger.getLogger(VersionTable.class.getName());
32 private VersionTablePopupMenu popupMenu;
33
34 protected void build() {
35 setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
36 addMouseListener(new MouseHandler());
37 getSelectionModel().addListSelectionListener(new SelectionHandler());
38 popupMenu = new VersionTablePopupMenu();
39 addMouseListener(new PopupMenuTrigger());
40 }
41
42 public VersionTable(HistoryBrowserModel model) {
43 super(model.getVersionTableModel(), new VersionTableColumnModel());
44 model.addObserver(this);
45 build();
46 }
47
48 protected void handleSelectReferencePointInTime(int row) {
49 getVersionTableModel().setReferencePointInTime(row);
50 }
51
52 protected void handleSelectCurrentPointInTime(int row) {
53 getVersionTableModel().setCurrentPointInTime(row);
54 }
55
56 protected HistoryBrowserModel.VersionTableModel getVersionTableModel() {
57 return (HistoryBrowserModel.VersionTableModel) getModel();
58 }
59
60 class MouseHandler extends MouseAdapter {
61 protected void handleDoubleClick(MouseEvent e) {
62 int row = rowAtPoint(e.getPoint());
63 handleSelectReferencePointInTime(row);
64 }
65
66 @Override
67 public void mouseClicked(MouseEvent e) {
68 switch(e.getClickCount()) {
69 case 2: handleDoubleClick(e); break;
70 }
71 }
72 }
73
74 class SelectionHandler implements ListSelectionListener {
75 public void valueChanged(ListSelectionEvent e) {
76 DefaultListSelectionModel model = (DefaultListSelectionModel)e.getSource();
77 if (model.getMinSelectionIndex() >= 0) {
78 handleSelectCurrentPointInTime(model.getMinSelectionIndex());
79 }
80 }
81 }
82
83 public void update(Observable o, Object arg) {
84 repaint();
85 }
86
87 protected void showPopupMenu(MouseEvent evt) {
88 HistoryBrowserModel.VersionTableModel model = getVersionTableModel();
89 int row = getSelectedRow();
90 if (row == -1) {
91 row = rowAtPoint(evt.getPoint());
92 }
93 HistoryOsmPrimitive primitive = model.getPrimitive(row);
94 popupMenu.prepare(primitive);
95 popupMenu.show(evt.getComponent(), evt.getX(), evt.getY());
96 }
97
98 class PopupMenuTrigger extends MouseAdapter {
99 @Override
100 public void mousePressed(MouseEvent e) {
101 showPopup(e);
102 }
103 @Override
104 public void mouseReleased(MouseEvent e) {
105 showPopup(e);
106 }
107 private void showPopup(MouseEvent e) {
108 if (e.isPopupTrigger()) {
109 showPopupMenu(e);
110 }
111 }
112 }
113
114 class ChangesetInfoAction extends AbstractInfoAction {
115 private HistoryOsmPrimitive primitive;
116
117 public ChangesetInfoAction() {
118 putValue(NAME, tr("Changeset info"));
119 putValue(SHORT_DESCRIPTION, tr("Launch browser with information about the changeset"));
120 putValue(SMALL_ICON, ImageProvider.get("about"));
121 }
122
123 @Override
124 protected String createInfoUrl(Object infoObject) {
125 HistoryOsmPrimitive primitive = (HistoryOsmPrimitive) infoObject;
126 return getBaseBrowseUrl() + "/changeset/" + primitive.getChangesetId();
127 }
128
129 @Override
130 public void actionPerformed(ActionEvent e) {
131 if (!isEnabled())
132 return;
133 String url = createInfoUrl(primitive);
134 launchBrowser(url);
135 }
136
137 public void prepare(HistoryOsmPrimitive primitive) {
138 putValue(NAME, tr("Show changeset {0}", primitive.getChangesetId()));
139 this.primitive = primitive;
140 }
141 }
142
143 class VersionTablePopupMenu extends JPopupMenu {
144
145 private ChangesetInfoAction changesetInfoAction;
146
147 protected void build() {
148 changesetInfoAction = new ChangesetInfoAction();
149 add(changesetInfoAction);
150 }
151 public VersionTablePopupMenu() {
152 super();
153 build();
154 }
155
156 public void prepare(HistoryOsmPrimitive primitive) {
157 changesetInfoAction.prepare(primitive);
158 invalidate();
159 }
160 }
161}
Note: See TracBrowser for help on using the repository browser.