diff --git a/src/main/java/forge/gui/SOverlayUtils.java b/src/main/java/forge/gui/SOverlayUtils.java index 2cbc18f515f..7df2e7858af 100644 --- a/src/main/java/forge/gui/SOverlayUtils.java +++ b/src/main/java/forge/gui/SOverlayUtils.java @@ -126,7 +126,7 @@ public final class SOverlayUtils { private static Component prevFocusOwner; public static void showOverlay() { - Singletons.getControl().getForgeMenu().setEnabled(false); + Singletons.getControl().getForgeMenu().getPopupMenu().setEnabled(false); prevFocusOwner = FocusManager.getCurrentKeyboardFocusManager().getPermanentFocusOwner(); FOverlay.SINGLETON_INSTANCE.getPanel().setVisible(true); // ensure no background element has focus @@ -138,7 +138,7 @@ public final class SOverlayUtils { * Removes child components and closes overlay. */ public static void hideOverlay() { - Singletons.getControl().getForgeMenu().setEnabled(true); + Singletons.getControl().getForgeMenu().getPopupMenu().setEnabled(true); FOverlay.SINGLETON_INSTANCE.getPanel().removeAll(); FOverlay.SINGLETON_INSTANCE.getPanel().setVisible(false); if (null != prevFocusOwner) { diff --git a/src/main/java/forge/gui/menus/ForgeMenu.java b/src/main/java/forge/gui/menus/ForgeMenu.java index b337e91c2e1..118cc7a3b41 100644 --- a/src/main/java/forge/gui/menus/ForgeMenu.java +++ b/src/main/java/forge/gui/menus/ForgeMenu.java @@ -11,17 +11,19 @@ import javax.swing.JMenu; import javax.swing.JMenuItem; import javax.swing.JPopupMenu; import javax.swing.KeyStroke; +import javax.swing.event.PopupMenuEvent; +import javax.swing.event.PopupMenuListener; import forge.Singletons; import forge.control.RestartUtil; import forge.control.FControl.Screens; import forge.util.TypeUtil; -@SuppressWarnings("serial") -public class ForgeMenu extends JPopupMenu { +public final class ForgeMenu { private static final int minItemWidth = 100; private static final int itemHeight = 25; + private JPopupMenu popupMenu; private IMenuProvider provider; private static HashMap activeShortcuts = new HashMap(); @@ -29,15 +31,21 @@ public class ForgeMenu extends JPopupMenu { refresh(); } - @Override public void show() { show(false); } - @Override public void show(boolean hideIfAlreadyShown) { Singletons.getView().getNavigationBar().showForgeMenu(hideIfAlreadyShown); } + + public void hide() { + popupMenu.setVisible(false); + } + + public JPopupMenu getPopupMenu() { + return popupMenu; + } public void setProvider(IMenuProvider provider0) { provider = provider0; @@ -46,7 +54,17 @@ public class ForgeMenu extends JPopupMenu { public void refresh() { activeShortcuts.clear(); - removeAll(); + popupMenu = new JPopupMenu(); + popupMenu.addPopupMenuListener(new PopupMenuListener() { + @Override + public void popupMenuWillBecomeInvisible(PopupMenuEvent popupMenuEvent) { + Singletons.getView().getNavigationBar().onForgeMenuHidden(); + } + @Override + public void popupMenuWillBecomeVisible(PopupMenuEvent popupMenuEvent) {} + @Override + public void popupMenuCanceled(PopupMenuEvent popupMenuEvent) {} + }); if (provider != null) { List menus = provider.getMenus(); if (menus != null) { @@ -63,11 +81,13 @@ public class ForgeMenu extends JPopupMenu { add(getMenuItem_Exit()); } - @Override - public JMenuItem add(JMenuItem item) { - item = super.add(item); + public void add(JMenuItem item) { + item = popupMenu.add(item); setupItem(item); - return item; + } + + public void addSeparator() { + popupMenu.addSeparator(); } private void setupMenu(JMenu menu) { @@ -95,7 +115,7 @@ public class ForgeMenu extends JPopupMenu { public boolean handleKeyEvent(KeyEvent e) { JMenuItem item = activeShortcuts.get(KeyStroke.getKeyStrokeForEvent(e)); if (item != null) { - setVisible(false); //ensure menu doesn't stay open if currently open + hide(); //ensure menu doesn't stay open if currently open item.doClick(); return true; } diff --git a/src/main/java/forge/view/FNavigationBar.java b/src/main/java/forge/view/FNavigationBar.java index 94ed705daea..a2d99beacd2 100644 --- a/src/main/java/forge/view/FNavigationBar.java +++ b/src/main/java/forge/view/FNavigationBar.java @@ -12,9 +12,6 @@ import java.awt.event.MouseEvent; import javax.swing.JPanel; import javax.swing.SpringLayout; import javax.swing.Timer; -import javax.swing.event.PopupMenuEvent; -import javax.swing.event.PopupMenuListener; - import forge.Singletons; import forge.gui.menus.ForgeMenu; import forge.gui.toolbox.FButton; @@ -83,29 +80,23 @@ public class FNavigationBar extends FTitleBarBase { } } }); - forgeMenu.addPopupMenuListener(new PopupMenuListener() { - @Override - public void popupMenuWillBecomeInvisible(PopupMenuEvent popupMenuEvent) { - btnForge.setToggled(false); - timeMenuHidden = System.currentTimeMillis(); - } - @Override - public void popupMenuWillBecomeVisible(PopupMenuEvent popupMenuEvent) {} - @Override - public void popupMenuCanceled(PopupMenuEvent popupMenuEvent) {} - }); } public void showForgeMenu(boolean hideIfAlreadyShown) { if (!btnForge.isToggled()) { btnForge.setToggled(true); - forgeMenu.show(this, 1, this.getHeight()); + forgeMenu.getPopupMenu().show(this, 1, this.getHeight()); } else if (hideIfAlreadyShown) { - forgeMenu.setVisible(false); + forgeMenu.hide(); } } + public void onForgeMenuHidden() { + btnForge.setToggled(false); + timeMenuHidden = System.currentTimeMillis(); + } + //setup panel used to reveal navigation bar when hidden private void setupPnlReveal() { pnlReveal.setVisible(hidden);