Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 4 additions & 8 deletions forge-gui-desktop/src/main/java/forge/menus/ForgeMenu.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.util.HashMap;
import java.util.List;

import javax.swing.JMenu;
import javax.swing.JMenuItem;
Expand Down Expand Up @@ -63,13 +62,10 @@ public void popupMenuWillBecomeVisible(PopupMenuEvent popupMenuEvent) {}
@Override
public void popupMenuCanceled(PopupMenuEvent popupMenuEvent) {}
});
if (provider != null) {
List<JMenu> menus = provider.getMenus();
if (menus != null) {
for (JMenu m : menus) {
m.setBorderPainted(false);
add(m);
}
if (provider != null && provider.getMenus() != null) {
for (JMenu m : provider.getMenus()) {
m.setBorderPainted(false);
add(m);
}
}
add(new LayoutMenu().getMenu());
Expand Down
159 changes: 82 additions & 77 deletions forge-gui-desktop/src/main/java/forge/menus/LayoutMenu.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@
import java.awt.Image;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.MouseEvent;
import java.util.Set;

import javax.swing.ButtonGroup;
Expand Down Expand Up @@ -32,6 +31,7 @@
import forge.screens.match.VMatchUI;
import forge.screens.match.views.VHand;
import forge.view.arcane.FloatingZone;
import forge.toolbox.FOptionPane;
import forge.toolbox.FButton;
import forge.toolbox.FCheckBox;
import forge.toolbox.FScrollPane;
Expand Down Expand Up @@ -64,49 +64,47 @@ public JMenu getMenu() {
menu.setMnemonic(KeyEvent.VK_L);
if (currentScreen != FScreen.HOME_SCREEN) {
menu.add(getMenu_FileOptions());
menu.add(getMenu_ViewOptions());
}
menu.add(getMenu_ThemeOptions());
if (currentScreen != null && currentScreen.isMatchScreen()) {
menu.addSeparator();
menu.add(getMenu_HandOptions());
menu.add(getMenuItem_ShowBackgroundImage());
}
menu.addSeparator();
menu.add(getMenuItem_FullScreen());
menu.add(getMenuItem_SetWindowSize());
if (currentScreen != FScreen.HOME_SCREEN) {
menu.add(getMenuItem_RevertLayout());
menu.add(getMenuItem_ResetMatchLayout());
}
return menu;
}

private JMenu getMenu_ViewOptions() {
final JMenu menu = new JMenu(localizer.getMessage("lblView"));
menu.add(getMenuItem_ShowTabs());

final JCheckBoxMenuItem newCountItem = createStayOpenCheckBox(
localizer.getMessage("lblNewCardCountInTab"));
newCountItem.setState(prefs.getPrefBoolean(FPref.UI_ZONE_TAB_NEW_COUNT));
newCountItem.addActionListener(e -> {
prefs.setPref(FPref.UI_ZONE_TAB_NEW_COUNT, newCountItem.getState());
prefs.save();
FloatingZone.refreshAll();
refreshHandCards();
});
menu.add(newCountItem);

if (currentScreen != null && currentScreen.isMatchScreen()) {
menu.add(getMenuItem_ShowBackgroundImage());

if (currentScreen != null && currentScreen != FScreen.HOME_SCREEN) {
menu.addSeparator();
menu.add(getMenu_LogPane());
menu.add(getMenuItem_ShowTabs());

menu.addSeparator();
final JMenu layoutMenu = getMenu_MultiplayerFieldLayout();
final JMenu panelsMenu = getMenu_MultiplayerFieldPanels();
menu.add(getMenuItem_SortMultiplayerFields(layoutMenu, panelsMenu));
menu.add(layoutMenu);
menu.add(panelsMenu);
final JCheckBoxMenuItem newCountItem = MenuUtil.createStayOpenCheckBox(
localizer.getMessage("lblNewCardCountInTab"));
newCountItem.setState(prefs.getPrefBoolean(FPref.UI_ZONE_TAB_NEW_COUNT));
newCountItem.addActionListener(e -> {
prefs.setPref(FPref.UI_ZONE_TAB_NEW_COUNT, newCountItem.getState());
prefs.save();
FloatingZone.refreshAll();
refreshHandCards();
});
menu.add(newCountItem);

if (currentScreen.isMatchScreen()) {
menu.addSeparator();
menu.add(getMenu_HandOptions());
menu.add(getMenu_PromptPane());
menu.add(getMenu_LogPane());

// Multiplayer field ordering
menu.addSeparator();
final JMenu layoutMenu = getMenu_MultiplayerFieldLayout();
final JMenu panelsMenu = getMenu_MultiplayerFieldPanels();
menu.add(getMenuItem_SortMultiplayerFields(layoutMenu, panelsMenu));
menu.add(layoutMenu);
menu.add(panelsMenu);
}
}
return menu;
}
Expand Down Expand Up @@ -143,7 +141,7 @@ private static JMenu getMenu_ThemeOptions() {
};

private static JMenuItem getMenuItem_ShowBackgroundImage() {
final JCheckBoxMenuItem menuItem = new JCheckBoxMenuItem(localizer.getMessage("lblBackgroundImage"));
final JCheckBoxMenuItem menuItem = MenuUtil.createStayOpenCheckBox(localizer.getMessage("lblBackgroundImage"));
menuItem.setState(prefs.getPrefBoolean(FPref.UI_MATCH_IMAGE_VISIBLE));
menuItem.addActionListener(getShowBackgroundImageAction(menuItem));
return menuItem;
Expand Down Expand Up @@ -173,7 +171,7 @@ private static JMenu getMenu_HandOptions() {
final JMenu menu = new JMenu(localizer.getMessage("lblHandPanel"));

// Order Hand by CMC and Color
final JCheckBoxMenuItem orderHandItem = createStayOpenCheckBox(localizer.getMessage("nlOrderHand"));
final JCheckBoxMenuItem orderHandItem = MenuUtil.createStayOpenCheckBox(localizer.getMessage("nlOrderHand"));
orderHandItem.setState(prefs.getPrefBoolean(FPref.UI_ORDER_HAND));
orderHandItem.addActionListener(e -> {
prefs.setPref(FPref.UI_ORDER_HAND, orderHandItem.getState());
Expand All @@ -184,7 +182,7 @@ private static JMenu getMenu_HandOptions() {
menu.add(orderHandItem);

// Prevent Card Overlap
final JCheckBoxMenuItem noOverlapItem = createStayOpenCheckBox(localizer.getMessage("lblPreventCardOverlap"));
final JCheckBoxMenuItem noOverlapItem = MenuUtil.createStayOpenCheckBox(localizer.getMessage("lblPreventCardOverlap"));
noOverlapItem.setState(prefs.getPrefBoolean(FPref.UI_HAND_NO_OVERLAP));
noOverlapItem.addActionListener(e -> {
prefs.setPref(FPref.UI_HAND_NO_OVERLAP, noOverlapItem.getState());
Expand All @@ -201,7 +199,7 @@ private static JMenu getMenu_HandOptions() {
final JPanel sliderPanel = new JPanel(new java.awt.BorderLayout());
sliderPanel.setBackground(bg);

final JCheckBoxMenuItem limitItem = createStayOpenCheckBox(localizer.getMessage("lblLimitCardsPerRow"));
final JCheckBoxMenuItem limitItem = MenuUtil.createStayOpenCheckBox(localizer.getMessage("lblLimitCardsPerRow"));
limitItem.setState(limitEnabled);

final FSkin.SkinnedSlider slider = new FSkin.SkinnedSlider(javax.swing.SwingConstants.HORIZONTAL, 4, 12,
Expand Down Expand Up @@ -272,40 +270,10 @@ private static void refreshHandLayout() {
}
}

/** Creates a JCheckBoxMenuItem that stays open on click. */
private static JCheckBoxMenuItem createStayOpenCheckBox(final String text) {
return new JCheckBoxMenuItem(text) {
@Override
protected void processMouseEvent(final MouseEvent e) {
if (e.getID() == MouseEvent.MOUSE_RELEASED && contains(e.getPoint())) {
doClick(0);
setArmed(true);
} else {
super.processMouseEvent(e);
}
}
};
}

/** Creates a JRadioButtonMenuItem that stays open on click. */
private static JRadioButtonMenuItem createStayOpenRadioButton(final String text) {
return new JRadioButtonMenuItem(text) {
@Override
protected void processMouseEvent(final MouseEvent e) {
if (e.getID() == MouseEvent.MOUSE_RELEASED && contains(e.getPoint())) {
doClick(0);
setArmed(true);
} else {
super.processMouseEvent(e);
}
}
};
}

private static JCheckBoxMenuItem getMenuItem_SortMultiplayerFields(
final JMenu layoutMenu, final JMenu panelsMenu) {
final boolean enabled = !"OFF".equals(prefs.getPref(FPref.UI_MULTIPLAYER_FIELD_LAYOUT));
final JCheckBoxMenuItem menuItem = createStayOpenCheckBox(
final JCheckBoxMenuItem menuItem = MenuUtil.createStayOpenCheckBox(
localizer.getMessage("lblSortMultiplayerFields"));
menuItem.setToolTipText(localizer.getMessage("lblSortMultiplayerFieldsTooltip"));
menuItem.setState(enabled);
Expand All @@ -332,7 +300,7 @@ private static JMenu getMenu_MultiplayerFieldLayout() {
final String[] tooltipKeys = {"lblFieldLayoutGridTooltip", "lblFieldLayoutRowsTooltip"};

for (int i = 0; i < values.length; i++) {
final JRadioButtonMenuItem item = createStayOpenRadioButton(
final JRadioButtonMenuItem item = MenuUtil.createStayOpenRadioButton(
localizer.getMessage(labelKeys[i]));
item.setToolTipText(localizer.getMessage(tooltipKeys[i]));
item.setSelected(values[i].equals(current));
Expand All @@ -358,7 +326,7 @@ private static JMenu getMenu_MultiplayerFieldPanels() {
final String[] tooltipKeys = {"lblFieldPanelsTabbedTooltip", "lblFieldPanelsSplitTooltip"};

for (int i = 0; i < values.length; i++) {
final JRadioButtonMenuItem item = createStayOpenRadioButton(
final JRadioButtonMenuItem item = MenuUtil.createStayOpenRadioButton(
localizer.getMessage(labelKeys[i]));
item.setToolTipText(localizer.getMessage(tooltipKeys[i]));
item.setSelected(values[i].equals(current));
Expand All @@ -384,14 +352,27 @@ private static void relayoutMatchFields() {
}
}

private static JMenu getMenu_PromptPane() {
final JMenu menu = new JMenu(localizer.getMessage("lblPromptPanel"));
MenuUtil.addPrefCheckBox(menu, localizer.getMessage("cbCompactPrompt"), FPref.UI_COMPACT_PROMPT)
.addActionListener(e -> repopulatePrompt());
MenuUtil.addPrefCheckBox(menu, localizer.getMessage("lblShowSpellDescription"), FPref.UI_DETAILED_SPELLDESC_IN_PROMPT);
MenuUtil.addPrefCheckBox(menu, localizer.getMessage("cbHideReminderText"), FPref.UI_HIDE_REMINDER_TEXT);
MenuUtil.addPrefCheckBox(menu, localizer.getMessage("lblShowStormCount"), FPref.UI_SHOW_STORM_COUNT_IN_PROMPT);
MenuUtil.addPrefCheckBox(menu, localizer.getMessage("cbRemindOnPriority"), FPref.UI_REMIND_ON_PRIORITY);
return menu;
}

private static JMenu getMenu_LogPane() {
final JMenu menu = new JMenu(localizer.getMessage("lblLogPanel"));
final ButtonGroup group = new ButtonGroup();
final GameLogVerbosity currentVerbosity = GameLogVerbosity.fromString(prefs.getPref(FPref.DEV_LOG_ENTRY_TYPE));

MenuUtil.addPrefCheckBox(menu, localizer.getMessage("lblLogShowCardImages"), FPref.UI_LOG_SHOW_CARD_IMAGES)
.addActionListener(e -> refreshLog());
menu.addSeparator();

// Detail Level sub-submenu
final JMenu detailMenu = new JMenu(localizer.getMessage("lblDetailLevel"));
final ButtonGroup group = new ButtonGroup();

// Custom Categories menu item (declared early so radio button listeners can reference it)
final JMenuItem customItem = new JMenuItem(localizer.getMessage("lblCustomCategories") + "...");
Expand All @@ -413,7 +394,7 @@ private static JMenu getMenu_LogPane() {
refreshLog();
});
group.add(item);
menu.add(item);
detailMenu.add(item);
}

// Custom radio button
Expand All @@ -428,12 +409,13 @@ private static JMenu getMenu_LogPane() {
refreshLog();
});
group.add(customRadio);
menu.add(customRadio);
detailMenu.add(customRadio);

// Separator + Custom Categories dialog item
menu.addSeparator();
menu.add(customItem);
// Custom Categories dialog item
detailMenu.addSeparator();
detailMenu.add(customItem);

menu.add(detailMenu);
return menu;
}

Expand All @@ -447,6 +429,16 @@ private static void refreshLog() {
}
}

private static void repopulatePrompt() {
final FScreen screen = Singletons.getControl().getCurrentScreen();
if (screen != null && screen.isMatchScreen()) {
final IVTopLevelUI view = screen.getView();
if (view instanceof VMatchUI) {
((VMatchUI) view).getControl().repopulatePrompt();
}
}
}

public static void showCustomLogCategoriesDialog() {
final FDialog dlg = new FDialog();
dlg.setTitle(localizer.getMessage("lblCustomLogSettings"));
Expand Down Expand Up @@ -483,7 +475,7 @@ public static void showCustomLogCategoriesDialog() {
}

private static JMenuItem getMenuItem_ShowTabs() {
final JCheckBoxMenuItem menuItem = new JCheckBoxMenuItem(localizer.getMessage("lblPanelTabs"));
final JCheckBoxMenuItem menuItem = MenuUtil.createStayOpenCheckBox(localizer.getMessage("lblPanelTabs"));
final KeyStroke ks = KeyboardShortcuts.getKeyStrokeForPref(FPref.SHORTCUT_PANELTABS);
if (ks != null) { menuItem.setAccelerator(ks); }
menuItem.setState(!prefs.getPrefBoolean(FPref.UI_HIDE_GAME_TABS));
Expand Down Expand Up @@ -532,6 +524,19 @@ private static ActionListener getRevertLayoutAction() {
return e -> SLayoutIO.revertLayout();
}

private static JMenuItem getMenuItem_ResetMatchLayout() {
final JMenuItem menuItem = new JMenuItem(localizer.getMessage("btnDeleteMatchUI"));
menuItem.addActionListener(e -> {
final String userPrompt = localizer.getMessage("AresetMatchScreenLayout");
if (FOptionPane.showConfirmDialog(userPrompt, localizer.getMessage("TresetMatchScreenLayout"))) {
if (FScreen.deleteMatchLayoutFile()) {
FOptionPane.showMessageDialog(localizer.getMessage("OKresetMatchScreenLayout"));
}
}
});
return menuItem;
}

private static JMenuItem getMenuItem_SetWindowSize() {
final JMenuItem menuItem = new JMenuItem(localizer.getMessage("lblSetWindowSize"));
menuItem.addActionListener(getSetWindowSizeAction());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -660,6 +660,10 @@ public void initialize() {
public void update() {
}

public void repopulatePrompt() {
getCPrompt().getView().populate();
}

public void refreshLog() {
cLog.getView().refreshDisplay();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,22 +7,25 @@
import com.google.common.collect.Lists;

import forge.localinstance.properties.ForgePreferences;
import forge.menus.IMenuProvider;
import forge.screens.match.CMatchUI;

/**
* Gets the menus associated with the Game screen.
*
*/
public class CMatchUIMenus {
public class CMatchUIMenus implements IMenuProvider {

private final CMatchUI matchUI;
public CMatchUIMenus(final CMatchUI matchUI) {
this.matchUI = matchUI;
}

@Override
public List<JMenu> getMenus() {
final List<JMenu> menus = Lists.newArrayListWithCapacity(2);
final List<JMenu> menus = Lists.newArrayListWithCapacity(3);
menus.add(new GameMenu(matchUI).getMenu());
menus.add(new DisplayMenu(matchUI).getMenu());
if (ForgePreferences.DEV_MODE) {
menus.add(new DevModeMenu(matchUI.getCDev()).getMenu());
}
Expand Down
Loading