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/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

View File

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

View File

@@ -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<Boolean> canSwitchCallback) {
canSwitchCallback.run(true);
}
public boolean onClose(boolean canCancel) {
return true;
public void onClose(Callback<Boolean> canCloseCallback) {
if (canCloseCallback != null) { //will be null if app exited
canCloseCallback.run(true);
}
}
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;
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));
}
});
}
});
}

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.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<Boolean> canCloseCallback) {
FControl.writeMatchPreferences();
return true;
super.onClose(canCloseCallback);
}
@Override