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}