From 233d6a99c01c82e9857d436d808b4301e322aab8 Mon Sep 17 00:00:00 2001 From: drdev Date: Sat, 7 Jun 2014 05:06:59 +0000 Subject: [PATCH] Create drafting process screen and prevent leaving it without user being prompted --- .gitattributes | 4 +++ forge-gui-mobile/src/forge/Forge.java | 35 +++++++++++++------ .../src/forge/screens/FScreen.java | 11 +++--- .../forge/screens/draft/CurrentPackPage.java | 19 ++++++++++ .../forge/screens/draft/DraftDeckPage.java | 19 ++++++++++ .../src/forge/screens/draft/DraftScreen.java | 11 +++++- .../screens/draft/DraftSideboardPage.java | 19 ++++++++++ .../screens/draft/DraftingProcessScreen.java | 23 ++++++++++++ .../src/forge/screens/match/MatchScreen.java | 5 +-- 9 files changed, 129 insertions(+), 17 deletions(-) create mode 100644 forge-gui-mobile/src/forge/screens/draft/CurrentPackPage.java create mode 100644 forge-gui-mobile/src/forge/screens/draft/DraftDeckPage.java create mode 100644 forge-gui-mobile/src/forge/screens/draft/DraftSideboardPage.java create mode 100644 forge-gui-mobile/src/forge/screens/draft/DraftingProcessScreen.java diff --git a/.gitattributes b/.gitattributes index 9f60c278e14..f9755478a74 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1164,7 +1164,11 @@ forge-gui-mobile/src/forge/screens/SplashScreen.java -text forge-gui-mobile/src/forge/screens/TabPageScreen.java -text forge-gui-mobile/src/forge/screens/constructed/AvatarSelector.java -text forge-gui-mobile/src/forge/screens/constructed/ConstructedScreen.java -text +forge-gui-mobile/src/forge/screens/draft/CurrentPackPage.java -text +forge-gui-mobile/src/forge/screens/draft/DraftDeckPage.java -text forge-gui-mobile/src/forge/screens/draft/DraftScreen.java -text +forge-gui-mobile/src/forge/screens/draft/DraftSideboardPage.java -text +forge-gui-mobile/src/forge/screens/draft/DraftingProcessScreen.java -text forge-gui-mobile/src/forge/screens/gauntlet/GauntletScreen.java -text forge-gui-mobile/src/forge/screens/home/HomeScreen.java -text forge-gui-mobile/src/forge/screens/match/FControl.java -text diff --git a/forge-gui-mobile/src/forge/Forge.java b/forge-gui-mobile/src/forge/Forge.java index f4625ac6edf..7475f997ab3 100644 --- a/forge-gui-mobile/src/forge/Forge.java +++ b/forge-gui-mobile/src/forge/Forge.java @@ -145,11 +145,15 @@ public class Forge implements ApplicationListener { exit(); //prompt to exit if attempting to go back from home screen return; } - if (!currentScreen.onClose(true)) { - return; - } - screens.pop(); - setCurrentScreen(screens.lastElement()); + currentScreen.onClose(new Callback() { + @Override + public void run(Boolean result) { + if (result) { + screens.pop(); + setCurrentScreen(screens.lastElement()); + } + } + }); } public static void exit() { @@ -163,13 +167,24 @@ public class Forge implements ApplicationListener { }); } - public static void openScreen(FScreen screen0) { + public static void openScreen(final FScreen screen0) { if (currentScreen == screen0) { return; } - if (currentScreen != null && !currentScreen.onSwitchAway()) { + + if (currentScreen == null) { + screens.push(screen0); + setCurrentScreen(screen0); return; } - screens.push(screen0); - setCurrentScreen(screen0); + + currentScreen.onSwitchAway(new Callback() { + @Override + public void run(Boolean result) { + if (result) { + screens.push(screen0); + setCurrentScreen(screen0); + } + } + }); } public static FScreen getCurrentScreen() { @@ -256,7 +271,7 @@ public class Forge implements ApplicationListener { overlay.hide(); overlay = FOverlay.getTopOverlay(); } - currentScreen.onClose(false); + currentScreen.onClose(null); currentScreen = null; } screens.clear(); diff --git a/forge-gui-mobile/src/forge/screens/FScreen.java b/forge-gui-mobile/src/forge/screens/FScreen.java index 13ad17364d8..77db6fa4658 100644 --- a/forge-gui-mobile/src/forge/screens/FScreen.java +++ b/forge-gui-mobile/src/forge/screens/FScreen.java @@ -15,6 +15,7 @@ import forge.toolbox.FContainer; import forge.toolbox.FEvent; import forge.toolbox.FEvent.FEventHandler; import forge.toolbox.FLabel; +import forge.util.Callback; import forge.util.Utils; public abstract class FScreen extends FContainer { @@ -45,12 +46,14 @@ public abstract class FScreen extends FContainer { public void onActivate() { } - public boolean onSwitchAway() { - return true; + public void onSwitchAway(Callback canSwitchCallback) { + canSwitchCallback.run(true); } - public boolean onClose(boolean canCancel) { - return true; + public void onClose(Callback canCloseCallback) { + if (canCloseCallback != null) { //will be null if app exited + canCloseCallback.run(true); + } } public void showMenu() { diff --git a/forge-gui-mobile/src/forge/screens/draft/CurrentPackPage.java b/forge-gui-mobile/src/forge/screens/draft/CurrentPackPage.java new file mode 100644 index 00000000000..137cef5e202 --- /dev/null +++ b/forge-gui-mobile/src/forge/screens/draft/CurrentPackPage.java @@ -0,0 +1,19 @@ +package forge.screens.draft; + +import forge.assets.FSkinImage; +import forge.limited.BoosterDraft; +import forge.screens.TabPageScreen.TabPage; + +public class CurrentPackPage extends TabPage { + private final BoosterDraft draft; + + protected CurrentPackPage(BoosterDraft draft0) { + super("Pack 1", FSkinImage.PACK); + + draft = draft0; + } + + @Override + protected void doLayout(float width, float height) { + } +} diff --git a/forge-gui-mobile/src/forge/screens/draft/DraftDeckPage.java b/forge-gui-mobile/src/forge/screens/draft/DraftDeckPage.java new file mode 100644 index 00000000000..150619f4c99 --- /dev/null +++ b/forge-gui-mobile/src/forge/screens/draft/DraftDeckPage.java @@ -0,0 +1,19 @@ +package forge.screens.draft; + +import forge.assets.FSkinImage; +import forge.limited.BoosterDraft; +import forge.screens.TabPageScreen.TabPage; + +public class DraftDeckPage extends TabPage { + private final BoosterDraft draft; + + protected DraftDeckPage(BoosterDraft draft0) { + super("Deck", FSkinImage.DECKLIST); + + draft = draft0; + } + + @Override + protected void doLayout(float width, float height) { + } +} diff --git a/forge-gui-mobile/src/forge/screens/draft/DraftScreen.java b/forge-gui-mobile/src/forge/screens/draft/DraftScreen.java index 268f4d64248..f80e14c00ba 100644 --- a/forge-gui-mobile/src/forge/screens/draft/DraftScreen.java +++ b/forge-gui-mobile/src/forge/screens/draft/DraftScreen.java @@ -1,5 +1,7 @@ package forge.screens.draft; +import forge.FThreads; +import forge.Forge; import forge.GuiBase; import forge.properties.ForgePreferences.FPref; import forge.screens.LaunchScreen; @@ -52,8 +54,15 @@ public class DraftScreen extends LaunchScreen { final LimitedPoolType poolType = SGuiChoose.oneOrNone("Choose Draft Format", LimitedPoolType.values()); if (poolType == null) { return; } - BoosterDraft draft = BoosterDraft.createDraft(poolType); + final BoosterDraft draft = BoosterDraft.createDraft(poolType); if (draft == null) { return; } + + FThreads.invokeInEdtLater(new Runnable() { + @Override + public void run() { + Forge.openScreen(new DraftingProcessScreen(draft)); + } + }); } }); } diff --git a/forge-gui-mobile/src/forge/screens/draft/DraftSideboardPage.java b/forge-gui-mobile/src/forge/screens/draft/DraftSideboardPage.java new file mode 100644 index 00000000000..962aabac82e --- /dev/null +++ b/forge-gui-mobile/src/forge/screens/draft/DraftSideboardPage.java @@ -0,0 +1,19 @@ +package forge.screens.draft; + +import forge.assets.FSkinImage; +import forge.limited.BoosterDraft; +import forge.screens.TabPageScreen.TabPage; + +public class DraftSideboardPage extends TabPage { + private final BoosterDraft draft; + + protected DraftSideboardPage(BoosterDraft draft0) { + super("Sideboard", FSkinImage.FLASHBACK); + + draft = draft0; + } + + @Override + protected void doLayout(float width, float height) { + } +} diff --git a/forge-gui-mobile/src/forge/screens/draft/DraftingProcessScreen.java b/forge-gui-mobile/src/forge/screens/draft/DraftingProcessScreen.java new file mode 100644 index 00000000000..8aa94f244ad --- /dev/null +++ b/forge-gui-mobile/src/forge/screens/draft/DraftingProcessScreen.java @@ -0,0 +1,23 @@ +package forge.screens.draft; + +import forge.limited.BoosterDraft; +import forge.screens.TabPageScreen; +import forge.toolbox.FOptionPane; +import forge.util.Callback; + +public class DraftingProcessScreen extends TabPageScreen { + public DraftingProcessScreen(BoosterDraft draft0) { + super(new TabPage[] { + new CurrentPackPage(draft0), + new DraftDeckPage(draft0), + new DraftSideboardPage(draft0) + }); + } + + @Override + public void onClose(Callback canCloseCallback) { + if (canCloseCallback == null) { return; } + FOptionPane.showConfirmDialog("This will end the current draft and you will not be able to resume.\n\n" + + "Leave anyway?", "Leave Draft?", "Leave", "Cancel", false, canCloseCallback); + } +} diff --git a/forge-gui-mobile/src/forge/screens/match/MatchScreen.java b/forge-gui-mobile/src/forge/screens/match/MatchScreen.java index 45e7b9a7cf2..af9e02980c4 100644 --- a/forge-gui-mobile/src/forge/screens/match/MatchScreen.java +++ b/forge-gui-mobile/src/forge/screens/match/MatchScreen.java @@ -36,6 +36,7 @@ import forge.game.zone.ZoneType; import forge.toolbox.FEvent; import forge.toolbox.FEvent.FEventHandler; import forge.toolbox.FScrollPane; +import forge.util.Callback; public class MatchScreen extends FScreen { public static FSkinColor BORDER_COLOR = FSkinColor.get(Colors.CLR_BORDERS); @@ -117,9 +118,9 @@ public class MatchScreen extends FScreen { } @Override - public boolean onClose(boolean canCancel) { + public void onClose(Callback canCloseCallback) { FControl.writeMatchPreferences(); - return true; + super.onClose(canCloseCallback); } @Override