From 4c1f670147b627c9830aad31a8c3468fb0fd855b Mon Sep 17 00:00:00 2001 From: drdev Date: Wed, 9 Oct 2013 05:10:59 +0000 Subject: [PATCH] Set dialog default to Yes when exiting Forge without game active Ensure Deck Editor visible if and when "Save Changes?" dialog would appear --- src/main/java/forge/control/FControl.java | 2 +- .../java/forge/gui/deckeditor/SEditorIO.java | 5 +-- .../java/forge/gui/match/menus/GameMenu.java | 2 +- src/main/java/forge/gui/menus/MenuUtil.java | 4 +-- src/main/java/forge/view/FNavigationBar.java | 31 +++++++++++++------ 5 files changed, 29 insertions(+), 15 deletions(-) diff --git a/src/main/java/forge/control/FControl.java b/src/main/java/forge/control/FControl.java index 1d143d05fff..f01f86c6a3d 100644 --- a/src/main/java/forge/control/FControl.java +++ b/src/main/java/forge/control/FControl.java @@ -140,7 +140,7 @@ public enum FControl implements KeyEventDispatcher { if (this.game != null) { userPrompt = "A game is currently active. " + userPrompt; } - if (!MenuUtil.getUserConfirmation(userPrompt, "Exit Forge")) { + if (!MenuUtil.getUserConfirmation(userPrompt, "Exit Forge", this.game == null)) { //default Yes if no game active return false; } if (!CDeckEditorUI.SINGLETON_INSTANCE.canExit()) { diff --git a/src/main/java/forge/gui/deckeditor/SEditorIO.java b/src/main/java/forge/gui/deckeditor/SEditorIO.java index 8aed070289d..611aadf7cdf 100644 --- a/src/main/java/forge/gui/deckeditor/SEditorIO.java +++ b/src/main/java/forge/gui/deckeditor/SEditorIO.java @@ -4,6 +4,7 @@ import javax.swing.JOptionPane; import org.apache.commons.lang.StringUtils; +import forge.Singletons; import forge.deck.DeckBase; import forge.gui.deckeditor.controllers.DeckController; import forge.gui.deckeditor.views.VCurrentDeck; @@ -82,8 +83,8 @@ public class SEditorIO { */ @SuppressWarnings("unchecked") public static boolean confirmSaveChanges() { - if (!((DeckController) CDeckEditorUI - .SINGLETON_INSTANCE.getCurrentEditorController().getDeckController()).isSaved()) { + if (!((DeckController) CDeckEditorUI.SINGLETON_INSTANCE.getCurrentEditorController().getDeckController()).isSaved()) { + Singletons.getView().getNavigationBar().ensureTabActive(CDeckEditorUI.SINGLETON_INSTANCE); //ensure Deck Editor is active before showing dialog final int choice = JOptionPane.showConfirmDialog(JOptionPane.getRootFrame(), "Save changes to current deck?", "Save Changes?", diff --git a/src/main/java/forge/gui/match/menus/GameMenu.java b/src/main/java/forge/gui/match/menus/GameMenu.java index 3afcf0b8767..b5c6f3a8496 100644 --- a/src/main/java/forge/gui/match/menus/GameMenu.java +++ b/src/main/java/forge/gui/match/menus/GameMenu.java @@ -83,7 +83,7 @@ public final class GameMenu { String userPrompt = "This will end the current game and you will not be able to resume.\n\n" + "Concede anyway?"; - if (MenuUtil.getUserConfirmation(userPrompt, "Concede Game?")) { + if (MenuUtil.getUserConfirmation(userPrompt, "Concede Game?", false)) { controller.concede(); } } diff --git a/src/main/java/forge/gui/menus/MenuUtil.java b/src/main/java/forge/gui/menus/MenuUtil.java index c9586560a5c..0c5e03d79db 100644 --- a/src/main/java/forge/gui/menus/MenuUtil.java +++ b/src/main/java/forge/gui/menus/MenuUtil.java @@ -34,7 +34,7 @@ public final class MenuUtil { return KeyStroke.getKeyStroke(key, DEFAULT_MenuShortcutKeyMask); } - public static boolean getUserConfirmation(String prompt, String dialogTitle) { + public static boolean getUserConfirmation(String prompt, String dialogTitle, boolean defaultYes) { Object[] options = {"Yes", "No"}; int reply = JOptionPane.showOptionDialog( JOptionPane.getRootFrame(), @@ -44,7 +44,7 @@ public final class MenuUtil { JOptionPane.QUESTION_MESSAGE, null, options, - options[1]); + options[defaultYes ? 0 : 1]); return (reply == JOptionPane.YES_OPTION); } diff --git a/src/main/java/forge/view/FNavigationBar.java b/src/main/java/forge/view/FNavigationBar.java index bee71efd6ef..868d4801396 100644 --- a/src/main/java/forge/view/FNavigationBar.java +++ b/src/main/java/forge/view/FNavigationBar.java @@ -101,14 +101,29 @@ public class FNavigationBar extends FTitleBarBase { return tab; } - public void setSelectedTab(INavigationTabData data) { + private NavigationTab getTab(INavigationTabData data) { for (NavigationTab tab : tabs) { if (tab.data == data) { - setSelectedTab(tab); - return; + return tab; } } - setSelectedTab(addNavigationTab(data)); //if tab not found, add and select it + return null; + } + + public void ensureTabActive(INavigationTabData data) { + NavigationTab tab = getTab(data); + if (tab != null && !tab.selected) { + setSelectedTab(tab); + Singletons.getControl().changeStateAutoFixLayout(data.getTabDestScreen(), tab.getText()); + } + } + + public void setSelectedTab(INavigationTabData data) { + NavigationTab tab = getTab(data); + if (tab == null) { + tab = addNavigationTab(data); //if tab not found, add and select it + } + setSelectedTab(tab); } private void setSelectedTab(NavigationTab tab) { @@ -122,11 +137,9 @@ public class FNavigationBar extends FTitleBarBase { } public void closeTab(INavigationTabData data) { - for (NavigationTab tab : tabs) { - if (tab.data == data) { - closeTab(tab); - return; - } + NavigationTab tab = getTab(data); + if (tab != null) { + closeTab(tab); } }