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}