001// License: GPL. For details, see LICENSE file. 002package org.openstreetmap.josm.gui; 003 004import static org.openstreetmap.josm.tools.I18n.trc; 005 006import java.awt.event.ContainerEvent; 007import java.awt.event.ContainerListener; 008import java.util.Arrays; 009 010import javax.swing.JMenu; 011 012import org.openstreetmap.josm.actions.ExpertToggleAction; 013import org.openstreetmap.josm.actions.ExpertToggleAction.ExpertModeChangeListener; 014 015/** 016 * Window menu, holding entries for changeset manager, toggle dialogs. 017 * @since 15649 018 */ 019public class WindowMenu extends JMenu implements ContainerListener, ExpertModeChangeListener { 020 021 /** 022 * Constructs a new {@code WindowMenu} 023 */ 024 public WindowMenu() { 025 /* I18N: mnemonic: W */ 026 super(trc("menu", "Windows")); 027 ExpertToggleAction.addExpertModeChangeListener(this); 028 getPopupMenu().addContainerListener(this); 029 setEnabledState(); 030 } 031 032 @Override 033 public void expertChanged(boolean isExpert) { 034 setEnabledState(); 035 } 036 037 @Override 038 public void componentAdded(ContainerEvent e) { 039 setEnabledState(); 040 } 041 042 @Override 043 public void componentRemoved(ContainerEvent e) { 044 setEnabledState(); 045 } 046 047 protected void setEnabledState() { 048 setEnabled(ExpertToggleAction.isExpert() 049 || Arrays.stream(getMenuComponents()).anyMatch(c -> !ExpertToggleAction.hasVisibilitySwitcher(c))); 050 } 051}