Create drafting process screen and prevent leaving it without user being prompted

This commit is contained in:
drdev
2014-06-07 05:06:59 +00:00
parent 354b861d14
commit 233d6a99c0
9 changed files with 129 additions and 17 deletions

4
.gitattributes vendored
View File

@@ -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/TabPageScreen.java -text
forge-gui-mobile/src/forge/screens/constructed/AvatarSelector.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/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/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/gauntlet/GauntletScreen.java -text
forge-gui-mobile/src/forge/screens/home/HomeScreen.java -text forge-gui-mobile/src/forge/screens/home/HomeScreen.java -text
forge-gui-mobile/src/forge/screens/match/FControl.java -text forge-gui-mobile/src/forge/screens/match/FControl.java -text

View File

@@ -145,12 +145,16 @@ public class Forge implements ApplicationListener {
exit(); //prompt to exit if attempting to go back from home screen exit(); //prompt to exit if attempting to go back from home screen
return; return;
} }
if (!currentScreen.onClose(true)) { currentScreen.onClose(new Callback<Boolean>() {
return; @Override
} public void run(Boolean result) {
if (result) {
screens.pop(); screens.pop();
setCurrentScreen(screens.lastElement()); setCurrentScreen(screens.lastElement());
} }
}
});
}
public static void exit() { public static void exit() {
FOptionPane.showConfirmDialog("Are you sure you wish to exit Forge?", "Exit Forge", "Exit", "Cancel", new Callback<Boolean>() { FOptionPane.showConfirmDialog("Are you sure you wish to exit Forge?", "Exit Forge", "Exit", "Cancel", new Callback<Boolean>() {
@@ -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 == screen0) { return; }
if (currentScreen != null && !currentScreen.onSwitchAway()) {
return; if (currentScreen == null) {
}
screens.push(screen0); screens.push(screen0);
setCurrentScreen(screen0); setCurrentScreen(screen0);
return;
}
currentScreen.onSwitchAway(new Callback<Boolean>() {
@Override
public void run(Boolean result) {
if (result) {
screens.push(screen0);
setCurrentScreen(screen0);
}
}
});
} }
public static FScreen getCurrentScreen() { public static FScreen getCurrentScreen() {
@@ -256,7 +271,7 @@ public class Forge implements ApplicationListener {
overlay.hide(); overlay.hide();
overlay = FOverlay.getTopOverlay(); overlay = FOverlay.getTopOverlay();
} }
currentScreen.onClose(false); currentScreen.onClose(null);
currentScreen = null; currentScreen = null;
} }
screens.clear(); screens.clear();

View File

@@ -15,6 +15,7 @@ import forge.toolbox.FContainer;
import forge.toolbox.FEvent; import forge.toolbox.FEvent;
import forge.toolbox.FEvent.FEventHandler; import forge.toolbox.FEvent.FEventHandler;
import forge.toolbox.FLabel; import forge.toolbox.FLabel;
import forge.util.Callback;
import forge.util.Utils; import forge.util.Utils;
public abstract class FScreen extends FContainer { public abstract class FScreen extends FContainer {
@@ -45,12 +46,14 @@ public abstract class FScreen extends FContainer {
public void onActivate() { public void onActivate() {
} }
public boolean onSwitchAway() { public void onSwitchAway(Callback<Boolean> canSwitchCallback) {
return true; canSwitchCallback.run(true);
} }
public boolean onClose(boolean canCancel) { public void onClose(Callback<Boolean> canCloseCallback) {
return true; if (canCloseCallback != null) { //will be null if app exited
canCloseCallback.run(true);
}
} }
public void showMenu() { public void showMenu() {

View File

@@ -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) {
}
}

View File

@@ -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) {
}
}

View File

@@ -1,5 +1,7 @@
package forge.screens.draft; package forge.screens.draft;
import forge.FThreads;
import forge.Forge;
import forge.GuiBase; import forge.GuiBase;
import forge.properties.ForgePreferences.FPref; import forge.properties.ForgePreferences.FPref;
import forge.screens.LaunchScreen; import forge.screens.LaunchScreen;
@@ -52,8 +54,15 @@ public class DraftScreen extends LaunchScreen {
final LimitedPoolType poolType = SGuiChoose.oneOrNone("Choose Draft Format", LimitedPoolType.values()); final LimitedPoolType poolType = SGuiChoose.oneOrNone("Choose Draft Format", LimitedPoolType.values());
if (poolType == null) { return; } if (poolType == null) { return; }
BoosterDraft draft = BoosterDraft.createDraft(poolType); final BoosterDraft draft = BoosterDraft.createDraft(poolType);
if (draft == null) { return; } if (draft == null) { return; }
FThreads.invokeInEdtLater(new Runnable() {
@Override
public void run() {
Forge.openScreen(new DraftingProcessScreen(draft));
}
});
} }
}); });
} }

View File

@@ -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) {
}
}

View File

@@ -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<Boolean> 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);
}
}

View File

@@ -36,6 +36,7 @@ import forge.game.zone.ZoneType;
import forge.toolbox.FEvent; import forge.toolbox.FEvent;
import forge.toolbox.FEvent.FEventHandler; import forge.toolbox.FEvent.FEventHandler;
import forge.toolbox.FScrollPane; import forge.toolbox.FScrollPane;
import forge.util.Callback;
public class MatchScreen extends FScreen { public class MatchScreen extends FScreen {
public static FSkinColor BORDER_COLOR = FSkinColor.get(Colors.CLR_BORDERS); public static FSkinColor BORDER_COLOR = FSkinColor.get(Colors.CLR_BORDERS);
@@ -117,9 +118,9 @@ public class MatchScreen extends FScreen {
} }
@Override @Override
public boolean onClose(boolean canCancel) { public void onClose(Callback<Boolean> canCloseCallback) {
FControl.writeMatchPreferences(); FControl.writeMatchPreferences();
return true; super.onClose(canCloseCallback);
} }
@Override @Override