mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-17 03:08:02 +00:00
Fix so Forge menu items update from skin change properly
This commit is contained in:
@@ -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) {
|
||||
|
||||
@@ -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,16 +31,22 @@ 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;
|
||||
refresh();
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user