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.ImageProvider;
015import org.openstreetmap.josm.tools.Shortcut;
016
017/**
018 * This action toggles the visibility of the {@link ChangesetCacheManager} dialog.
019 * @since 2685
020 */
021public class ChangesetManagerToggleAction extends ToggleAction {
022    private final transient WindowListener changesetCacheManagerClosedHandler;
023
024    /**
025     * Constructs a new {@code ChangesetManagerToggleAction}.
026     */
027    public ChangesetManagerToggleAction() {
028        super(tr("Changeset Manager"),
029                new ImageProvider("dialogs/changeset/changesetmanager").setOptional(true),
030                tr("Toggle visibility of Changeset Manager window"),
031                Shortcut.registerShortcut("menu:windows:changesetdialog",
032                        tr("Windows: {0}", tr("Changeset Manager")), KeyEvent.VK_C, Shortcut.ALT_CTRL),
033                true /* register shortcut */, "dialogs/changeset/changesetmanager", false);
034        notifySelectedState();
035        changesetCacheManagerClosedHandler = new ChangesetCacheManagerClosedHandler();
036        setHelpId(ht("/Dialog/ChangesetManager"));
037    }
038
039    @Override
040    public void actionPerformed(ActionEvent e) {
041        toggleSelectedState(e);
042        notifySelectedState();
043        if (isSelected()) {
044            ChangesetCacheManager.getInstance().addWindowListener(changesetCacheManagerClosedHandler);
045            ChangesetCacheManager.getInstance().setVisible(true);
046        } else {
047            ChangesetCacheManager.destroyInstance();
048        }
049    }
050
051    private class ChangesetCacheManagerClosedHandler extends WindowAdapter {
052        @Override
053        public void windowClosed(WindowEvent e) {
054            setSelected(false);
055            notifySelectedState();
056        }
057    }
058}