source: subversion/applications/editors/josm/plugins/OsmInspectorPlugin/src/org/openstreetmap/josm/plugins/osminspector/gui/OsmInspectorDialog.java

Last change on this file was 33793, checked in by donvip, 18 months ago

update to JOSM 12881

File size: 7.6 KB
Line 
1package org.openstreetmap.josm.plugins.osminspector.gui;
2
3import static org.openstreetmap.josm.tools.I18n.tr;
4
5import java.awt.event.ActionEvent;
6import java.awt.event.ActionListener;
7import java.awt.event.KeyEvent;
8import java.util.Arrays;
9
10import javax.swing.AbstractAction;
11import javax.swing.DefaultListModel;
12import javax.swing.JList;
13import javax.swing.JScrollPane;
14import javax.swing.ListSelectionModel;
15import javax.swing.ScrollPaneConstants;
16import javax.swing.event.ListSelectionEvent;
17import javax.swing.event.ListSelectionListener;
18
19import org.openstreetmap.josm.data.coor.LatLon;
20import org.openstreetmap.josm.gui.MainApplication;
21import org.openstreetmap.josm.gui.SideButton;
22import org.openstreetmap.josm.gui.dialogs.ToggleDialog;
23import org.openstreetmap.josm.gui.layer.Layer;
24import org.openstreetmap.josm.gui.layer.LayerManager.LayerAddEvent;
25import org.openstreetmap.josm.gui.layer.LayerManager.LayerChangeListener;
26import org.openstreetmap.josm.gui.layer.LayerManager.LayerOrderChangeEvent;
27import org.openstreetmap.josm.gui.layer.LayerManager.LayerRemoveEvent;
28import org.openstreetmap.josm.gui.layer.MainLayerManager.ActiveLayerChangeEvent;
29import org.openstreetmap.josm.gui.layer.MainLayerManager.ActiveLayerChangeListener;
30import org.openstreetmap.josm.plugins.osminspector.OsmInspectorLayer;
31import org.openstreetmap.josm.plugins.osminspector.OsmInspectorLayer.BugInfo;
32import org.openstreetmap.josm.tools.Shortcut;
33
34import com.vividsolutions.jts.geom.Geometry;
35import com.vividsolutions.jts.geom.Point;
36
37public class OsmInspectorDialog extends ToggleDialog implements LayerChangeListener, ActiveLayerChangeListener {
38
39        private OsmInspectorLayer layer;
40        private JList<String> bugsList;
41        private OsmInspectorNextAction actNext;
42        private OsmInspectorPrevAction actPrev;
43        private DefaultListModel<String> model;
44
45        private OsmInspectorBugInfoDialog bugInfoDialog;
46       
47        public void updateNextPrevAction(OsmInspectorLayer l) {
48                this.actNext.inspectlayer = l;
49                this.actPrev.inspectlayer = l;
50        }
51       
52        /**
53         * Builds the content panel for this dialog
54         */
55        protected void buildContentPanel() {
56                MainApplication.getMap().addToggleDialog(this, true);
57
58                model = new DefaultListModel<>();
59                refreshModel();
60                bugsList = new JList<>(model);
61                bugsList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
62                bugsList.setLayoutOrientation(JList.VERTICAL_WRAP);
63               
64                bugsList.setVisibleRowCount(-1);
65                JScrollPane scroll = new JScrollPane(bugsList,
66                                ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS,
67                                ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
68               
69                bugsList.addListSelectionListener(new ListSelectionListener() {
70                       
71                        @Override
72                        public void valueChanged(ListSelectionEvent e) {
73                                layer.setOsmiIndex(e.getFirstIndex());
74                                BugInfo next = layer.getOsmiIndex().getItemPointedByNext();
75                                layer.setOsmiIndex((e.getFirstIndex() + 1) % layer.getOsmiBugInfo().size());
76                                Geometry geom = next.getGeom();
77                                Point centroid = geom.getCentroid();
78                                LatLon center = new LatLon(centroid.getY(), centroid.getX());
79                                MainApplication.getMap().mapView.zoomTo(center);
80                                layer.selectFeatures(center);
81                                bugInfoDialog.setBugDescription(next);
82                        }
83                });
84               
85                // refreshBugList();
86                // the next action
87                final SideButton nextButton = new SideButton(
88                                actNext = new OsmInspectorNextAction(layer));
89                nextButton.createArrow(new ActionListener() {
90                    @Override
91                        public void actionPerformed(ActionEvent e) {
92                                int index = bugsList.getSelectedIndex();
93                                Geometry geom = layer.getOsmBugGeometry(index);
94                                Point centroid = geom.getCentroid();
95                                LatLon center = new LatLon(centroid.getY(), centroid.getX());
96                                MainApplication.getMap().mapView.zoomTo(center);
97                                layer.selectFeatures(center);
98                        }
99                });
100
101                // the previous button
102                final SideButton prevButton = new SideButton(
103                                actPrev = new OsmInspectorPrevAction(layer));
104                prevButton.createArrow(new ActionListener() {
105            @Override
106                        public void actionPerformed(ActionEvent e) {
107                        }
108                });
109
110                createLayout(scroll, true,
111                                Arrays.asList(new SideButton[] { nextButton, prevButton }));
112                this.add(scroll);
113
114                Shortcut sprev = Shortcut.registerShortcut("osmi:prev", tr("Prev OSMI bug"),
115                                KeyEvent.VK_J, Shortcut.CTRL_SHIFT);
116                MainApplication.registerActionShortcut(actPrev, sprev);
117
118                Shortcut snext = Shortcut.registerShortcut("osmi:next", tr("Next OSMI bug"),
119                                KeyEvent.VK_K, Shortcut.CTRL_SHIFT);
120                MainApplication.registerActionShortcut(actNext, snext);
121        }
122
123        public void refreshModel() {
124                model.clear();
125                for (Object b : layer.getOsmiBugInfo().keySet()) {
126                        if (b instanceof BugInfo) {
127                                model.addElement(b.toString());
128                        }
129                }
130        }
131
132        public OsmInspectorDialog(OsmInspectorLayer layer) {
133
134                super(tr("OSM Inspector Bugs"), "selectionlist",
135                                tr("Open a OSM Inspector selection list window."), Shortcut.registerShortcut("subwindow:osminspector",
136                                                                tr("Toggle: {0}", tr("OSM Inspector Bugs")),
137                                                                KeyEvent.VK_W, Shortcut.ALT_SHIFT), 150, // default height
138                                true // default is "show dialog"
139                );
140                this.layer = layer;
141                buildContentPanel();
142                bugInfoDialog = new OsmInspectorBugInfoDialog(layer);
143                bugInfoDialog.setTitle(tr("Selected Bug Info"));
144        }
145
146        public void updateDialog(OsmInspectorLayer l) {
147                this.layer = l;
148                bugInfoDialog.updateDialog(l);
149                refreshModel();
150                refreshBugList();
151        }
152       
153        @Override
154        public void showNotify() {
155                super.showNotify();
156        }
157
158        @Override
159        public void hideNotify() {
160                if (dialogsPanel != null) {
161                        super.hideNotify();
162                }
163        }
164
165        public class OsmInspectorNextAction extends AbstractAction {
166
167                private OsmInspectorLayer inspectlayer;
168
169                public OsmInspectorNextAction(Layer inspector) {
170                        super("next");
171                        inspectlayer = (OsmInspectorLayer) inspector;
172                }
173
174                @Override
175                public void actionPerformed(ActionEvent e) {
176                        inspectlayer.getOsmiIndex().next();
177                        BugInfo next = inspectlayer.getOsmiIndex().getItemPointedByNext();
178                        Geometry geom = next.getGeom();
179                        Point centroid = geom.getCentroid();
180                        LatLon center = new LatLon(centroid.getY(), centroid.getX());
181                        MainApplication.getMap().mapView.zoomTo(center);
182                        inspectlayer.selectFeatures(center);
183                        bugInfoDialog.setBugDescription(next);
184                        updateSelection(next);
185                }
186        }
187
188        private void updateSelection(BugInfo prev) {
189                int idx = layer.getOsmiIndex().indexOf(prev);
190                if (idx >= 0) {
191                        bugsList.setSelectedIndex(idx);
192                }
193        }
194
195        private class OsmInspectorPrevAction extends AbstractAction {
196
197                private OsmInspectorLayer inspectlayer;
198
199                public OsmInspectorPrevAction(Layer inspector) {
200                        super("prev");
201                        inspectlayer = (OsmInspectorLayer) inspector;
202                }
203
204                @Override
205                public void actionPerformed(ActionEvent e) {
206                        inspectlayer.getOsmiIndex().prev();
207                        BugInfo prev = inspectlayer.getOsmiIndex().getItemPointedByPrev();
208                        Geometry geom = prev.getGeom();
209                        Point centroid = geom.getCentroid();
210                        LatLon center = new LatLon(centroid.getY(), centroid.getX());
211                        MainApplication.getMap().mapView.zoomTo(center);
212                        inspectlayer.selectFeatures(center);
213                        bugInfoDialog.setBugDescription(prev);
214                        updateSelection(prev);
215                }
216        }
217
218        @Override
219        public void activeOrEditLayerChanged(ActiveLayerChangeEvent e) {
220            Layer newLayer = MainApplication.getLayerManager().getActiveLayer();
221                if (newLayer instanceof OsmInspectorLayer) {
222                        this.layer = (OsmInspectorLayer) newLayer;
223                        refreshModel();
224                        refreshBugList();
225                }
226        }
227
228        private void refreshBugList() {
229                bugsList.clearSelection();
230                bugsList = new JList<>(model);
231        }
232
233        @Override
234        public void layerAdded(LayerAddEvent e) {
235                if (layer instanceof OsmInspectorLayer) {
236                        refreshModel();
237                        refreshBugList();
238                }
239        }
240
241        @Override
242        public void layerRemoving(LayerRemoveEvent e) {
243                if (layer instanceof OsmInspectorLayer) {
244                        bugsList.clearSelection();
245                        model.clear();
246                }
247        }
248
249    @Override
250    public void layerOrderChanged(LayerOrderChangeEvent e) {
251    }
252}
Note: See TracBrowser for help on using the repository browser.