001// License: GPL. For details, see LICENSE file.
002package org.openstreetmap.josm.actions;
003
004import static org.openstreetmap.josm.gui.help.HelpUtil.ht;
005import static org.openstreetmap.josm.tools.I18n.tr;
006
007import java.awt.event.ActionEvent;
008import java.awt.event.KeyEvent;
009import java.awt.event.WindowAdapter;
010import java.awt.event.WindowEvent;
011import java.awt.event.WindowListener;
012
013import org.openstreetmap.josm.gui.dialogs.changeset.ChangesetCacheManager;
014import org.openstreetmap.josm.tools.Shortcut;
015
016/**
017 * This action toggles the visibility of the {@link ChangesetCacheManager} dialog.
018 * @since 2685
019 */
020public class ChangesetManagerToggleAction extends ToggleAction {
021    private WindowListener changesetCacheManagerClosedHandler;
022
023    /**
024     * Constructs a new {@code ChangesetManagerToggleAction}.
025     */
026    public ChangesetManagerToggleAction() {
027        super(tr("Changeset Manager"),
028              "dialogs/changeset/changesetmanager",
029              tr("Toggle visibility of Changeset Manager window"),
030              Shortcut.registerShortcut("menu:windows:changesetdialog",
031                      tr("Toggle visibility of Changeset Manager window"),
032                      KeyEvent.VK_C, Shortcut.ALT_CTRL),
033              true /* register shortcut */
034        );
035        notifySelectedState();
036        changesetCacheManagerClosedHandler = new ChangesetCacheManagerClosedHandler();
037        putValue("help", ht("/Dialog/ChangesetManager"));
038    }
039
040    @Override
041    public void actionPerformed(ActionEvent e) {
042        toggleSelectedState(e);
043        notifySelectedState();
044        if (isSelected()) {
045            ChangesetCacheManager.getInstance().addWindowListener(changesetCacheManagerClosedHandler);
046            ChangesetCacheManager.getInstance().setVisible(true);
047        } else {
048            ChangesetCacheManager.getInstance().removeWindowListener(changesetCacheManagerClosedHandler);
049            ChangesetCacheManager.destroyInstance();
050        }
051    }
052
053    private class ChangesetCacheManagerClosedHandler extends WindowAdapter {
054        @Override
055        public void windowClosed(WindowEvent e) {
056            setSelected(false);
057            notifySelectedState();
058            ChangesetCacheManager.getInstance().removeWindowListener(changesetCacheManagerClosedHandler);
059        }
060    }
061}