From e47cdebf144e1b5280a11b8b7d1c8a40d1eedaf8 Mon Sep 17 00:00:00 2001 From: drdev Date: Wed, 8 Jan 2014 04:17:26 +0000 Subject: [PATCH] Prompt to save changes of previous deck before loading another deck --- .../src/main/java/forge/control/FControl.java | 15 ++++++++------- .../main/java/forge/gui/deckeditor/SEditorIO.java | 6 +++++- .../forge/gui/toolbox/special/DeckLister.java | 9 +++++++-- 3 files changed, 20 insertions(+), 10 deletions(-) diff --git a/forge-gui/src/main/java/forge/control/FControl.java b/forge-gui/src/main/java/forge/control/FControl.java index d1d7350267f..2aa51538a9f 100644 --- a/forge-gui/src/main/java/forge/control/FControl.java +++ b/forge-gui/src/main/java/forge/control/FControl.java @@ -268,17 +268,17 @@ public enum FControl implements KeyEventDispatcher { /** * Switches between display screens in top level JFrame. */ - public void setCurrentScreen(FScreen screen) { - setCurrentScreen(screen, false); + public boolean setCurrentScreen(FScreen screen) { + return setCurrentScreen(screen, false); } - public void setCurrentScreen(FScreen screen, boolean previousScreenClosed) { + public boolean setCurrentScreen(FScreen screen, boolean previousScreenClosed) { //TODO: Uncomment the line below if this function stops being used to refresh //the current screen in some places (such as Continue and Restart in the match screen) //if (this.currentScreen == screen) { return; } //give previous screen a chance to perform special switch handling and/or cancel switching away from screen if (this.currentScreen != screen && !Singletons.getView().getNavigationBar().canSwitch(screen)) { - return; + return false; } if (this.currentScreen == FScreen.MATCH_SCREEN) { //hide targeting overlay and reset image if was on match screen @@ -321,16 +321,17 @@ public enum FControl implements KeyEventDispatcher { } Singletons.getView().getNavigationBar().updateSelectedTab(); + return true; } private boolean isMatchBackgroundImageVisible() { return Singletons.getModel().getPreferences().getPrefBoolean(FPref.UI_MATCH_IMAGE_VISIBLE); } - public void ensureScreenActive(FScreen screen) { - if (this.currentScreen == screen) { return; } + public boolean ensureScreenActive(FScreen screen) { + if (this.currentScreen == screen) { return true; } - setCurrentScreen(screen); + return setCurrentScreen(screen); } /** @return List A list of attached keyboard shortcut descriptions and properties. */ diff --git a/forge-gui/src/main/java/forge/gui/deckeditor/SEditorIO.java b/forge-gui/src/main/java/forge/gui/deckeditor/SEditorIO.java index 8bd328f6e62..856729cecc4 100644 --- a/forge-gui/src/main/java/forge/gui/deckeditor/SEditorIO.java +++ b/forge-gui/src/main/java/forge/gui/deckeditor/SEditorIO.java @@ -58,7 +58,11 @@ public class SEditorIO { */ public static boolean confirmSaveChanges(FScreen screen, boolean isClosing) { if (CDeckEditorUI.SINGLETON_INSTANCE.hasChanges()) { - Singletons.getControl().ensureScreenActive(screen); //ensure Deck Editor is active before showing dialog + //ensure Deck Editor is active before showing dialog + if (!Singletons.getControl().ensureScreenActive(screen)) { + return false; + } + final int choice = FOptionPane.showOptionDialog("Save changes to current deck?", "Save Changes?", FOptionPane.QUESTION_ICON, new String[] {"Save", "Don't Save", "Cancel"}); diff --git a/forge-gui/src/main/java/forge/gui/toolbox/special/DeckLister.java b/forge-gui/src/main/java/forge/gui/toolbox/special/DeckLister.java index 4a52b12ef52..ec9de888583 100644 --- a/forge-gui/src/main/java/forge/gui/toolbox/special/DeckLister.java +++ b/forge-gui/src/main/java/forge/gui/toolbox/special/DeckLister.java @@ -39,6 +39,7 @@ import forge.deck.DeckBase; import forge.deck.DeckSection; import forge.game.GameType; import forge.gui.deckeditor.CDeckEditorUI; +import forge.gui.deckeditor.SEditorIO; import forge.gui.deckeditor.controllers.ACEditorBase; import forge.gui.deckeditor.controllers.CEditorLimited; import forge.gui.deckeditor.controllers.CEditorQuest; @@ -454,11 +455,15 @@ public class DeckLister extends JPanel implements ILocalRepaint { default: return; } - - Singletons.getControl().setCurrentScreen(screen); + + if (!Singletons.getControl().ensureScreenActive(screen)) { return; } + if (editorCtrl != null) { CDeckEditorUI.SINGLETON_INSTANCE.setEditorController(editorCtrl); } + + if (!SEditorIO.confirmSaveChanges(screen, true)) { return; } //ensure previous deck on screen is saved if needed + CDeckEditorUI.SINGLETON_INSTANCE.getCurrentEditorController().getDeckController().load(d0.getName()); }