Fix so Forge menu items update from skin change properly

This commit is contained in:
drdev
2013-10-04 06:43:41 +00:00
parent dbd3d956fb
commit ad2f63cd8f
3 changed files with 39 additions and 28 deletions

View File

@@ -126,7 +126,7 @@ public final class SOverlayUtils {
private static Component prevFocusOwner; private static Component prevFocusOwner;
public static void showOverlay() { public static void showOverlay() {
Singletons.getControl().getForgeMenu().setEnabled(false); Singletons.getControl().getForgeMenu().getPopupMenu().setEnabled(false);
prevFocusOwner = FocusManager.getCurrentKeyboardFocusManager().getPermanentFocusOwner(); prevFocusOwner = FocusManager.getCurrentKeyboardFocusManager().getPermanentFocusOwner();
FOverlay.SINGLETON_INSTANCE.getPanel().setVisible(true); FOverlay.SINGLETON_INSTANCE.getPanel().setVisible(true);
// ensure no background element has focus // ensure no background element has focus
@@ -138,7 +138,7 @@ public final class SOverlayUtils {
* Removes child components and closes overlay. * Removes child components and closes overlay.
*/ */
public static void hideOverlay() { public static void hideOverlay() {
Singletons.getControl().getForgeMenu().setEnabled(true); Singletons.getControl().getForgeMenu().getPopupMenu().setEnabled(true);
FOverlay.SINGLETON_INSTANCE.getPanel().removeAll(); FOverlay.SINGLETON_INSTANCE.getPanel().removeAll();
FOverlay.SINGLETON_INSTANCE.getPanel().setVisible(false); FOverlay.SINGLETON_INSTANCE.getPanel().setVisible(false);
if (null != prevFocusOwner) { if (null != prevFocusOwner) {

View File

@@ -11,17 +11,19 @@ import javax.swing.JMenu;
import javax.swing.JMenuItem; import javax.swing.JMenuItem;
import javax.swing.JPopupMenu; import javax.swing.JPopupMenu;
import javax.swing.KeyStroke; import javax.swing.KeyStroke;
import javax.swing.event.PopupMenuEvent;
import javax.swing.event.PopupMenuListener;
import forge.Singletons; import forge.Singletons;
import forge.control.RestartUtil; import forge.control.RestartUtil;
import forge.control.FControl.Screens; import forge.control.FControl.Screens;
import forge.util.TypeUtil; import forge.util.TypeUtil;
@SuppressWarnings("serial") public final class ForgeMenu {
public class ForgeMenu extends JPopupMenu {
private static final int minItemWidth = 100; private static final int minItemWidth = 100;
private static final int itemHeight = 25; private static final int itemHeight = 25;
private JPopupMenu popupMenu;
private IMenuProvider provider; private IMenuProvider provider;
private static HashMap<KeyStroke, JMenuItem> activeShortcuts = new HashMap<KeyStroke, JMenuItem>(); private static HashMap<KeyStroke, JMenuItem> activeShortcuts = new HashMap<KeyStroke, JMenuItem>();
@@ -29,16 +31,22 @@ public class ForgeMenu extends JPopupMenu {
refresh(); refresh();
} }
@Override
public void show() { public void show() {
show(false); show(false);
} }
@Override
public void show(boolean hideIfAlreadyShown) { public void show(boolean hideIfAlreadyShown) {
Singletons.getView().getNavigationBar().showForgeMenu(hideIfAlreadyShown); Singletons.getView().getNavigationBar().showForgeMenu(hideIfAlreadyShown);
} }
public void hide() {
popupMenu.setVisible(false);
}
public JPopupMenu getPopupMenu() {
return popupMenu;
}
public void setProvider(IMenuProvider provider0) { public void setProvider(IMenuProvider provider0) {
provider = provider0; provider = provider0;
refresh(); refresh();
@@ -46,7 +54,17 @@ public class ForgeMenu extends JPopupMenu {
public void refresh() { public void refresh() {
activeShortcuts.clear(); 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) { if (provider != null) {
List<JMenu> menus = provider.getMenus(); List<JMenu> menus = provider.getMenus();
if (menus != null) { if (menus != null) {
@@ -63,11 +81,13 @@ public class ForgeMenu extends JPopupMenu {
add(getMenuItem_Exit()); add(getMenuItem_Exit());
} }
@Override public void add(JMenuItem item) {
public JMenuItem add(JMenuItem item) { item = popupMenu.add(item);
item = super.add(item);
setupItem(item); setupItem(item);
return item; }
public void addSeparator() {
popupMenu.addSeparator();
} }
private void setupMenu(JMenu menu) { private void setupMenu(JMenu menu) {
@@ -95,7 +115,7 @@ public class ForgeMenu extends JPopupMenu {
public boolean handleKeyEvent(KeyEvent e) { public boolean handleKeyEvent(KeyEvent e) {
JMenuItem item = activeShortcuts.get(KeyStroke.getKeyStrokeForEvent(e)); JMenuItem item = activeShortcuts.get(KeyStroke.getKeyStrokeForEvent(e));
if (item != null) { 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(); item.doClick();
return true; return true;
} }

View File

@@ -12,9 +12,6 @@ import java.awt.event.MouseEvent;
import javax.swing.JPanel; import javax.swing.JPanel;
import javax.swing.SpringLayout; import javax.swing.SpringLayout;
import javax.swing.Timer; import javax.swing.Timer;
import javax.swing.event.PopupMenuEvent;
import javax.swing.event.PopupMenuListener;
import forge.Singletons; import forge.Singletons;
import forge.gui.menus.ForgeMenu; import forge.gui.menus.ForgeMenu;
import forge.gui.toolbox.FButton; 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) { public void showForgeMenu(boolean hideIfAlreadyShown) {
if (!btnForge.isToggled()) { if (!btnForge.isToggled()) {
btnForge.setToggled(true); btnForge.setToggled(true);
forgeMenu.show(this, 1, this.getHeight()); forgeMenu.getPopupMenu().show(this, 1, this.getHeight());
} }
else if (hideIfAlreadyShown) { 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 //setup panel used to reveal navigation bar when hidden
private void setupPnlReveal() { private void setupPnlReveal() {
pnlReveal.setVisible(hidden); pnlReveal.setVisible(hidden);