/[schmitzm]/trunk/src/skrueger/geotools/MapPaneToolBar.java
ViewVC logotype

Contents of /trunk/src/skrueger/geotools/MapPaneToolBar.java

Parent Directory Parent Directory | Revision Log Revision Log


Revision 141 - (show annotations)
Sun Jun 14 18:23:36 2009 UTC (15 years, 8 months ago) by alfonx
File size: 22970 byte(s)
* Have to go now.. The basic idea of seleciton-related buttons appearing only when AttribTableDialog or a ChartDialog are open has been implemented.
1 package skrueger.geotools;
2
3 import java.awt.Dimension;
4 import java.awt.event.ActionEvent;
5 import java.util.ArrayList;
6 import java.util.SortedMap;
7 import java.util.TreeMap;
8
9 import javax.swing.AbstractAction;
10 import javax.swing.AbstractButton;
11 import javax.swing.BorderFactory;
12 import javax.swing.Icon;
13 import javax.swing.ImageIcon;
14 import javax.swing.JButton;
15 import javax.swing.JComponent;
16 import javax.swing.JToggleButton;
17 import javax.swing.JToolBar;
18
19 import org.apache.log4j.Logger;
20
21 import schmitzm.geotools.gui.JMapPane;
22 import schmitzm.geotools.map.event.JMapPaneEvent;
23 import schmitzm.geotools.map.event.JMapPaneListener;
24 import schmitzm.geotools.map.event.MapAreaChangedEvent;
25 import schmitzm.swing.ButtonGroup;
26 import schmitzm.swing.SwingUtil;
27
28 import com.vividsolutions.jts.geom.Envelope;
29
30 /**
31 * A toolbar to control an {@link JMapPane} (Atlas visualization). This contains
32 * two types of buttons. A group of <i>tools</i> for the mouse actions on the
33 * map represented by {@link JToggleButton JToggleButtons}, where only one tool
34 * can be activated every time. And some (general) <i>actions</i>, represented
35 * by normal {@link JButton JButtons}.
36 *
37 * @author <a href="mailto:[email protected]">Martin Schmitz</a>
38 * (University of Bonn/Germany)
39 * @version 1.2 Stefan Krüger
40 */
41 public class MapPaneToolBar extends JToolBar {
42 private static final Logger LOGGER = Logger.getLogger(MapPaneToolBar.class
43 .getName());
44 /** Constant for the tool "Panning" (10). */
45 public static final int TOOL_PAN = 10;
46 /** Constant for the tool "Info" (20). */
47 public static final int TOOL_INFO = 20;
48 public static final int SEPERATOR0 = 99;
49
50 /** Constant for the tool "Zoom In" (110). */
51 public static final int TOOL_ZOOMIN = 110;
52 /** Constant for the tool "Zoom Out" (120). */
53 public static final int TOOL_ZOOMOUT = 120;
54 /** Constant for the action "Zoom back" (130). */
55 public static final int ACTION_ZOOM_BACK = 130;
56 /** Constant for the action "Zoom forward" (140). */
57 public static final int ACTION_ZOOM_FORWARD = 140;
58 public static final int SEPERATOR1 = 199;
59
60 /**
61 * Constant for the tool "Selection Reset" which clears the selection (240).
62 */
63 public static final int TOOL_SELECTION_CLEAR = 240;
64
65 /**
66 * Constant for the tool "Select" which sets the Selection to the selected
67 * features (210).
68 */
69 public static final int TOOL_SELECTION_SET = 210;
70 /**
71 * Constant for the tool "Selection add" which adds the features to the
72 * Selection (220).
73 */
74 public static final int TOOL_SELECTION_ADD = 220;
75 /**
76 * Constant for the tool "Selection subtract" which removes the selected
77 * features from the selection (230).
78 */
79 public static final int TOOL_SELECTION_REMOVE = 230;
80
81 /** Tool currently selected */
82 protected int selectedTool = TOOL_ZOOMIN;
83
84 /** Holds the tool buttons of the tool bar. */
85 protected SortedMap<Integer, JComponent> toolAndActionButtons = null;
86 /** Controls that only one tool button is activated. */
87 protected ButtonGroup toolButtonGroup = null;
88
89 // SK: Musste ich ändern damit man Tools und Actions in der Reihenfolge
90 // mischen kann.
91 // /** Holds the action buttons of the bar. */
92 // protected SortedMap<Integer, JButton> actionButtons = null;
93
94 /** Holds the {@link JMapPane} this tool bar controls. */
95 protected JMapPane mapPane = null;
96
97 /**
98 * A List to remember the last Envelopes that have been watched. Used for
99 * the zoomBack- and zoomForwardButtons *
100 */
101 protected ArrayList<Envelope> lastZooms = new ArrayList<Envelope>();
102 /** Holds the index to the current element in {@link #lastZooms}. */
103 protected int zoomBackIndex = 0;
104
105 /** Listener to sniff the zoom actions on the map. */
106 protected JMapPaneListener mapPaneListener = null;
107
108 protected boolean zoomBackForwardButtonInAction;
109
110 /**
111 * Creates a new toolbar. Notice: This toolbar does nothing until
112 * {@link #setMapPane(JMapPane)} is called!
113 */
114 public MapPaneToolBar() {
115 this(null);
116 }
117
118 /**
119 * Creates a new tool bar.
120 *
121 * @param mapPane
122 * {@link JMapPane} the tool bar controls
123 */
124 public MapPaneToolBar(JMapPane mapPane) {
125 super("Control the map", JToolBar.HORIZONTAL);
126 this.toolAndActionButtons = new TreeMap<Integer, JComponent>();
127 this.toolButtonGroup = new ButtonGroup();
128 // Create a Listener to sniff the zooms on the JMapPane
129 this.mapPaneListener = new JMapPaneListener() {
130 public void performMapPaneEvent(JMapPaneEvent e) {
131 if (!(e instanceof MapAreaChangedEvent))
132 return;
133
134 if (zoomBackForwardButtonInAction) {
135 zoomBackForwardButtonInAction = false;
136 return;
137 }
138
139 Envelope oldMapArea = ((MapAreaChangedEvent) e).getOldMapArea();
140 if (lastZooms.size() == 0 && oldMapArea != null) {
141 lastZooms.add(oldMapArea);
142 zoomBackIndex = 1;
143 }
144
145 final Envelope mapArea = ((MapAreaChangedEvent) e)
146 .getNewMapArea();
147 if (mapArea == null)
148 return;
149
150 if (lastZooms.size() > 0
151 && mapArea.equals(lastZooms.get(lastZooms.size() - 1))) {
152 // LOGGER.debug("MapAreaChangedEvent ausgelassen bei der Zaehlung der Zoomschritt weil identisch");
153 return;
154 }
155
156 if (lastZooms.size() > 0)
157 while (zoomBackIndex < lastZooms.size())
158 lastZooms.remove(lastZooms.size() - 1);
159
160 lastZooms.add(mapArea);
161 zoomBackIndex = lastZooms.size();
162 setButtonEnabled(ACTION_ZOOM_BACK, lastZooms.size() > 1);
163 setButtonEnabled(ACTION_ZOOM_FORWARD, false);
164 }
165 };
166
167 setMapPane(mapPane);
168 setFloatable(false);
169 setRollover(true);
170
171 init();
172 }
173
174 /**
175 * Sets the {@link JMapPane} controlled by this tool bar.
176 *
177 * @param mapPane
178 * {@link JMapPane} to control (if {@code null} this tool bar
179 * controls NOTHING!)
180 */
181 public void setMapPane(JMapPane mapPane) {
182 // Remove listener from old MapPane
183 if (this.mapPane != null)
184 this.mapPane.removeMapPaneListener(mapPaneListener);
185 this.mapPane = mapPane;
186 if (this.mapPane != null && mapPaneListener != null)
187 this.mapPane.addMapPaneListener(mapPaneListener);
188 }
189
190 /**
191 * Calls {@link #initToolsAndActions()} and {@link #initActions()} and then
192 * puts all tool buttons and all actions buttons to the tool bar.
193 */
194 protected void init() {
195 initToolsAndActions();
196
197 addSeparator(SEPERATOR0, new JToolBar.Separator());
198 addSeparator(SEPERATOR1, new JToolBar.Separator());
199
200 initToolBar();
201 }
202
203 /**
204 * Creates the tool buttons and action buttons and seperators, adds them to
205 * {@link #toolAndActionButtons} and finally creates a button group for all
206 * tools. So sub-classes which override this method should FIRST add their
207 * new tool buttons to {@link #toolAndActionButtons} before calling {@code
208 * super.initTools()}.
209 */
210 protected void initToolsAndActions() {
211 // Panning
212 addTool(new MapPaneToolBarAction(TOOL_PAN, this, "", new ImageIcon(
213 MapView.class.getResource("resource/icons/pan.png"))), false);
214 // Info
215 addTool(new MapPaneToolBarAction(TOOL_INFO, this, "", new ImageIcon(
216 MapView.class.getResource("resource/icons/info.png"))), false);
217
218 // Zoom in
219 addTool(new MapPaneToolBarAction(TOOL_ZOOMIN, this, "", new ImageIcon(
220 MapView.class.getResource("resource/icons/zoom_in.png"))),
221 false);
222 // Zoom out
223 addTool(new MapPaneToolBarAction(TOOL_ZOOMOUT, this, "", new ImageIcon(
224 MapView.class.getResource("resource/icons/zoom_out.png"))),
225 false);
226
227 // Action button to revert the last zoom
228 addAction(new MapPaneToolBarAction(ACTION_ZOOM_BACK, this, "",
229 new ImageIcon(MapView.class
230 .getResource("resource/icons/zoom_back.png"))), false);
231 setButtonEnabled(ACTION_ZOOM_BACK, false);
232
233 // Action button to redo the last zoom
234 addAction(new MapPaneToolBarAction(ACTION_ZOOM_FORWARD, this, "",
235 new ImageIcon(MapView.class
236 .getResource("resource/icons/zoom_forward.png"))),
237 false);
238 setButtonEnabled(ACTION_ZOOM_FORWARD, false);
239
240 // set the selected tool enabled
241 setSelectedTool(selectedTool);
242
243 }
244
245 /**
246 * Clears the GUI of all components and adds all tool and action buttons to
247 * the tool bar.
248 */
249 public void initToolBar() {
250 setAlignmentY(1f);
251 removeAll();
252 // Separator to the left of the tool actions to start
253 // the tool buttons with the map (not with the coordinate grid)
254 Dimension dimension = new Dimension(49, 10);
255 addSeparator(dimension);
256 // Tool buttons
257 for (JComponent b : toolAndActionButtons.values())
258 add(b);
259
260 repaint();
261
262 if (!toolAndActionButtons.containsKey(selectedTool)) {
263 /**
264 * This might be a bit specific, but IF selection buttons are
265 * available, select one of them.. if not, select the INFO tool.
266 */
267
268 if (toolAndActionButtons.containsKey(TOOL_SELECTION_SET)) {
269 setSelectedTool(TOOL_SELECTION_SET);
270 } else if (toolAndActionButtons.containsKey(TOOL_INFO)) {
271 setSelectedTool(TOOL_INFO);
272 } else {
273 // TODO What to do now?!
274 setSelectedTool(null);
275 }
276
277 }
278 }
279
280 // Space between tool buttons and action buttons
281 // SK: Seperators are now als manages like actions and tools
282 // Dimension dimension2 = new Dimension( 10,10);
283 // this.addSeparator(dimension2);
284
285 // // Action buttons
286 // for (JButton b : actionButtons.values())
287 // add(b);
288 // }
289
290 /**
291 * Performs the activation of a tool.
292 *
293 * @param tool
294 * the tool to activate
295 * @param e
296 * the event of the button
297 */
298 public void performToolButton(int tool, ActionEvent e) {
299 if (mapPane == null)
300 return;
301
302 selectedTool = tool;
303
304 switch (tool) {
305 case TOOL_PAN:
306 // Set the mouse tool to "Panning"
307 mapPane.setWindowSelectionState(JMapPane.NONE);
308 mapPane.setState(JMapPane.PAN);
309 mapPane.setHighlight(false);
310 mapPane.setNormalCursor(SwingUtil.PAN_CURSOR);
311 break;
312 case TOOL_INFO:
313 // Set the mouse tool to "Info"
314 mapPane.setWindowSelectionState(JMapPane.NONE);
315 mapPane.setState(JMapPane.SELECT_TOP); // Why not:
316 // JMapPane.SELECT_TOP_ONEONLY
317 mapPane.setHighlight(false);// SK: Was true, but since it not works
318 // properly removed it to save
319 // performance
320 mapPane.setNormalCursor(SwingUtil.CROSSHAIR_CURSOR);
321 break;
322 case TOOL_ZOOMIN:
323 // Set the mouse tool to "Zoom in"
324 mapPane.setWindowSelectionState(JMapPane.ZOOM_IN);
325 mapPane.setState(JMapPane.ZOOM_IN);
326 mapPane.setHighlight(false);
327 mapPane.setNormalCursor(SwingUtil.ZOOMIN_CURSOR);
328 break;
329 case TOOL_ZOOMOUT:
330 // Set the mouse tool to "Zoom out"
331 mapPane.setWindowSelectionState(JMapPane.NONE);
332 mapPane.setState(JMapPane.ZOOM_OUT);
333 mapPane.setHighlight(false);
334 mapPane.setNormalCursor(SwingUtil.ZOOMOUT_CURSOR);
335 break;
336 default:
337 // Set map actions to default
338 mapPane.setWindowSelectionState(JMapPane.NONE);
339 mapPane.setState(JMapPane.NONE);
340 mapPane.setHighlight(false);
341 mapPane.setNormalCursor(null);
342 break;
343 }
344 mapPane.updateCursor();
345 }
346
347 /**
348 * @param id
349 * The ID of the Component to remove. The change will not be
350 * visible until {@link #initToolBar()} is called.
351 * @return <code>null</code> or the component that has been removed.
352 */
353 public JComponent removeId(int id) {
354 return toolAndActionButtons.remove(id);
355 }
356
357 /**
358 * Performs the action of an action button.
359 *
360 * @param tool
361 * the action
362 * @param e
363 * the event of the button
364 */
365 protected void performActionButton(int action, ActionEvent e) {
366 if (mapPane == null)
367 return;
368
369 // Perform the action "Zoom back": Revert the last zoom
370 if (action == ACTION_ZOOM_BACK) {
371 if (zoomBackIndex <= 1)
372 return;
373
374 zoomBackForwardButtonInAction = true;
375 zoomBackIndex--;
376 getButton(ACTION_ZOOM_FORWARD).setEnabled(true);
377 getButton(ACTION_ZOOM_BACK).setEnabled(zoomBackIndex > 1);
378
379 mapPane.setMapArea(lastZooms.get(zoomBackIndex - 1));
380 mapPane.refresh();
381 }
382
383 // Perform the action "Zoom forward": Re-do the last zoom
384 if (action == ACTION_ZOOM_FORWARD) {
385 if (zoomBackIndex < lastZooms.size()) {
386 zoomBackForwardButtonInAction = true;
387 zoomBackIndex++;
388 getButton(ACTION_ZOOM_BACK).setEnabled(true);
389 getButton(ACTION_ZOOM_FORWARD).setEnabled(
390 zoomBackIndex < lastZooms.size());
391
392 mapPane.setMapArea(lastZooms.get(zoomBackIndex - 1));
393 mapPane.refresh();
394 }
395 }
396
397 }
398
399 /**
400 * Adds a tool to the tool bar. Does nothing if a tool or action with the
401 * specified ID already exists!
402 *
403 * @param buttonAction
404 * action for the toggle button
405 * @param resetToolBar
406 * indicates whether the toolbar GUI is reset after adding the
407 * button (if adding several actions it useful only to reset the
408 * GUI for the last added tool)
409 */
410 public void addTool(MapPaneToolBarAction buttonAction, boolean resetToolBar) {
411 if (isButtonIDUsed(buttonAction.getID())) {
412 LOGGER
413 .warn("addTool(.) ignored because ID already used for tool or action: "
414 + buttonAction.getID());
415 return;
416 }
417 JToggleButton button = new JToggleButton(buttonAction);
418 button.setBorder(BorderFactory.createRaisedBevelBorder());
419 toolButtonGroup.add(button);
420 toolAndActionButtons.put(buttonAction.getID(), button);
421 if (resetToolBar)
422 initToolBar();
423 }
424
425 /**
426 * Adds a tool to the tool bar and resets the toolbar GUI.
427 *
428 * @param buttonAction
429 * action for the toggle button
430 */
431 public void addTool(MapPaneToolBarAction buttonAction) {
432 addTool(buttonAction, true);
433 }
434
435 /**
436 * Adds an action to the tool bar. Does nothing if a tool or action with the
437 * specified ID already exists!
438 *
439 * @param buttonAction
440 * action for the button
441 * @param resetToolBar
442 * indicates whether the toolbar GUI is reset after adding the
443 * button (if adding several actions it useful only to reset the
444 * GUI for the last added tool)
445 */
446 public void addAction(MapPaneToolBarAction buttonAction,
447 boolean resetToolBar) {
448 if (isButtonIDUsed(buttonAction.getID())) {
449 LOGGER
450 .warn("addAction(.) ignored because ID already used for tool or action: "
451 + buttonAction.getID());
452 return;
453 }
454 JButton button = new JButton(buttonAction);
455 button.setBorder(BorderFactory.createRaisedBevelBorder());
456 toolAndActionButtons.put(buttonAction.getID(), button);
457 if (resetToolBar)
458 initToolBar();
459 }
460
461 public void addSeparator(int id, Separator separator) {
462 if (isButtonIDUsed(id)) {
463 LOGGER
464 .warn("addSeparator(.) ignored because ID already used for tool or action. ");
465 return;
466 }
467 toolAndActionButtons.put(id, separator);
468 }
469
470 /**
471 * Adds an action to the tool bar and resets the toolbar GUI.
472 *
473 * @param buttonAction
474 * action for the toggle button
475 */
476 public void addAction(MapPaneToolBarAction buttonAction) {
477 addAction(buttonAction, true);
478 }
479
480 /**
481 * Returns the button for a specific tool or action.
482 *
483 * @param id
484 * the constant for any button in the {@link MapPaneToolBar}
485 * @return a {@link JButton} if {@code id} specifies an
486 * {@linkplain #getActionButton(int) action button} or
487 * {@link JToogleButton} if {@code id} specifies a
488 * {@linkplain #getToolButton(int) tool button}
489 */
490 public AbstractButton getButton(int id) {
491 AbstractButton button = (AbstractButton) toolAndActionButtons.get(id);
492 if (button == null)
493 LOGGER.warn("Unknown tool or action ID: " + id);
494 return button;
495 }
496
497 /**
498 * Returns the button for a specific tool.
499 *
500 * @param tool
501 * the constant for a tool
502 */
503 public JToggleButton getToolButton(int tool) {
504 AbstractButton button = getButton(tool);
505 if (button != null && !(button instanceof JToggleButton)) {
506 LOGGER.warn("ID specifies no tool: " + tool);
507 button = null;
508 }
509 return (JToggleButton) button;
510 }
511
512 /**
513 * Returns the button for a specific action.
514 *
515 * @param action
516 * the constant an action
517 */
518 public JButton getActionButton(int action) {
519 AbstractButton button = getButton(action);
520 if (button != null && !(button instanceof JButton)) {
521 LOGGER.warn("ID specifies no action: " + action);
522 button = null;
523 }
524 return (JButton) button;
525
526 }
527
528 /**
529 * Sets the selected tool.
530 *
531 * @param tool
532 * ID of the tool
533 */
534 public void setSelectedTool(Integer tool) {
535 if (tool == null)
536 toolButtonGroup.setUnselected();
537
538 JToggleButton button = getToolButton(tool);
539 if (button == null)
540 return;
541 button.setSelected(true);
542 button.getAction().actionPerformed(null);
543
544 selectedTool = tool;
545 }
546
547 /**
548 * Returns the selected tool.
549 *
550 * @return -1 if no tool is active
551 */
552 public int getSelectedTool() {
553 if (toolButtonGroup.getSelectedButton() == null)
554 return -1;
555 return selectedTool;
556 }
557
558 /**
559 * Sets whether a tool or action is activated or not. The visible property
560 * of the button is not affected.
561 *
562 * @param id
563 * tool or actionID
564 * @param enabled
565 * if {@code true} the tool becomes available
566 */
567 public void setButtonEnabled(int id, boolean enabled) {
568 AbstractButton button = getButton(id);
569 if (button == null)
570 return;
571 button.setEnabled(enabled);
572 }
573
574 /**
575 * Sets whether a tool or action is activated or not.
576 *
577 * @param id
578 * tool or actionID
579 * @param enabled
580 * if {@code true} the tool becomes available
581 * @param hideOnDisable
582 * if {@code true} the button is also hidden if {@code enabled}
583 * is {@code false}
584 */
585 public void setButtonEnabled(int id, boolean enabled, boolean hideOnDisable) {
586 AbstractButton button = getButton(id);
587 if (button == null)
588 return;
589 button.setEnabled(enabled);
590 // if button is enabled, it becomes visible anyway
591 // if button is disabled and the "hide" option is set, it is also hidden
592 if (enabled)
593 button.setVisible(true);
594 else
595 button.setVisible(!hideOnDisable);
596 }
597
598 /**
599 * Checks whether a ID is already used for a tool or action.
600 *
601 * @param tool
602 * tool ID
603 */
604 public boolean isButtonIDUsed(int id) {
605 return toolAndActionButtons.get(id) != null;
606 }
607
608 /**
609 * Checks whether a tool is activated.
610 *
611 * @param tool
612 * tool ID
613 * @return {@code false} if an unknown ID is specified
614 */
615 public boolean isButtonEnabled(int id) {
616 AbstractButton button = getButton(id);
617 if (button != null)
618 return button.isEnabled();
619 return false;
620 }
621
622 /**
623 * Sets the activation for all tools.
624 *
625 * @param enabled
626 * if {@code true} all tools becomes available
627 * @param hideOnDisable
628 * if {@code true} the buttons are also hidden if {@code enabled}
629 * is {@code false}
630 */
631 public void setAllToolsEnabled(boolean enabled, boolean hideOnDisable) {
632 for (int tool : toolAndActionButtons.keySet())
633 setButtonEnabled(tool, enabled, hideOnDisable);
634 }
635
636 /**
637 * Sets the activation for all actions.
638 *
639 * @param enabled
640 * if {@code true} all actions becomes available
641 * @param hideOnDisable
642 * if {@code true} the buttons are also hidden if {@code enabled}
643 * is {@code false}
644 */
645 public void setAllActionsEnabled(boolean enabled, boolean hideOnDisable) {
646 for (int id : toolAndActionButtons.keySet()) {
647 if (toolAndActionButtons.get(id) instanceof JButton) {
648 setButtonEnabled(id, enabled, hideOnDisable);
649 }
650 }
651
652 }
653
654 /**
655 * Returns the maximum ID of tools.
656 */
657 public int getMaxToolID() {
658 return toolAndActionButtons.lastKey();
659 }
660
661 /**
662 * Returns the minimum ID of tools.
663 */
664 public int getMinToolID() {
665 return toolAndActionButtons.firstKey();
666 }
667
668 /**
669 * Extends the {@link AbstractAction} with maintaining an ID and the
670 * {@link MapPaneToolBar} the actions controls. Additionally this class
671 * automatically calls
672 * {@link MapPaneToolBar#performToolButton(int, ActionEvent)} or
673 * {@link MapPaneToolBar#performActionButton(int, ActionEvent)} depending on
674 * whether the action is added via
675 * {@link MapPaneToolBar#addTool(MapPaneToolBarAction)} or
676 * {@link MapPaneToolBar#addAction(MapPaneToolBarAction)}.
677 *
678 * @author <a href="mailto:[email protected]">Martin Schmitz</a>
679 * (University of Bonn/Germany)
680 */
681 public static class MapPaneToolBarAction extends AbstractAction {
682 /** The ID of the action */
683 protected int id = -1;
684 /** The tool bar, this action is made for. */
685 protected MapPaneToolBar toolBar = null;
686
687 /**
688 * Creates a new action with a dummy description and no icon.
689 *
690 * @param id
691 * unique ID for the action
692 * @param toolBar
693 * toolbar this action is made for
694 */
695 public MapPaneToolBarAction(int id, MapPaneToolBar toolBar) {
696 this(id, toolBar, "" + id);
697 }
698
699 /**
700 * Creates a new action without an icon.
701 *
702 * @param id
703 * unique ID for the action
704 * @param toolBar
705 * toolbar this action is made for
706 * @param name
707 * description used for buttons or menus
708 */
709 public MapPaneToolBarAction(int id, MapPaneToolBar toolBar, String name) {
710 this(id, toolBar, name, null);
711 }
712
713 /**
714 * Creates a new action.
715 *
716 * @param id
717 * unique ID for the action
718 * @param toolBar
719 * toolbar this action is made for
720 * @param name
721 * description used for buttons or menus
722 * @param icon
723 * icon used for buttons or menus
724 */
725 public MapPaneToolBarAction(int id, MapPaneToolBar toolBar,
726 String name, Icon icon) {
727 super(name, icon);
728 this.id = id;
729 this.toolBar = toolBar;
730 }
731
732 /**
733 * Calls {@link MapPaneToolBar#performToolButton(int, ActionEvent)} or
734 * {@link MapPaneToolBar#performActionButton(int, ActionEvent)}
735 * depending on whether the action is added to the toolbar via
736 * {@link MapPaneToolBar#addTool(MapPaneToolBarAction)} or
737 * {@link MapPaneToolBar#addAction(MapPaneToolBarAction)}.
738 */
739 public void actionPerformed(ActionEvent e) {
740 if (toolBar.toolAndActionButtons.get(id) instanceof JToggleButton)
741 toolBar.performToolButton(id, e);
742 else if (toolBar.toolAndActionButtons.get(id) instanceof JButton)
743 toolBar.performActionButton(id, e);
744 }
745
746 /**
747 * Returns the (unique) id of this action.
748 *
749 * @return
750 */
751 public int getID() {
752 return id;
753 }
754 }
755 }

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26