/[schmitzm]/branches/2.0-RC2/src/skrueger/geotools/XMapPaneTool.java
ViewVC logotype

Annotation of /branches/2.0-RC2/src/skrueger/geotools/XMapPaneTool.java

Parent Directory Parent Directory | Revision Log Revision Log


Revision 655 - (hide annotations)
Wed Feb 3 11:47:44 2010 UTC (15 years ago) by alfonx
File MIME type: text/plain
File size: 13159 byte(s)
Moving towards the new XMapPaneTool concept
1 alfonx 653 package skrueger.geotools;
2    
3     import java.awt.Cursor;
4 alfonx 654 import java.awt.event.InputEvent;
5 alfonx 653 import java.awt.event.KeyEvent;
6     import java.util.HashMap;
7     import java.util.Locale;
8     import java.util.Map;
9    
10     import javax.swing.Icon;
11     import javax.swing.ImageIcon;
12     import javax.swing.KeyStroke;
13    
14     import schmitzm.lang.LangUtil;
15     import schmitzm.lang.ResourceProvider;
16     import schmitzm.swing.SwingUtil;
17     import schmitzm.swing.event.MouseInputType;
18    
19     /**
20     * This class combines the mapping of mouse-inputs and keyboard inputs to
21     * {@link XMapPaneAction}s and provides a tool icon and a default mouse cursor.
22     */
23     public class XMapPaneTool {
24    
25 alfonx 655 public Cursor getCursor() {
26     return cursor;
27     }
28    
29     public void setCursor(Cursor cursor) {
30     this.cursor = cursor;
31     }
32    
33     public String getToolTip() {
34     return toolTip;
35     }
36    
37     public void setToolTip(String toolTip) {
38     this.toolTip = toolTip;
39     }
40    
41     public Icon getIcon() {
42     return icon;
43     }
44    
45     public void setIcon(Icon icon) {
46     this.icon = icon;
47     }
48    
49     public XMapPaneAction getMouseAction(MouseInputType type) {
50     return mouseActions.get(type);
51     }
52    
53     public void setMouseAction(MouseInputType type, XMapPaneAction mouseAction) {
54     this.mouseActions.put(type, mouseAction);;
55     }
56    
57     public XMapPaneAction getKeyAction(KeyStroke keyStroke) {
58     return keyAction.get(keyStroke);
59     }
60    
61     public void setKeyAction(KeyStroke keyStroke, XMapPaneAction keyAction) {
62     this.keyAction.put(keyStroke,keyAction);
63     }
64    
65     public Object getKeyActionParam(KeyStroke keyStroke) {
66     return keyActionParams.get(keyStroke);
67     }
68    
69     public void setKeyActionParam(KeyStroke keyStroke, Object param) {
70     this.keyActionParams.put(keyStroke, param);
71     }
72    
73 alfonx 654 public XMapPaneTool() {
74     addDefaultKeyboardAssignments(this);
75     }
76 alfonx 653
77     public static ResourceProvider RESOURCE = new ResourceProvider(LangUtil
78     .extendPackagePath(MapPaneToolBar.class,
79     "resource.locales.mapPaneToolbar"), Locale.ENGLISH);
80    
81     public static String R(String key, Object... values) {
82     return RESOURCE.getString(key, values);
83     }
84    
85     /** The cursor of the mouse if the tool is active **/
86     Cursor cursor = null;
87    
88 alfonx 654 /** A tool-tip for the tool , optional **/
89 alfonx 653 String toolTip = null;
90    
91     /** The icon for the button **/
92     Icon icon = null;
93    
94     /**
95     * Defines which {@link XMapPaneAction} should be should be called when a
96     * {@link MouseInputType} is triggered
97     **/
98     Map<MouseInputType, XMapPaneAction> mouseActions = new HashMap<MouseInputType, XMapPaneAction>();
99    
100     /**
101     * Defines which {@link XMapPaneAction#performKeyboard(XMapPane, Object)}
102     * should be called when a {@link KeyStroke} is triggered
103     **/
104     Map<KeyStroke, XMapPaneAction> keyAction = new HashMap<KeyStroke, XMapPaneAction>();
105    
106     /**
107     * Defines which optional parameter should be passed to
108     * {@link XMapPaneAction#performKeyboard(XMapPane, Object)} if a
109     * {@link KeyStroke} is triggered
110     **/
111     Map<KeyStroke, Object> keyActionParams = new HashMap<KeyStroke, Object>();
112 alfonx 655
113     /** This {@link XMapPaneTool} does nothing **/
114     public static XMapPaneTool NO_ACTION = new XMapPaneTool() ;
115     static {
116     // Remove the keyboard mapping that are defined by the default constructor
117     NO_ACTION.keyAction.clear();
118     NO_ACTION.keyActionParams.clear();
119     }
120    
121 alfonx 653 /** The configuration of the default ZOOM IN {@link XMapPaneTool} **/
122     public static XMapPaneTool ZOOM_IN = new XMapPaneTool();
123     static {
124     ZOOM_IN.icon = new ImageIcon(MapView.class
125     .getResource("resource/icons/zoom_in.png"));
126     ZOOM_IN.toolTip = R("MapPaneButtons.ZoomIn.TT");
127     ZOOM_IN.cursor = SwingUtil.ZOOMIN_CURSOR;
128    
129     // Left mouse click & drag zoom in
130     ZOOM_IN.mouseActions.put(MouseInputType.LClick,
131     XMapPaneAction_Zoom.ZOOM_IN);
132     ZOOM_IN.mouseActions.put(MouseInputType.LDrag,
133     XMapPaneAction_Zoom.ZOOM_IN);
134    
135     // Right mouse click & drag zoom out
136     ZOOM_IN.mouseActions.put(MouseInputType.RClick,
137     XMapPaneAction_Zoom.ZOOM_OUT);
138     ZOOM_IN.mouseActions.put(MouseInputType.RDrag,
139     XMapPaneAction_Zoom.ZOOM_OUT);
140    
141     // Mousewheel can zoom too
142     ZOOM_IN.mouseActions.put(MouseInputType.Wheel,
143     XMapPaneAction_Zoom.ZOOM_IN);
144    
145     }
146    
147     /** The configuration of the default ZOOM IN {@link XMapPaneTool} **/
148     public static XMapPaneTool ZOOM_OUT = new XMapPaneTool();
149     static {
150     ZOOM_OUT.icon = new ImageIcon(MapView.class
151     .getResource("resource/icons/zoom_out.png"));
152     ZOOM_OUT.toolTip = R("MapPaneButtons.ZoomOut.TT");
153     ZOOM_OUT.cursor = SwingUtil.ZOOMOUT_CURSOR;
154    
155     // Left mouse click & drag zoom in
156     ZOOM_OUT.mouseActions.put(MouseInputType.LClick,
157     XMapPaneAction_Zoom.ZOOM_OUT);
158     ZOOM_OUT.mouseActions.put(MouseInputType.LDrag,
159     XMapPaneAction_Zoom.ZOOM_OUT);
160    
161     // Right mouse click & drag zoom out
162     ZOOM_OUT.mouseActions.put(MouseInputType.RClick,
163     XMapPaneAction_Zoom.ZOOM_IN);
164     ZOOM_OUT.mouseActions.put(MouseInputType.RDrag,
165     XMapPaneAction_Zoom.ZOOM_IN);
166    
167     // Mousewheel can zoom
168     ZOOM_OUT.mouseActions.put(MouseInputType.Wheel,
169     XMapPaneAction_Zoom.ZOOM_IN);
170    
171     }
172 alfonx 654
173 alfonx 653 /** The configuration of the PAN {@link XMapPaneTool} **/
174     public static final XMapPaneTool PAN = new XMapPaneTool();
175     static {
176     PAN.icon = new ImageIcon(MapView.class
177     .getResource("resource/icons/pan.png"));
178     PAN.toolTip = R("MapPaneButtons.Pan.TT");
179     PAN.cursor = SwingUtil.PAN_CURSOR;
180    
181     // Left mouse click & drag zoom in
182 alfonx 654 PAN.mouseActions.put(MouseInputType.LClick, XMapPaneAction.PAN);
183     PAN.mouseActions.put(MouseInputType.LDrag, XMapPaneAction.PAN);
184 alfonx 653
185     // Right mouse click & drag zoom out
186 alfonx 654 PAN.mouseActions.put(MouseInputType.RClick, XMapPaneAction.PAN);
187     PAN.mouseActions.put(MouseInputType.RDrag, XMapPaneAction.PAN);
188 alfonx 653
189     // Mousewheel can zoom
190 alfonx 654 PAN.mouseActions.put(MouseInputType.Wheel, XMapPaneAction_Zoom.ZOOM_IN);
191 alfonx 653
192     }
193 alfonx 655
194    
195 alfonx 653
196 alfonx 655 /** A tool that will do a select_top action on the left mouse button **/
197     public static final XMapPaneTool SELECTION_TOP_LAYER = new XMapPaneTool();
198     static {
199     // SELECTION_TOP_LAYER.icon = new ImageIcon(MapView.class
200     // .getResource("resource/icons/selection_add.png"));
201     // SELECTION_TOP_LAYER.toolTip = R("MapPaneButtons.Selection.AddSelection.TT"); // TODO
202     // move
203     // to
204     // schmitzm
205    
206     SELECTION_TOP_LAYER.cursor = SwingUtil.SELECTION_SET_CURSOR;
207    
208     // Left mouse click & drag zoom in
209     SELECTION_TOP_LAYER.mouseActions.put(MouseInputType.LClick,
210     XMapPaneAction.SELECT_TOP);
211     SELECTION_TOP_LAYER.mouseActions.put(MouseInputType.LDrag,
212     XMapPaneAction.SELECT_TOP);
213    
214     SELECTION_TOP_LAYER.mouseActions
215     .put(MouseInputType.RDrag, XMapPaneAction.PAN);
216    
217     // Mousewheel can zoom
218     SELECTION_TOP_LAYER.mouseActions.put(MouseInputType.Wheel,
219     XMapPaneAction_Zoom.ZOOM_IN);
220    
221     // TODO Strg-A shoud select all
222     }
223    
224    
225     /** A tool that will do a select_top action on the left mouse button **/
226     public static final XMapPaneTool SELECTION_ONE_FROM_TOP_LAYER = new XMapPaneTool();
227     static {
228     // SELECTION_ONE_FROM_TOP.icon = new ImageIcon(MapView.class
229     // .getResource("resource/icons/selection_add.png"));
230     // SELECTION_ONE_FROM_TOP.toolTip = R("MapPaneButtons.Selection.AddSelection.TT"); // TODO
231     // move
232     // to
233     // schmitzm
234    
235     SELECTION_ONE_FROM_TOP_LAYER.cursor = SwingUtil.SELECTION_SET_CURSOR;
236    
237     // Left mouse click & drag zoom in
238     SELECTION_ONE_FROM_TOP_LAYER.mouseActions.put(MouseInputType.LClick,
239     XMapPaneAction.SELECT_ONE_FROM_TOP);
240     SELECTION_ONE_FROM_TOP_LAYER.mouseActions.put(MouseInputType.LDrag,
241     XMapPaneAction.SELECT_ONE_FROM_TOP);
242    
243     SELECTION_ONE_FROM_TOP_LAYER.mouseActions
244     .put(MouseInputType.RDrag, XMapPaneAction.PAN);
245    
246     // Mousewheel can zoom
247     SELECTION_ONE_FROM_TOP_LAYER.mouseActions.put(MouseInputType.Wheel,
248     XMapPaneAction_Zoom.ZOOM_IN);
249    
250     // TODO Strg-A shoud select all
251     }
252    
253    
254    
255     /** A tool that will do a select_top action on the left mouse button **/
256     public static final XMapPaneTool SELECTION_ALL_LAYERS = new XMapPaneTool();
257     static {
258     // SELECTION_ALL_LAYERS.icon = new ImageIcon(MapView.class
259     // .getResource("resource/icons/selection_add.png"));
260     // SELECTION_ALL_LAYERS.toolTip = R("MapPaneButtons.Selection.AddSelection.TT"); // TODO
261     // move
262     // to
263     // schmitzm
264    
265     SELECTION_ALL_LAYERS.cursor = SwingUtil.SELECTION_SET_CURSOR;
266    
267     // Left mouse click & drag zoom in
268     SELECTION_ALL_LAYERS.mouseActions.put(MouseInputType.LClick,
269     XMapPaneAction.SELECT_ALL);
270     SELECTION_ALL_LAYERS.mouseActions.put(MouseInputType.LDrag,
271     XMapPaneAction.SELECT_ALL);
272    
273     SELECTION_ALL_LAYERS.mouseActions
274     .put(MouseInputType.RDrag, XMapPaneAction.PAN);
275    
276     // Mousewheel can zoom
277     SELECTION_ALL_LAYERS.mouseActions.put(MouseInputType.Wheel,
278     XMapPaneAction_Zoom.ZOOM_IN);
279    
280     // TODO Strg-A shoud select all
281     }
282    
283    
284 alfonx 653 /** The configuration of the INFO {@link XMapPaneTool} **/
285     public static final XMapPaneTool INFO = new XMapPaneTool();
286 alfonx 654
287 alfonx 653 static {
288     INFO.icon = new ImageIcon(MapView.class
289     .getResource("resource/icons/info.png"));
290     INFO.toolTip = R("MapPaneButtons.Info.TT");
291     INFO.cursor = SwingUtil.INFO_CURSOR;
292    
293     // Left mouse click & drag zoom in
294     INFO.mouseActions.put(MouseInputType.LClick,
295     XMapPaneAction.SELECT_ONE_FROM_TOP);
296 alfonx 654 // INFO.mouseActions.put(MouseInputType.LDrag,
297     // XMapPaneAction.SELECT_ONE_FROM_TOP);
298 alfonx 653
299 alfonx 654 INFO.mouseActions.put(MouseInputType.RDrag, XMapPaneAction.PAN);
300    
301     // Mousewheel can zoom
302     INFO.mouseActions
303     .put(MouseInputType.Wheel, XMapPaneAction_Zoom.ZOOM_IN);
304    
305     }
306    
307     public static final XMapPaneTool SELECTION_ADD = new XMapPaneTool();
308     static {
309     SELECTION_ADD.icon = new ImageIcon(MapView.class
310     .getResource("resource/icons/selection_add.png"));
311     SELECTION_ADD.toolTip = R("MapPaneButtons.Selection.AddSelection.TT"); // TODO
312     // move
313     // to
314     // schmitzm
315    
316     SELECTION_ADD.cursor = SwingUtil.SELECTION_ADD_CURSOR;
317    
318     // Left mouse click & drag zoom in
319     SELECTION_ADD.mouseActions.put(MouseInputType.LClick,
320     XMapPaneAction.SELECT_ALL);
321     SELECTION_ADD.mouseActions.put(MouseInputType.LDrag,
322     XMapPaneAction.SELECT_ALL);
323    
324     SELECTION_ADD.mouseActions
325     .put(MouseInputType.RDrag, XMapPaneAction.PAN);
326    
327     // Mousewheel can zoom
328     SELECTION_ADD.mouseActions.put(MouseInputType.Wheel,
329     XMapPaneAction_Zoom.ZOOM_IN);
330    
331     // TODO Strg-A shoud select all
332     }
333    
334     public static final XMapPaneTool SELECTION_REMOVE = new XMapPaneTool();
335     static {
336     SELECTION_REMOVE.icon = new ImageIcon(MapView.class
337     .getResource("resource/icons/selection_remove.png"));
338     SELECTION_REMOVE.toolTip = R("MapPaneButtons.Selection.RemoveSelection.TT"); // TODO
339     // move
340     // to
341     // schmitzm
342    
343     SELECTION_REMOVE.cursor = SwingUtil.SELECTION_REMOVE_CURSOR;
344    
345     // Left mouse click & drag zoom in
346     SELECTION_REMOVE.mouseActions.put(MouseInputType.LClick,
347     XMapPaneAction.SELECT_ALL);
348     SELECTION_REMOVE.mouseActions.put(MouseInputType.LDrag,
349     XMapPaneAction.SELECT_ALL);
350    
351     SELECTION_REMOVE.mouseActions.put(MouseInputType.RDrag,
352 alfonx 653 XMapPaneAction.PAN);
353    
354     // Mousewheel can zoom
355 alfonx 654 SELECTION_REMOVE.mouseActions.put(MouseInputType.Wheel,
356 alfonx 653 XMapPaneAction_Zoom.ZOOM_IN);
357    
358 alfonx 654 // TODO Strg-A shoud select all
359     }
360    
361     public static final XMapPaneTool SELECTION_SET = new XMapPaneTool();
362     static {
363     SELECTION_SET.icon = new ImageIcon(MapView.class
364     .getResource("resource/icons/selection_set.png"));
365     SELECTION_SET.toolTip = R("MapPaneButtons.Selection.SetSelection.TT"); // TODO
366     // move
367     // to
368     // schmitzm
369    
370     SELECTION_SET.cursor = SwingUtil.SELECTION_SET_CURSOR;
371    
372     // Left mouse click & drag zoom in
373     SELECTION_SET.mouseActions.put(MouseInputType.LClick,
374     XMapPaneAction.SELECT_ALL);
375     SELECTION_SET.mouseActions.put(MouseInputType.LDrag,
376     XMapPaneAction.SELECT_ALL);
377    
378     SELECTION_SET.mouseActions
379     .put(MouseInputType.RDrag, XMapPaneAction.PAN);
380    
381     // Mousewheel can zoom
382     SELECTION_SET.mouseActions.put(MouseInputType.Wheel,
383     XMapPaneAction_Zoom.ZOOM_IN);
384    
385     // TODO Strg-A shoud select all
386     }
387    
388     /**
389     * Adds default Keyboard actions to a given {@link XMapPaneTool}
390     */
391     public static void addDefaultKeyboardAssignments(XMapPaneTool tool) {
392    
393 alfonx 653 // + and - keys zoom
394 alfonx 654 tool.keyAction.put(KeyStroke.getKeyStroke(KeyEvent.VK_PLUS, 0),
395 alfonx 653 XMapPaneAction_Zoom.ZOOM_IN);
396 alfonx 654 tool.keyAction.put(KeyStroke.getKeyStroke(KeyEvent.VK_MINUS, 0),
397 alfonx 653 XMapPaneAction_Zoom.ZOOM_OUT);
398 alfonx 654
399     KeyStroke keyStroke;
400    
401     for (int modifier : new int[] { InputEvent.ALT_DOWN_MASK,
402     InputEvent.ALT_GRAPH_DOWN_MASK, InputEvent.CTRL_DOWN_MASK,
403     InputEvent.SHIFT_DOWN_MASK, InputEvent.META_DOWN_MASK }) {
404    
405     // RIGHT button pan
406     keyStroke = KeyStroke.getKeyStroke(KeyEvent.VK_LEFT, modifier);
407     tool.keyAction.put(keyStroke, XMapPaneAction.PAN);
408     tool.keyActionParams.put(keyStroke,
409     XMapPaneAction_Pan.Direction.RIGHT);
410    
411     // LEFT button pan
412     keyStroke = KeyStroke.getKeyStroke(KeyEvent.VK_RIGHT, modifier);
413     tool.keyAction.put(keyStroke, XMapPaneAction.PAN);
414     tool.keyActionParams.put(keyStroke,
415     XMapPaneAction_Pan.Direction.LEFT);
416    
417     // UP button pan
418     keyStroke = KeyStroke.getKeyStroke(KeyEvent.VK_DOWN, modifier);
419     tool.keyAction.put(keyStroke, XMapPaneAction.PAN);
420     tool.keyActionParams
421     .put(keyStroke, XMapPaneAction_Pan.Direction.UP);
422    
423     // DOWN button pan
424     keyStroke = KeyStroke.getKeyStroke(KeyEvent.VK_UP, modifier);
425     tool.keyAction.put(keyStroke, XMapPaneAction.PAN);
426     tool.keyActionParams.put(keyStroke,
427     XMapPaneAction_Pan.Direction.DOWN);
428     }
429    
430 alfonx 653 }
431     }

Properties

Name Value
svn:eol-style native
svn:keywords Id URL
svn:mime-type text/plain

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26