source: subversion/applications/editors/josm/plugins/surveyor/src/org/openstreetmap/josm/plugins/surveyor/SurveyorShowAction.java

Last change on this file was 34591, checked in by donvip, 8 months ago

rename packages, fix warnings

  • Property svn:eol-style set to native
File size: 6.7 KB
Line 
1// License: GPL. For details, see LICENSE file.
2package org.openstreetmap.josm.plugins.surveyor;
3
4import static org.openstreetmap.josm.tools.I18n.tr;
5
6import java.awt.event.ActionEvent;
7import java.awt.event.KeyEvent;
8import java.io.BufferedReader;
9import java.io.IOException;
10import java.io.InputStream;
11import java.io.InputStreamReader;
12import java.nio.charset.StandardCharsets;
13import java.util.ArrayList;
14import java.util.List;
15
16import javax.swing.AbstractAction;
17import javax.swing.ActionMap;
18import javax.swing.InputMap;
19import javax.swing.JFrame;
20import javax.swing.JOptionPane;
21import javax.swing.KeyStroke;
22
23import org.openstreetmap.josm.actions.JosmAction;
24import org.openstreetmap.josm.gui.MainApplication;
25import org.openstreetmap.josm.plugins.surveyor.util.ResourceLoader;
26import org.openstreetmap.josm.spi.preferences.Config;
27import org.openstreetmap.josm.tools.Logging;
28import org.openstreetmap.josm.tools.Shortcut;
29import org.openstreetmap.josm.tools.XmlObjectParser;
30import org.xml.sax.SAXException;
31
32import livegps.LiveGpsPlugin;
33
34/**
35 * @author cdaller
36 *
37 */
38public class SurveyorShowAction extends JosmAction {
39    private static final long serialVersionUID = 2184570223633094734L;
40    private static final String DEFAULT_SOURCE = "resource://resources/surveyor.xml";
41    private JFrame surveyorFrame;
42    private LiveGpsPlugin gpsPlugin;
43
44    public SurveyorShowAction(LiveGpsPlugin gpsPlugin) {
45        super(tr("Surveyor..."), "surveyormenu.png", tr("Open surveyor tool."),
46        Shortcut.registerShortcut("surveyor:open", tr("Tool: {0}", tr("Surveyor...")),
47        KeyEvent.VK_R, Shortcut.CTRL_SHIFT), true);
48        this.gpsPlugin = gpsPlugin;
49    }
50
51    @Override
52    public void actionPerformed(ActionEvent e) {
53        if (surveyorFrame == null) {
54            surveyorFrame = new JFrame();
55
56            SurveyorComponent comp = createComponent();
57
58            // add component as gps event listener:
59            gpsPlugin.addPropertyChangeListener(comp);
60
61            // add some hotkeys to the component:
62            ActionMap actionMap = comp.getActionMap();
63            InputMap inputMap = comp.getInputMap();
64            // zoomout:
65            actionMap.put("zoomout", new AbstractAction() {
66                @Override
67                public void actionPerformed(ActionEvent e) {
68                    if (MainApplication.getMap() != null && MainApplication.getMap().mapView != null) {
69                        MainApplication.getMap().mapView.zoomToFactor(2);
70                    }
71                }
72            });
73            inputMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_PAGE_UP, 0), "zoomout");
74            // zoomin:
75            actionMap.put("zoomin", new AbstractAction() {
76                @Override
77                public void actionPerformed(ActionEvent e) {
78                    if (MainApplication.getMap() != null && MainApplication.getMap().mapView != null) {
79                        MainApplication.getMap().mapView.zoomToFactor(1/2);
80                    }
81                }
82            });
83            inputMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_PAGE_DOWN, 0), "zoomin");
84            // autocenter:
85            actionMap.put("autocenter", new AbstractAction() {
86                @Override
87                public void actionPerformed(ActionEvent e) {
88                    // toggle autocenter
89                    gpsPlugin.setAutoCenter(!gpsPlugin.isAutoCenter());
90                }
91            });
92            inputMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_HOME, 0), "autocenter");
93
94            surveyorFrame.add(comp);
95            surveyorFrame.pack();
96            surveyorFrame.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
97            //surveyorFrame.setTitle((String)getValue(AbstractAction.NAME));
98            surveyorFrame.setTitle(tr("Surveyor"));
99            // <FIXXME date="28.04.2007" author="cdaller">
100            // TODO get old pos of frame from properties
101            // </FIXXME>
102            SurveyorPlugin.setSurveyorFrame(surveyorFrame);
103        }
104        surveyorFrame.setAlwaysOnTop(true);
105        surveyorFrame.setVisible(true);
106
107    }
108
109    public SurveyorComponent createComponent() {
110        String source = Config.getPref().get("surveyor.source");
111        if (source == null || source.length() == 0) {
112            source = DEFAULT_SOURCE;
113            Config.getPref().put("surveyor.source", DEFAULT_SOURCE);
114            // <FIXXME date="04.05.2007" author="cdaller">
115            // TODO copy xml file to .josm directory if it does not exist!
116            // </FIXXME>
117        }
118        try (InputStream in = ResourceLoader.getInputStream(source)) {
119            return createComponent(in);
120        } catch (IOException e) {
121            Logging.error(e);
122            JOptionPane.showMessageDialog(MainApplication.getMainFrame(), tr("Could not read surveyor definition: {0}", source));
123        } catch (SAXException e) {
124            Logging.error(e);
125            JOptionPane.showMessageDialog(MainApplication.getMainFrame(), tr("Error parsing {0}: {1}", source, e.getMessage()));
126        }
127        return null;
128    }
129
130    /**
131     * Parse an xml file containing the definitions for the surveyor component.
132     * @param in the inputstream to read the xml from.
133     * @return the component.
134     * @throws SAXException if the xml could not be read.
135     */
136    public SurveyorComponent createComponent(InputStream in) throws SAXException {
137        XmlObjectParser parser = new XmlObjectParser();
138        parser.mapOnStart("surveyor", SurveyorComponent.class);
139        parser.map("button", ButtonDescription.class);
140        parser.map("action", SurveyorActionDescription.class);
141
142        SurveyorComponent surveyorComponent = null;
143        parser.start(new BufferedReader(new InputStreamReader(in, StandardCharsets.UTF_8)));
144        List<SurveyorActionDescription> actions = new ArrayList<>();
145        while (parser.hasNext()) {
146            Object object = parser.next();
147            if (object instanceof SurveyorComponent) {
148                //System.out.println("SurveyorComponent " + object);
149                surveyorComponent = (SurveyorComponent) object;
150            } else if (object instanceof ButtonDescription) {
151                //System.out.println("ButtonDescription " + object);
152                ((ButtonDescription) object).setActions(actions);
153                surveyorComponent.addButton(((ButtonDescription) object));
154                actions = new ArrayList<>();
155            } else if (object instanceof SurveyorActionDescription) {
156                //System.out.println("SurveyorActionDescription " + object);
157                actions.add((SurveyorActionDescription) object);
158            } else {
159                Logging.error("surveyor: unknown xml element: " + object);
160            }
161        }
162        return surveyorComponent;
163    }
164}
Note: See TracBrowser for help on using the repository browser.