source: josm/trunk/src/org/openstreetmap/josm/actions/mapmode/MapMode.java@ 5960

Last change on this file since 5960 was 5960, checked in by Don-vip, 11 years ago

see #8710 - Inconsistent MapMode focus behaviour: fix core mapmodes

  • Property svn:eol-style set to native
File size: 3.8 KB
Line 
1// License: GPL. See LICENSE file for details.
2package org.openstreetmap.josm.actions.mapmode;
3
4import java.awt.Cursor;
5import java.awt.event.ActionEvent;
6import java.awt.event.InputEvent;
7import java.awt.event.MouseEvent;
8import java.awt.event.MouseListener;
9import java.awt.event.MouseMotionListener;
10
11import org.openstreetmap.josm.Main;
12import org.openstreetmap.josm.actions.JosmAction;
13import org.openstreetmap.josm.gui.MapFrame;
14import org.openstreetmap.josm.gui.layer.Layer;
15import org.openstreetmap.josm.tools.ImageProvider;
16import org.openstreetmap.josm.tools.Shortcut;
17
18/**
19 * A class implementing MapMode is able to be selected as an mode for map editing.
20 * As example scrolling the map is a MapMode, connecting Nodes to new Ways
21 * is another.
22 *
23 * MapModes should register/deregister all necessary listeners on the map's view
24 * control.
25 */
26abstract public class MapMode extends JosmAction implements MouseListener, MouseMotionListener {
27 protected final Cursor cursor;
28 protected boolean ctrl;
29 protected boolean alt;
30 protected boolean shift;
31
32 /**
33 * Constructor for mapmodes without an menu
34 */
35 public MapMode(String name, String iconName, String tooltip, Shortcut shortcut, MapFrame mapFrame, Cursor cursor) {
36 super(name, "mapmode/"+iconName, tooltip, shortcut, false);
37 this.cursor = cursor;
38 putValue("active", false);
39 }
40
41 /**
42 * Constructor for mapmodes with an menu (no shortcut will be registered)
43 */
44 public MapMode(String name, String iconName, String tooltip, MapFrame mapFrame, Cursor cursor) {
45 putValue(NAME, name);
46 putValue(SMALL_ICON, ImageProvider.get("mapmode", iconName));
47 putValue(SHORT_DESCRIPTION, tooltip);
48 this.cursor = cursor;
49 }
50
51 /**
52 * Makes this map mode active.
53 */
54 public void enterMode() {
55 putValue("active", true);
56 Main.map.mapView.setNewCursor(cursor, this);
57 updateStatusLine();
58 }
59
60 /**
61 * Makes this map mode inactive.
62 */
63 public void exitMode() {
64 putValue("active", false);
65 Main.map.mapView.resetCursor(this);
66 }
67
68 protected void updateStatusLine() {
69 Main.map.statusLine.setHelpText(getModeHelpText());
70 Main.map.statusLine.repaint();
71 }
72
73 public String getModeHelpText() {
74 return "";
75 }
76 /**
77 * Call selectMapMode(this) on the parent mapFrame.
78 */
79 public void actionPerformed(ActionEvent e) {
80 if (Main.isDisplayingMapView()) {
81 Main.map.selectMapMode(this);
82 }
83 }
84
85 // By default, all tools will work with all layers. Can be overwritten to require
86 // a special type of layer
87 public boolean layerIsSupported(Layer l) {
88 return true;
89 }
90
91 protected void updateKeyModifiers(InputEvent e) {
92 updateKeyModifiers(e.getModifiers());
93 }
94
95 protected void updateKeyModifiers(MouseEvent e) {
96 updateKeyModifiers(e.getModifiers());
97 }
98
99 protected void updateKeyModifiers(int modifiers) {
100 ctrl = (modifiers & ActionEvent.CTRL_MASK) != 0;
101 alt = (modifiers & (ActionEvent.ALT_MASK|InputEvent.ALT_GRAPH_MASK)) != 0;
102 shift = (modifiers & ActionEvent.SHIFT_MASK) != 0;
103 }
104
105 protected void requestFocusInMapView() {
106 if (isEnabled()) {
107 // request focus in order to enable the expected keyboard shortcuts (see #8710)
108 Main.map.mapView.requestFocus();
109 }
110 }
111
112 public void mouseReleased(MouseEvent e) {requestFocusInMapView();}
113 public void mouseExited(MouseEvent e) {}
114 public void mousePressed(MouseEvent e) {requestFocusInMapView();}
115 public void mouseClicked(MouseEvent e) {}
116 public void mouseEntered(MouseEvent e) {}
117 public void mouseMoved(MouseEvent e) {}
118 public void mouseDragged(MouseEvent e) {}
119}
Note: See TracBrowser for help on using the repository browser.