// License: GPL. For details, see LICENSE file.
package org.openstreetmap.josm.actions;
import static org.openstreetmap.josm.gui.help.HelpUtil.ht;
import static org.openstreetmap.josm.tools.I18n.tr;
import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import org.openstreetmap.josm.gui.dialogs.changeset.ChangesetCacheManager;
import org.openstreetmap.josm.tools.Shortcut;
/**
* This action toggles the visibility of the {@link ChangesetCacheManager} dialog.
* @since 2685
*/
public class ChangesetManagerToggleAction extends ToggleAction {
private final transient WindowListener changesetCacheManagerClosedHandler;
/**
* Constructs a new {@code ChangesetManagerToggleAction}.
*/
public ChangesetManagerToggleAction() {
super(tr("Changeset Manager"),
"dialogs/changeset/changesetmanager",
tr("Toggle visibility of Changeset Manager window"),
Shortcut.registerShortcut("menu:windows:changesetdialog",
tr("Toggle visibility of Changeset Manager window"),
KeyEvent.VK_C, Shortcut.ALT_CTRL),
true /* register shortcut */
);
notifySelectedState();
changesetCacheManagerClosedHandler = new ChangesetCacheManagerClosedHandler();
putValue("help", ht("/Dialog/ChangesetManager"));
}
@Override
public void actionPerformed(ActionEvent e) {
toggleSelectedState(e);
notifySelectedState();
if (isSelected()) {
ChangesetCacheManager.getInstance().addWindowListener(changesetCacheManagerClosedHandler);
ChangesetCacheManager.getInstance().setVisible(true);
} else {
ChangesetCacheManager.getInstance().removeWindowListener(changesetCacheManagerClosedHandler);
ChangesetCacheManager.destroyInstance();
}
}
private class ChangesetCacheManagerClosedHandler extends WindowAdapter {
@Override
public void windowClosed(WindowEvent e) {
setSelected(false);
notifySelectedState();
ChangesetCacheManager.getInstance().removeWindowListener(changesetCacheManagerClosedHandler);
}
}
}