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}