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;
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) {

View File

@@ -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<KeyStroke, JMenuItem> activeShortcuts = new HashMap<KeyStroke, JMenuItem>();
@@ -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<JMenu> 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;
}

View File

@@ -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);