source: josm/trunk/src/org/openstreetmap/josm/actions/ChangesetManagerToggleAction.java@ 3872

Last change on this file since 3872 was 3083, checked in by bastiK, 14 years ago

added svn:eol-style=native to source files

  • Property svn:eol-style set to native
File size: 3.2 KB
Line 
1// License: GPL. For details, see LICENSE file.
2package org.openstreetmap.josm.actions;
3
4import static org.openstreetmap.josm.gui.help.HelpUtil.ht;
5import static org.openstreetmap.josm.tools.I18n.tr;
6
7import java.awt.event.ActionEvent;
8import java.awt.event.KeyEvent;
9import java.awt.event.WindowAdapter;
10import java.awt.event.WindowEvent;
11import java.awt.event.WindowListener;
12import java.util.ArrayList;
13import java.util.List;
14
15import javax.swing.ButtonModel;
16
17import org.openstreetmap.josm.gui.dialogs.changeset.ChangesetCacheManager;
18import org.openstreetmap.josm.tools.Shortcut;
19/**
20 * This action toggles the visibility of the {@see ChangesetCacheManager} dialog.
21 *
22 */
23public class ChangesetManagerToggleAction extends JosmAction {
24 private final List<ButtonModel> buttonModels = new ArrayList<ButtonModel>();
25 //FIXME: replace with property Action.SELECTED_KEY when migrating to
26 // Java 6
27 private boolean selected;
28 private WindowListener changesetCacheManagerClosedHandler;
29
30 public ChangesetManagerToggleAction() {
31 super(
32 tr("Changeset Manager"),
33 "dialogs/changeset/changesetmanager",
34 tr("Toggle visibility of Changeset Manager window"),
35 Shortcut.registerShortcut(
36 "menu:view:changesetdialog",
37 tr("Toggle visibility of Changeset Manager window"),
38 KeyEvent.VK_C,
39 Shortcut.GROUPS_ALT2 + Shortcut.GROUP_HOTKEY
40 ),
41 true /* register shortcut */
42 );
43 notifySelectedState();
44 changesetCacheManagerClosedHandler = new ChangesetCacheManagerClosedHandler();
45 putValue("help", ht("/Action/ToggleChangesetManager"));
46 }
47
48 public void addButtonModel(ButtonModel model) {
49 if (model != null && !buttonModels.contains(model)) {
50 buttonModels.add(model);
51 }
52 }
53
54 public void removeButtonModel(ButtonModel model) {
55 if (model != null && buttonModels.contains(model)) {
56 buttonModels.remove(model);
57 }
58 }
59
60 protected void notifySelectedState() {
61 for (ButtonModel model: buttonModels) {
62 if (model.isSelected() != selected) {
63 model.setSelected(selected);
64 }
65 }
66 }
67
68 protected void toggleSelectedState() {
69 selected = !selected;
70 notifySelectedState();
71 if (selected) {
72 ChangesetCacheManager.getInstance().addWindowListener(changesetCacheManagerClosedHandler);
73 ChangesetCacheManager.getInstance().setVisible(true);
74 } else {
75 ChangesetCacheManager.getInstance().removeWindowListener(changesetCacheManagerClosedHandler);
76 ChangesetCacheManager.destroyInstance();
77 }
78 }
79
80 public void actionPerformed(ActionEvent e) {
81 toggleSelectedState();
82 }
83
84 private class ChangesetCacheManagerClosedHandler extends WindowAdapter {
85 @Override
86 public void windowClosed(WindowEvent e) {
87 selected = false;
88 notifySelectedState();
89 ChangesetCacheManager.getInstance().removeWindowListener(changesetCacheManagerClosedHandler);
90 }
91 }
92}
Note: See TracBrowser for help on using the repository browser.