source: subversion/applications/editors/josm/plugins/touchscreenhelper/src/touchscreenhelper/BrowseAction.java

Last change on this file was 33832, checked in by donvip, 17 months ago

update to JOSM 12630

File size: 3.5 KB
Line 
1// License: GPL. For details, see LICENSE file.
2package touchscreenhelper;
3
4import static org.openstreetmap.josm.tools.I18n.tr;
5
6import java.awt.Cursor;
7import java.awt.event.KeyEvent;
8import java.awt.event.MouseEvent;
9import java.awt.event.MouseListener;
10import java.awt.event.MouseMotionListener;
11
12import org.openstreetmap.josm.actions.mapmode.MapMode;
13import org.openstreetmap.josm.data.coor.EastNorth;
14import org.openstreetmap.josm.gui.MainApplication;
15import org.openstreetmap.josm.gui.MapFrame;
16import org.openstreetmap.josm.tools.Shortcut;
17
18public class BrowseAction extends MapMode implements MouseListener,
19    MouseMotionListener, MapFrame.MapModeChangeListener {
20
21    private MapMode oldMapMode;
22    private TimedKeyReleaseListener listener;
23
24    public BrowseAction() {
25        super(tr("Browse"), "browse", tr("Browse map with left button"),
26            Shortcut.registerShortcut("touchscreenhelper:browse", tr("Mode: {0}", tr("Browse map with left button")),
27                KeyEvent.VK_T, Shortcut.DIRECT),
28            Cursor.getPredefinedCursor(Cursor.MOVE_CURSOR));
29        MapFrame.addMapModeChangeListener(this);
30    }
31
32    @Override
33    public void mapModeChange(MapMode oldMapMode, MapMode newMapMode) {
34        this.oldMapMode = oldMapMode;
35    }
36
37    @Override public void enterMode() {
38        super.enterMode();
39        MainApplication.getMap().mapView.addMouseListener(this);
40        MainApplication.getMap().mapView.addMouseMotionListener(this);
41
42        listener = new TimedKeyReleaseListener() {
43            @Override
44            protected void doKeyReleaseEvent(KeyEvent evt) {
45                if (evt.getKeyCode() == getShortcut().getKeyStroke().getKeyCode()) {
46                    if (oldMapMode != null && !(oldMapMode instanceof BrowseAction))
47                    MainApplication.getMap().selectMapMode(oldMapMode);
48                }
49            }
50        };
51    }
52
53    @Override public void exitMode() {
54        super.exitMode();
55
56        MainApplication.getMap().mapView.removeMouseListener(this);
57        MainApplication.getMap().mapView.removeMouseMotionListener(this);
58        listener.stop();
59    }
60
61    @Override
62    public void mouseDragged(MouseEvent e) {
63        if ((e.getModifiersEx() & MouseEvent.BUTTON1_DOWN_MASK) !=
64            MouseEvent.BUTTON1_DOWN_MASK) {
65            endMovement();
66            return;
67        }
68
69        if (mousePosMove == null)
70            startMovement(e);
71        EastNorth center = MainApplication.getMap().mapView.getCenter();
72        EastNorth mouseCenter = MainApplication.getMap().mapView.getEastNorth(e.getX(), e.getY());
73        MainApplication.getMap().mapView.zoomTo(new EastNorth(
74            mousePosMove.east() + center.east() - mouseCenter.east(),
75            mousePosMove.north() + center.north() - mouseCenter.north()));
76    }
77
78    @Override public void mousePressed(MouseEvent e) {
79        if (e.getButton() == MouseEvent.BUTTON1)
80            startMovement(e);
81    }
82
83    @Override public void mouseReleased(MouseEvent e) {
84        if (e.getButton() == MouseEvent.BUTTON1)
85            endMovement();
86    }
87
88    private EastNorth mousePosMove;
89    private boolean movementInPlace = false;
90
91    private void startMovement(MouseEvent e) {
92        if (movementInPlace)
93            return;
94        movementInPlace = true;
95        mousePosMove = MainApplication.getMap().mapView.getEastNorth(e.getX(), e.getY());
96    }
97
98    private void endMovement() {
99        if (!movementInPlace)
100            return;
101        movementInPlace = false;
102        mousePosMove = null;
103    }
104}
Note: See TracBrowser for help on using the repository browser.