mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-14 09:48:02 +00:00
@@ -639,13 +639,10 @@ public class Forge implements ApplicationListener {
|
|||||||
return;
|
return;
|
||||||
} //don't allow exiting multiple times
|
} //don't allow exiting multiple times
|
||||||
|
|
||||||
Callback<Boolean> callback = new Callback<Boolean>() {
|
Callback<Boolean> callback = result -> {
|
||||||
@Override
|
if (result) {
|
||||||
public void run(Boolean result) {
|
exited = true;
|
||||||
if (result) {
|
exitAnimation(true);
|
||||||
exited = true;
|
|
||||||
exitAnimation(true);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -668,13 +665,10 @@ public class Forge implements ApplicationListener {
|
|||||||
options.add(getLocalizer().getMessage("lblExit"));
|
options.add(getLocalizer().getMessage("lblExit"));
|
||||||
options.add(getLocalizer().getMessage("lblCancel"));
|
options.add(getLocalizer().getMessage("lblCancel"));
|
||||||
|
|
||||||
Callback<Integer> callback = new Callback<Integer>() {
|
Callback<Integer> callback = result -> {
|
||||||
@Override
|
if (result == 0) {
|
||||||
public void run(Integer result) {
|
exited = true;
|
||||||
if (result == 0) {
|
exitAnimation(false);
|
||||||
exited = true;
|
|
||||||
exitAnimation(false);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -701,30 +695,27 @@ public class Forge implements ApplicationListener {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
currentScreen.onSwitchAway(new Callback<Boolean>() {
|
currentScreen.onSwitchAway(result -> {
|
||||||
@Override
|
if (result) {
|
||||||
public void run(Boolean result) {
|
if (replaceBackScreen && !Dscreens.isEmpty()) {
|
||||||
if (result) {
|
Dscreens.removeFirst();
|
||||||
if (replaceBackScreen && !Dscreens.isEmpty()) {
|
}
|
||||||
Dscreens.removeFirst();
|
if (Dscreens.peekFirst() != screen0) { //prevent screen being its own back screen
|
||||||
}
|
Dscreens.addFirst(screen0);
|
||||||
if (Dscreens.peekFirst() != screen0) { //prevent screen being its own back screen
|
}
|
||||||
Dscreens.addFirst(screen0);
|
setCurrentScreen(screen0);
|
||||||
}
|
if (screen0 instanceof MatchScreen) {
|
||||||
setCurrentScreen(screen0);
|
//set cursor for classic mode
|
||||||
if (screen0 instanceof MatchScreen) {
|
if (!isMobileAdventureMode) {
|
||||||
//set cursor for classic mode
|
if (magnifyToggle) {
|
||||||
if (!isMobileAdventureMode) {
|
setCursor(FSkin.getCursor().get(1), "1");
|
||||||
if (magnifyToggle) {
|
} else {
|
||||||
setCursor(FSkin.getCursor().get(1), "1");
|
setCursor(FSkin.getCursor().get(2), "2");
|
||||||
} else {
|
|
||||||
setCursor(FSkin.getCursor().get(2), "2");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
deltaTime = 0f;
|
|
||||||
hueFragTime = 0f;
|
|
||||||
}
|
}
|
||||||
|
deltaTime = 0f;
|
||||||
|
hueFragTime = 0f;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -295,13 +295,10 @@ public class AdventureDeckEditor extends FDeckEditor {
|
|||||||
if(toSell.isEmpty())
|
if(toSell.isEmpty())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
FOptionPane.showConfirmDialog(Forge.getLocalizer().getMessage("lblSellAllConfirm", toSell.countAll(), value), Forge.getLocalizer().getMessage("lblSellCurrentFilters"), Forge.getLocalizer().getMessage("lblSell"), Forge.getLocalizer().getMessage("lblCancel"), false, new Callback<>() {
|
FOptionPane.showConfirmDialog(Forge.getLocalizer().getMessage("lblSellAllConfirm", toSell.countAll(), value), Forge.getLocalizer().getMessage("lblSellCurrentFilters"), Forge.getLocalizer().getMessage("lblSell"), Forge.getLocalizer().getMessage("lblCancel"), false, result -> {
|
||||||
@Override
|
if (result) {
|
||||||
public void run(Boolean result) {
|
Current.player().doBulkSell(toSell);
|
||||||
if (result) {
|
refresh();
|
||||||
Current.player().doBulkSell(toSell);
|
|
||||||
refresh();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -423,12 +420,9 @@ public class AdventureDeckEditor extends FDeckEditor {
|
|||||||
if(toMove.isEmpty())
|
if(toMove.isEmpty())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
FOptionPane.showConfirmDialog(Forge.getLocalizer().getMessage("lblAutoSellCurrentFiltersConfirm", toMove.countAll()), Forge.getLocalizer().getMessage("lblAutoSellCurrentFilters"), Forge.getLocalizer().getMessage("lblAutoSell"), Forge.getLocalizer().getMessage("lblCancel"), false, new Callback<>() {
|
FOptionPane.showConfirmDialog(Forge.getLocalizer().getMessage("lblAutoSellCurrentFiltersConfirm", toMove.countAll()), Forge.getLocalizer().getMessage("lblAutoSellCurrentFilters"), Forge.getLocalizer().getMessage("lblAutoSell"), Forge.getLocalizer().getMessage("lblCancel"), false, result -> {
|
||||||
@Override
|
if (result) {
|
||||||
public void run(Boolean result) {
|
moveCards(toMove, autoSellPage);
|
||||||
if (result) {
|
|
||||||
moveCards(toMove, autoSellPage);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -823,12 +817,7 @@ public class AdventureDeckEditor extends FDeckEditor {
|
|||||||
|
|
||||||
Localizer localizer = Forge.getLocalizer();
|
Localizer localizer = Forge.getLocalizer();
|
||||||
if (isDrafting()) {
|
if (isDrafting()) {
|
||||||
FOptionPane.showConfirmDialog(localizer.getMessage("lblEndAdventureEventConfirm"), localizer.getMessage("lblLeaveDraft"), localizer.getMessage("lblLeave"), localizer.getMessage("lblCancel"), false, new Callback<>() {
|
FOptionPane.showConfirmDialog(localizer.getMessage("lblEndAdventureEventConfirm"), localizer.getMessage("lblLeaveDraft"), localizer.getMessage("lblLeave"), localizer.getMessage("lblCancel"), false, result -> resolveClose(canCloseCallback, result == true));
|
||||||
@Override
|
|
||||||
public void run(Boolean result) {
|
|
||||||
resolveClose(canCloseCallback, result == true);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
else if(getEditorConfig().isLimited() || getDeck().isEmpty()) {
|
else if(getEditorConfig().isLimited() || getDeck().isEmpty()) {
|
||||||
@@ -840,12 +829,7 @@ public class AdventureDeckEditor extends FDeckEditor {
|
|||||||
if (deckError != null) {
|
if (deckError != null) {
|
||||||
//Allow the player to close the editor with an invalid deck, but warn them that cards may be swapped out.
|
//Allow the player to close the editor with an invalid deck, but warn them that cards may be swapped out.
|
||||||
String warning = localizer.getMessage("lblAdventureDeckError", deckError);
|
String warning = localizer.getMessage("lblAdventureDeckError", deckError);
|
||||||
FOptionPane.showConfirmDialog(warning, localizer.getMessage("lblInvalidDeck"), false, new Callback<>() {
|
FOptionPane.showConfirmDialog(warning, localizer.getMessage("lblInvalidDeck"), false, result -> resolveClose(canCloseCallback, result == true));
|
||||||
@Override
|
|
||||||
public void run(Boolean result) {
|
|
||||||
resolveClose(canCloseCallback, result == true);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -39,7 +39,6 @@ import forge.sound.MusicPlaylist;
|
|||||||
import forge.toolbox.FOptionPane;
|
import forge.toolbox.FOptionPane;
|
||||||
import forge.trackable.TrackableCollection;
|
import forge.trackable.TrackableCollection;
|
||||||
import forge.util.Aggregates;
|
import forge.util.Aggregates;
|
||||||
import forge.util.Callback;
|
|
||||||
import org.apache.commons.lang3.tuple.Pair;
|
import org.apache.commons.lang3.tuple.Pair;
|
||||||
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
@@ -153,12 +152,9 @@ public class DuelScene extends ForgeScene {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private FOptionPane createFOption(String message, String title, FBufferedImage icon, Runnable runnable) {
|
private FOptionPane createFOption(String message, String title, FBufferedImage icon, Runnable runnable) {
|
||||||
return new FOptionPane(message, null, title, icon, null, ImmutableList.of(Forge.getLocalizer().getMessage("lblOK")), -1, new Callback<Integer>() {
|
return new FOptionPane(message, null, title, icon, null, ImmutableList.of(Forge.getLocalizer().getMessage("lblOK")), -1, result -> {
|
||||||
@Override
|
if (runnable != null)
|
||||||
public void run(Integer result) {
|
runnable.run();
|
||||||
if (runnable != null)
|
|
||||||
runnable.run();
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -29,7 +29,6 @@ import forge.adventure.world.WorldSave;
|
|||||||
import forge.deck.Deck;
|
import forge.deck.Deck;
|
||||||
import forge.gui.FThreads;
|
import forge.gui.FThreads;
|
||||||
import forge.screens.TransitionScreen;
|
import forge.screens.TransitionScreen;
|
||||||
import forge.util.Callback;
|
|
||||||
import forge.util.MyRandom;
|
import forge.util.MyRandom;
|
||||||
|
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
@@ -124,26 +123,17 @@ public class EventScene extends MenuScene implements IAfterMatch {
|
|||||||
//todo: add translation
|
//todo: add translation
|
||||||
decline.name = "Do not enter event";
|
decline.name = "Do not enter event";
|
||||||
|
|
||||||
enterWithCoin.callback = new Callback<Boolean>() {
|
enterWithCoin.callback = (result) -> {
|
||||||
@Override
|
currentEvent.eventStatus = AdventureEventController.EventStatus.Entered;
|
||||||
public void run(Boolean result) {
|
refresh();
|
||||||
currentEvent.eventStatus = AdventureEventController.EventStatus.Entered;
|
|
||||||
refresh();
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
enterWithShards.callback = new Callback<Boolean>() {
|
enterWithShards.callback = (result) -> {
|
||||||
@Override
|
currentEvent.eventStatus = AdventureEventController.EventStatus.Entered;
|
||||||
public void run(Boolean result) {
|
refresh();
|
||||||
currentEvent.eventStatus = AdventureEventController.EventStatus.Entered;
|
|
||||||
refresh();
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
enterWithGold.callback = new Callback<Boolean>() {
|
enterWithGold.callback = (result) -> {
|
||||||
@Override
|
currentEvent.eventStatus = AdventureEventController.EventStatus.Entered;
|
||||||
public void run(Boolean result) {
|
refresh();
|
||||||
currentEvent.eventStatus = AdventureEventController.EventStatus.Entered;
|
|
||||||
refresh();
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
introDialog.options = new DialogData[4];
|
introDialog.options = new DialogData[4];
|
||||||
|
|||||||
@@ -10,7 +10,6 @@ import forge.localinstance.properties.ForgePreferences;
|
|||||||
import forge.model.FModel;
|
import forge.model.FModel;
|
||||||
import forge.screens.FScreen;
|
import forge.screens.FScreen;
|
||||||
import forge.toolbox.FOptionPane;
|
import forge.toolbox.FOptionPane;
|
||||||
import forge.util.Callback;
|
|
||||||
import forge.util.ItemPool;
|
import forge.util.ItemPool;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -65,12 +64,9 @@ public class ShopScene extends ForgeScene {
|
|||||||
return;
|
return;
|
||||||
FOptionPane.showConfirmDialog(Forge.getLocalizer().getMessage("lblSellAllConfirm", cards, profit),
|
FOptionPane.showConfirmDialog(Forge.getLocalizer().getMessage("lblSellAllConfirm", cards, profit),
|
||||||
Forge.getLocalizer().getMessage("lblAutoSellable"), Forge.getLocalizer().getMessage("lblSell"),
|
Forge.getLocalizer().getMessage("lblAutoSellable"), Forge.getLocalizer().getMessage("lblSell"),
|
||||||
Forge.getLocalizer().getMessage("lblCancel"), false, new Callback<Boolean>() {
|
Forge.getLocalizer().getMessage("lblCancel"), false, result -> {
|
||||||
@Override
|
if (result) {
|
||||||
public void run(Boolean result) {
|
doAutosell();
|
||||||
if (result) {
|
|
||||||
doAutosell();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -34,15 +34,12 @@ public class GameEntityPicker extends TabPageScreen<GameEntityPicker> {
|
|||||||
setHeight(FOptionPane.getMaxDisplayObjHeight());
|
setHeight(FOptionPane.getMaxDisplayObjHeight());
|
||||||
|
|
||||||
optionPane = new FOptionPane(null, null, title, null, this,
|
optionPane = new FOptionPane(null, null, title, null, this,
|
||||||
isOptional ? ImmutableList.of(Forge.getLocalizer().getMessage("lblOK"), Forge.getLocalizer().getMessage("lblCancel")) : ImmutableList.of(Forge.getLocalizer().getMessage("lblOK")), 0, new Callback<Integer>() {
|
isOptional ? ImmutableList.of(Forge.getLocalizer().getMessage("lblOK"), Forge.getLocalizer().getMessage("lblCancel")) : ImmutableList.of(Forge.getLocalizer().getMessage("lblOK")), 0, result -> {
|
||||||
@Override
|
if (result == 0) {
|
||||||
public void run(Integer result) {
|
callback.run(((PickerTab) tabPages.get(0)).list.getSelectedItem());
|
||||||
if (result == 0) {
|
}
|
||||||
callback.run(((PickerTab) tabPages.get(0)).list.getSelectedItem());
|
else {
|
||||||
}
|
callback.run(null);
|
||||||
else {
|
|
||||||
callback.run(null);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}) {
|
}) {
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -1421,50 +1421,46 @@ public class FDeckChooser extends FScreen {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
GuiChoose.getInteger(Forge.getLocalizer().getMessage("lblHowManyOpponents"), 1, 50, new Callback<Integer>() {
|
GuiChoose.getInteger(Forge.getLocalizer().getMessage("lblHowManyOpponents"), 1, 50, numOpponents -> {
|
||||||
@Override
|
if (numOpponents == null) { return; }
|
||||||
public void run(final Integer numOpponents) {
|
List<DeckType> deckTypes = Lists.newArrayList(
|
||||||
if (numOpponents == null) { return; }
|
DeckType.CUSTOM_DECK,
|
||||||
List<DeckType> deckTypes = Lists.newArrayList(
|
DeckType.PRECONSTRUCTED_DECK,
|
||||||
DeckType.CUSTOM_DECK,
|
DeckType.QUEST_OPPONENT_DECK,
|
||||||
DeckType.PRECONSTRUCTED_DECK,
|
DeckType.COLOR_DECK,
|
||||||
DeckType.QUEST_OPPONENT_DECK,
|
DeckType.STANDARD_COLOR_DECK,
|
||||||
DeckType.COLOR_DECK,
|
DeckType.STANDARD_CARDGEN_DECK,
|
||||||
DeckType.STANDARD_COLOR_DECK,
|
DeckType.MODERN_COLOR_DECK,
|
||||||
DeckType.STANDARD_CARDGEN_DECK,
|
DeckType.PAUPER_COLOR_DECK,
|
||||||
DeckType.MODERN_COLOR_DECK,
|
DeckType.PIONEER_CARDGEN_DECK,
|
||||||
DeckType.PAUPER_COLOR_DECK,
|
DeckType.HISTORIC_CARDGEN_DECK,
|
||||||
DeckType.PIONEER_CARDGEN_DECK,
|
DeckType.MODERN_CARDGEN_DECK,
|
||||||
DeckType.HISTORIC_CARDGEN_DECK,
|
DeckType.LEGACY_CARDGEN_DECK,
|
||||||
DeckType.MODERN_CARDGEN_DECK,
|
DeckType.VINTAGE_CARDGEN_DECK,
|
||||||
DeckType.LEGACY_CARDGEN_DECK,
|
DeckType.PAUPER_CARDGEN_DECK,
|
||||||
DeckType.VINTAGE_CARDGEN_DECK,
|
DeckType.THEME_DECK,
|
||||||
DeckType.PAUPER_CARDGEN_DECK,
|
DeckType.NET_DECK,
|
||||||
DeckType.THEME_DECK,
|
DeckType.NET_ARCHIVE_STANDARD_DECK,
|
||||||
DeckType.NET_DECK,
|
DeckType.NET_ARCHIVE_PIONEER_DECK,
|
||||||
DeckType.NET_ARCHIVE_STANDARD_DECK,
|
DeckType.NET_ARCHIVE_MODERN_DECK,
|
||||||
DeckType.NET_ARCHIVE_PIONEER_DECK,
|
DeckType.NET_ARCHIVE_PAUPER_DECK,
|
||||||
DeckType.NET_ARCHIVE_MODERN_DECK,
|
DeckType.NET_ARCHIVE_VINTAGE_DECK,
|
||||||
DeckType.NET_ARCHIVE_PAUPER_DECK,
|
DeckType.NET_ARCHIVE_LEGACY_DECK,
|
||||||
DeckType.NET_ARCHIVE_VINTAGE_DECK,
|
DeckType.NET_ARCHIVE_BLOCK_DECK
|
||||||
DeckType.NET_ARCHIVE_LEGACY_DECK,
|
|
||||||
DeckType.NET_ARCHIVE_BLOCK_DECK
|
|
||||||
|
|
||||||
);
|
);
|
||||||
if (!FModel.isdeckGenMatrixLoaded()) {
|
if (!FModel.isdeckGenMatrixLoaded()) {
|
||||||
deckTypes.remove(DeckType.STANDARD_CARDGEN_DECK);
|
deckTypes.remove(DeckType.STANDARD_CARDGEN_DECK);
|
||||||
deckTypes.remove(DeckType.PIONEER_CARDGEN_DECK);
|
deckTypes.remove(DeckType.PIONEER_CARDGEN_DECK);
|
||||||
deckTypes.remove(DeckType.HISTORIC_CARDGEN_DECK);
|
deckTypes.remove(DeckType.HISTORIC_CARDGEN_DECK);
|
||||||
deckTypes.remove(DeckType.MODERN_CARDGEN_DECK);
|
deckTypes.remove(DeckType.MODERN_CARDGEN_DECK);
|
||||||
deckTypes.remove(DeckType.LEGACY_CARDGEN_DECK);
|
deckTypes.remove(DeckType.LEGACY_CARDGEN_DECK);
|
||||||
deckTypes.remove(DeckType.VINTAGE_CARDGEN_DECK);
|
deckTypes.remove(DeckType.VINTAGE_CARDGEN_DECK);
|
||||||
deckTypes.remove(DeckType.PAUPER_CARDGEN_DECK);
|
deckTypes.remove(DeckType.PAUPER_CARDGEN_DECK);
|
||||||
}
|
}
|
||||||
|
|
||||||
ListChooser<DeckType> chooser = new ListChooser<>(
|
ListChooser<DeckType> chooser = new ListChooser<>(
|
||||||
Forge.getLocalizer().getMessage("lblChooseAllowedDeckTypeOpponents"), 0, deckTypes.size(), deckTypes, null, new Callback<List<DeckType>>() {
|
Forge.getLocalizer().getMessage("lblChooseAllowedDeckTypeOpponents"), 0, deckTypes.size(), deckTypes, null, allowedDeckTypes -> {
|
||||||
@Override
|
|
||||||
public void run(final List<DeckType> allowedDeckTypes) {
|
|
||||||
if (allowedDeckTypes == null || allowedDeckTypes.isEmpty()) {
|
if (allowedDeckTypes == null || allowedDeckTypes.isEmpty()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -1490,38 +1486,33 @@ public class FDeckChooser extends FScreen {
|
|||||||
gauntlet.startRound(players, humanPlayer);
|
gauntlet.startRound(players, humanPlayer);
|
||||||
}));
|
}));
|
||||||
});
|
});
|
||||||
}
|
});
|
||||||
});
|
chooser.show(null, false); /*setting selectMax to true will select all available option*/
|
||||||
chooser.show(null, false); /*setting selectMax to true will select all available option*/
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
private void testVariantDeck(final Deck userDeck, final GameType variant) {
|
private void testVariantDeck(final Deck userDeck, final GameType variant) {
|
||||||
promptForDeck(Forge.getLocalizer().getMessage("lblSelectOpponentDeck"), variant, true, new Callback<Deck>() {
|
promptForDeck(Forge.getLocalizer().getMessage("lblSelectOpponentDeck"), variant, true, aiDeck -> {
|
||||||
@Override
|
if (aiDeck == null) { return; }
|
||||||
public void run(final Deck aiDeck) {
|
|
||||||
if (aiDeck == null) { return; }
|
|
||||||
|
|
||||||
LoadingOverlay.show(Forge.getLocalizer().getMessage("lblLoadingNewGame"), true, () -> {
|
LoadingOverlay.show(Forge.getLocalizer().getMessage("lblLoadingNewGame"), true, () -> {
|
||||||
Set<GameType> appliedVariants = new HashSet<>();
|
Set<GameType> appliedVariants = new HashSet<>();
|
||||||
appliedVariants.add(variant);
|
appliedVariants.add(variant);
|
||||||
|
|
||||||
List<RegisteredPlayer> players = new ArrayList<>();
|
List<RegisteredPlayer> players = new ArrayList<>();
|
||||||
RegisteredPlayer humanPlayer = RegisteredPlayer.forVariants(2, appliedVariants, userDeck, null, false, null, null);
|
RegisteredPlayer humanPlayer = RegisteredPlayer.forVariants(2, appliedVariants, userDeck, null, false, null, null);
|
||||||
humanPlayer.setPlayer(GamePlayerUtil.getGuiPlayer());
|
humanPlayer.setPlayer(GamePlayerUtil.getGuiPlayer());
|
||||||
RegisteredPlayer aiPlayer = RegisteredPlayer.forVariants(2, appliedVariants, aiDeck, null, false, null, null);
|
RegisteredPlayer aiPlayer = RegisteredPlayer.forVariants(2, appliedVariants, aiDeck, null, false, null, null);
|
||||||
aiPlayer.setPlayer(GamePlayerUtil.createAiPlayer());
|
aiPlayer.setPlayer(GamePlayerUtil.createAiPlayer());
|
||||||
players.add(humanPlayer);
|
players.add(humanPlayer);
|
||||||
players.add(aiPlayer);
|
players.add(aiPlayer);
|
||||||
|
|
||||||
final Map<RegisteredPlayer, IGuiGame> guiMap = new HashMap<>();
|
final Map<RegisteredPlayer, IGuiGame> guiMap = new HashMap<>();
|
||||||
guiMap.put(humanPlayer, MatchController.instance);
|
guiMap.put(humanPlayer, MatchController.instance);
|
||||||
|
|
||||||
final HostedMatch hostedMatch = GuiBase.getInterface().hostMatch();
|
final HostedMatch hostedMatch = GuiBase.getInterface().hostMatch();
|
||||||
hostedMatch.startMatch(GameType.Constructed, appliedVariants, players, guiMap);
|
hostedMatch.startMatch(GameType.Constructed, appliedVariants, players, guiMap);
|
||||||
});
|
});
|
||||||
}
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -547,17 +547,14 @@ public class FDeckEditor extends TabPageScreen<FDeckEditor> {
|
|||||||
if (showAddExtraSectionOption()) {
|
if (showAddExtraSectionOption()) {
|
||||||
addItem(new FMenuItem(localizer.getMessage("lblAddDeckSection"), FSkinImage.CHAOS, e -> {
|
addItem(new FMenuItem(localizer.getMessage("lblAddDeckSection"), FSkinImage.CHAOS, e -> {
|
||||||
List<String> options = hiddenExtraSections.stream().map(DeckSection::getLocalizedName).collect(Collectors.toList());
|
List<String> options = hiddenExtraSections.stream().map(DeckSection::getLocalizedName).collect(Collectors.toList());
|
||||||
GuiChoose.oneOrNone(localizer.getMessage("lblAddDeckSectionSelect"), options, new Callback<>() {
|
GuiChoose.oneOrNone(localizer.getMessage("lblAddDeckSectionSelect"), options, result -> {
|
||||||
@Override
|
if (result == null || !options.contains(result))
|
||||||
public void run(String result) {
|
return;
|
||||||
if (result == null || !options.contains(result))
|
DeckSection newSection = hiddenExtraSections.get(options.indexOf(result));
|
||||||
return;
|
showExtraSectionTab(newSection);
|
||||||
DeckSection newSection = hiddenExtraSections.get(options.indexOf(result));
|
filterCatalogForExtraSection(newSection);
|
||||||
showExtraSectionTab(newSection);
|
getCatalogPage().scheduleRefresh();
|
||||||
filterCatalogForExtraSection(newSection);
|
setSelectedPage(getCatalogPage());
|
||||||
getCatalogPage().scheduleRefresh();
|
|
||||||
setSelectedPage(getCatalogPage());
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
@@ -592,24 +589,16 @@ public class FDeckEditor extends TabPageScreen<FDeckEditor> {
|
|||||||
if (allowSaveAs())
|
if (allowSaveAs())
|
||||||
addItem(new FMenuItem(localizer.getMessage("lblSaveAs"), Forge.hdbuttons ? FSkinImage.HDSAVEAS : FSkinImage.SAVEAS, e -> {
|
addItem(new FMenuItem(localizer.getMessage("lblSaveAs"), Forge.hdbuttons ? FSkinImage.HDSAVEAS : FSkinImage.SAVEAS, e -> {
|
||||||
String defaultName = deckController.getNextAvailableName();
|
String defaultName = deckController.getNextAvailableName();
|
||||||
FOptionPane.showInputDialog(localizer.getMessage("lblNameNewCopyDeck"), defaultName, new Callback<>() {
|
FOptionPane.showInputDialog(localizer.getMessage("lblNameNewCopyDeck"), defaultName, result -> {
|
||||||
@Override
|
if (!StringUtils.isEmpty(result)) {
|
||||||
public void run(String result) {
|
deckController.saveAs(result);
|
||||||
if (!StringUtils.isEmpty(result)) {
|
|
||||||
deckController.saveAs(result);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
if (allowRename()) {
|
if (allowRename()) {
|
||||||
addItem(new FMenuItem(localizer.getMessage("lblRenameDeck"), Forge.hdbuttons ? FSkinImage.HDEDIT : FSkinImage.EDIT, e -> FOptionPane.showInputDialog(
|
addItem(new FMenuItem(localizer.getMessage("lblRenameDeck"), Forge.hdbuttons ? FSkinImage.HDEDIT : FSkinImage.EDIT, e -> FOptionPane.showInputDialog(
|
||||||
localizer.getMessage("lblNewNameDeck"), deck.getName(), new Callback<>() {
|
localizer.getMessage("lblNewNameDeck"), deck.getName(), deckController::rename))
|
||||||
@Override
|
|
||||||
public void run(String result) {
|
|
||||||
deckController.rename(result);
|
|
||||||
}
|
|
||||||
}))
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
if (allowDelete()) {
|
if (allowDelete()) {
|
||||||
@@ -618,13 +607,10 @@ public class FDeckEditor extends TabPageScreen<FDeckEditor> {
|
|||||||
localizer.getMessage("lblDeleteDeck"),
|
localizer.getMessage("lblDeleteDeck"),
|
||||||
localizer.getMessage("lblDelete"),
|
localizer.getMessage("lblDelete"),
|
||||||
localizer.getMessage("lblCancel"), false,
|
localizer.getMessage("lblCancel"), false,
|
||||||
new Callback<>() {
|
result -> {
|
||||||
@Override
|
if (result) {
|
||||||
public void run(Boolean result) {
|
deckController.delete();
|
||||||
if (result) {
|
Forge.back();
|
||||||
deckController.delete();
|
|
||||||
Forge.back();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}))
|
}))
|
||||||
);
|
);
|
||||||
@@ -649,12 +635,7 @@ public class FDeckEditor extends TabPageScreen<FDeckEditor> {
|
|||||||
CardEdition defaultLandSet = allowedLandSets.get(0);
|
CardEdition defaultLandSet = allowedLandSets.get(0);
|
||||||
List<CardEdition> finalAllowedLandSets = allowedLandSets;
|
List<CardEdition> finalAllowedLandSets = allowedLandSets;
|
||||||
FThreads.invokeInEdtNowOrLater(() -> {
|
FThreads.invokeInEdtNowOrLater(() -> {
|
||||||
AddBasicLandsDialog dialog = new AddBasicLandsDialog(deck, defaultLandSet, new Callback<>() {
|
AddBasicLandsDialog dialog = new AddBasicLandsDialog(deck, defaultLandSet, this::addChosenBasicLands, editorConfig.hasInfiniteCardPool() ? null : finalAllowedLandSets); //Null allows any lands to be selected
|
||||||
@Override
|
|
||||||
public void run(CardPool landsToAdd) {
|
|
||||||
addChosenBasicLands(landsToAdd);
|
|
||||||
}
|
|
||||||
}, editorConfig.hasInfiniteCardPool() ? null : finalAllowedLandSets); //Null allows any lands to be selected
|
|
||||||
dialog.show();
|
dialog.show();
|
||||||
|
|
||||||
});
|
});
|
||||||
@@ -686,14 +667,11 @@ public class FDeckEditor extends TabPageScreen<FDeckEditor> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
protected void showDevAddCardDialog() {
|
protected void showDevAddCardDialog() {
|
||||||
FOptionPane.showInputDialog(Forge.getLocalizer().getMessage("lblPromptCardRequest"), new Callback<>() {
|
FOptionPane.showInputDialog(Forge.getLocalizer().getMessage("lblPromptCardRequest"), result -> {
|
||||||
@Override
|
if(StringUtils.isBlank(result))
|
||||||
public void run(String result) {
|
return;
|
||||||
if(StringUtils.isBlank(result))
|
CardPool requested = CardPool.fromSingleCardRequest(result);
|
||||||
return;
|
devAddCards(requested);
|
||||||
CardPool requested = CardPool.fromSingleCardRequest(result);
|
|
||||||
devAddCards(requested);
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -924,15 +902,12 @@ public class FDeckEditor extends TabPageScreen<FDeckEditor> {
|
|||||||
List<PaperCard> commanders = deck.getCommanders(); //use commander name as default deck name
|
List<PaperCard> commanders = deck.getCommanders(); //use commander name as default deck name
|
||||||
String initialInput = commanders.isEmpty() ? "New Deck" : Lang.joinHomogenous(commanders);
|
String initialInput = commanders.isEmpty() ? "New Deck" : Lang.joinHomogenous(commanders);
|
||||||
FThreads.invokeInEdtNowOrLater(() -> {
|
FThreads.invokeInEdtNowOrLater(() -> {
|
||||||
FOptionPane.showInputDialog(Forge.getLocalizer().getMessage("lblNameNewDeck"), initialInput, new Callback<>() {
|
FOptionPane.showInputDialog(Forge.getLocalizer().getMessage("lblNameNewDeck"), initialInput, result -> {
|
||||||
@Override
|
if (StringUtils.isEmpty(result)) { return; }
|
||||||
public void run(String result) {
|
|
||||||
if (StringUtils.isEmpty(result)) { return; }
|
|
||||||
|
|
||||||
deckController.saveAs(result);
|
deckController.saveAs(result);
|
||||||
if (callback != null) {
|
if (callback != null) {
|
||||||
callback.run(true);
|
callback.run(true);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
@@ -979,17 +954,14 @@ public class FDeckEditor extends TabPageScreen<FDeckEditor> {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
FOptionPane.showOptionDialog(Forge.getLocalizer().getMessage("lblSaveChangesCurrentDeck"), "",
|
FOptionPane.showOptionDialog(Forge.getLocalizer().getMessage("lblSaveChangesCurrentDeck"), "",
|
||||||
FOptionPane.QUESTION_ICON, onCloseOptions, new Callback<>() {
|
FOptionPane.QUESTION_ICON, onCloseOptions, result -> {
|
||||||
@Override
|
if (result == 0) {
|
||||||
public void run(Integer result) {
|
save(canCloseCallback);
|
||||||
if (result == 0) {
|
} else if (result == 1) {
|
||||||
save(canCloseCallback);
|
getDeckController().exitWithoutSaving(); //reload if not saving changes
|
||||||
} else if (result == 1) {
|
canCloseCallback.run(true);
|
||||||
getDeckController().exitWithoutSaving(); //reload if not saving changes
|
} else {
|
||||||
canCloseCallback.run(true);
|
canCloseCallback.run(false);
|
||||||
} else {
|
|
||||||
canCloseCallback.run(false);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -1431,7 +1403,7 @@ public class FDeckEditor extends TabPageScreen<FDeckEditor> {
|
|||||||
this.addMoveCardMenuItem(menu, source, destination, new MoveCardCallback(card, source, destination));
|
this.addMoveCardMenuItem(menu, source, destination, new MoveCardCallback(card, source, destination));
|
||||||
}
|
}
|
||||||
|
|
||||||
protected static class MoveCardCallback extends Callback<Integer> {
|
protected static class MoveCardCallback implements Callback<Integer> {
|
||||||
public final PaperCard card;
|
public final PaperCard card;
|
||||||
public final CardManagerPage from;
|
public final CardManagerPage from;
|
||||||
public final CardManagerPage to;
|
public final CardManagerPage to;
|
||||||
@@ -1465,13 +1437,10 @@ public class FDeckEditor extends TabPageScreen<FDeckEditor> {
|
|||||||
if(max < 2)
|
if(max < 2)
|
||||||
callback.accept(1);
|
callback.accept(1);
|
||||||
else
|
else
|
||||||
GuiChoose.getInteger(prompt, 1, max, 20, new Callback<>() {
|
GuiChoose.getInteger(prompt, 1, max, 20, result -> {
|
||||||
@Override
|
if (result == null || result == 0)
|
||||||
public void run(Integer result) {
|
return;
|
||||||
if (result == null || result == 0)
|
callback.accept(result);
|
||||||
return;
|
|
||||||
callback.accept(result);
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -2024,14 +1993,11 @@ public class FDeckEditor extends TabPageScreen<FDeckEditor> {
|
|||||||
break;
|
break;
|
||||||
case Commander:
|
case Commander:
|
||||||
if (canEditMainCommander() || isPartnerCommander(card)) {
|
if (canEditMainCommander() || isPartnerCommander(card)) {
|
||||||
addMoveCardMenuItem(menu, this, cardSourcePage, new Callback<>() {
|
addMoveCardMenuItem(menu, this, cardSourcePage, result -> {
|
||||||
@Override
|
moveCard(card, cardSourcePage, result);
|
||||||
public void run(Integer result) {
|
if(cardSourcePage == parentScreen.getCatalogPage()) {
|
||||||
moveCard(card, cardSourcePage, result);
|
parentScreen.getCatalogPage().refresh(); //refresh so commander options shown again
|
||||||
if(cardSourcePage == parentScreen.getCatalogPage()) {
|
parentScreen.setSelectedPage(parentScreen.getCatalogPage());
|
||||||
parentScreen.getCatalogPage().refresh(); //refresh so commander options shown again
|
|
||||||
parentScreen.setSelectedPage(parentScreen.getCatalogPage());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
addReplaceVariantItems(menu, card);
|
addReplaceVariantItems(menu, card);
|
||||||
@@ -2063,12 +2029,9 @@ public class FDeckEditor extends TabPageScreen<FDeckEditor> {
|
|||||||
else
|
else
|
||||||
currentColors = null;
|
currentColors = null;
|
||||||
String prompt = Forge.getLocalizer().getMessage("lblChooseAColor", Lang.getNumeral(markedColorCount));
|
String prompt = Forge.getLocalizer().getMessage("lblChooseAColor", Lang.getNumeral(markedColorCount));
|
||||||
GuiChoose.getChoices(prompt, markedColorCount, markedColorCount, MagicColor.Constant.ONLY_COLORS, currentColors, null, new Callback<>() {
|
GuiChoose.getChoices(prompt, markedColorCount, markedColorCount, MagicColor.Constant.ONLY_COLORS, currentColors, null, result -> {
|
||||||
@Override
|
addCard(card.copyWithMarkedColors(ColorSet.fromNames(result)));
|
||||||
public void run(List<String> result) {
|
removeCard(card);
|
||||||
addCard(card.copyWithMarkedColors(ColorSet.fromNames(result)));
|
|
||||||
removeCard(card);
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
@@ -2109,21 +2072,18 @@ public class FDeckEditor extends TabPageScreen<FDeckEditor> {
|
|||||||
String prompt = localizer.getMessage("lblSelectReplacementCard") + " " + card.getName();
|
String prompt = localizer.getMessage("lblSelectReplacementCard") + " " + card.getName();
|
||||||
String promptQuantity = String.format("%s - %s %s", card, lblReplaceCard, localizer.getMessage("lblHowMany"));
|
String promptQuantity = String.format("%s - %s %s", card, lblReplaceCard, localizer.getMessage("lblHowMany"));
|
||||||
//First have the player choose which card to swap in.
|
//First have the player choose which card to swap in.
|
||||||
GuiChoose.oneOrNone(prompt, sortedOptions, new Callback<>() {
|
GuiChoose.oneOrNone(prompt, sortedOptions, replacement -> {
|
||||||
@Override
|
if (replacement == null || replacement == card)
|
||||||
public void run(PaperCard replacement) {
|
return;
|
||||||
if (replacement == null || replacement == card)
|
//Next, ask how many copies they'd like to swap, taking into account the number available.
|
||||||
return;
|
int available = parentScreen.getCardSourcePage().cardManager.isInfinite() ? Integer.MAX_VALUE : cardOptions.count(replacement);
|
||||||
//Next, ask how many copies they'd like to swap, taking into account the number available.
|
int maxMovable = Math.min(available, cardManager.getItemCount(card));
|
||||||
int available = parentScreen.getCardSourcePage().cardManager.isInfinite() ? Integer.MAX_VALUE : cardOptions.count(replacement);
|
new MoveQuantityPrompt(promptQuantity, maxMovable, (amount) -> {
|
||||||
int maxMovable = Math.min(available, cardManager.getItemCount(card));
|
CardManagerPage sourcePage = parentScreen.getCardSourcePage();
|
||||||
new MoveQuantityPrompt(promptQuantity, maxMovable, (amount) -> {
|
//Finally, swap the cards.
|
||||||
CardManagerPage sourcePage = parentScreen.getCardSourcePage();
|
DeckSectionPage.this.moveCard(card, sourcePage, amount);
|
||||||
//Finally, swap the cards.
|
sourcePage.moveCard(replacement, DeckSectionPage.this, amount);
|
||||||
DeckSectionPage.this.moveCard(card, sourcePage, amount);
|
}).handleEvent(e);
|
||||||
sourcePage.moveCard(replacement, DeckSectionPage.this, amount);
|
|
||||||
}).handleEvent(e);
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2294,29 +2254,23 @@ public class FDeckEditor extends TabPageScreen<FDeckEditor> {
|
|||||||
if(!cardManager.isEnabled())
|
if(!cardManager.isEnabled())
|
||||||
return;
|
return;
|
||||||
if(draftingFaceDown) {
|
if(draftingFaceDown) {
|
||||||
addMoveCardMenuItem(menu, this, parentScreen.getSideboardPage(), new Callback<>() {
|
addMoveCardMenuItem(menu, this, parentScreen.getSideboardPage(), result -> { //ignore quantity
|
||||||
@Override
|
PaperCard realCard = getDraftPlayer().pickFromArchdemonCurse(getDraftPlayer().nextChoice());
|
||||||
public void run(Integer result) { //ignore quantity
|
moveCard(realCard, parentScreen.getSideboardPage());
|
||||||
PaperCard realCard = getDraftPlayer().pickFromArchdemonCurse(getDraftPlayer().nextChoice());
|
|
||||||
moveCard(realCard, parentScreen.getSideboardPage());
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
DeckSection destination = DeckSection.matchingSection(card);
|
DeckSection destination = DeckSection.matchingSection(card);
|
||||||
final DeckSectionPage destinationPage = parentScreen.getPageForSection(destination, true);
|
final DeckSectionPage destinationPage = parentScreen.getPageForSection(destination, true);
|
||||||
addMoveCardMenuItem(menu, this, destinationPage, new Callback<>() {
|
addMoveCardMenuItem(menu, this, destinationPage, result -> { //ignore quantity
|
||||||
@Override
|
moveCard(card, destinationPage);
|
||||||
public void run(Integer result) { //ignore quantity
|
|
||||||
moveCard(card, destinationPage);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
addMoveCardMenuItem(menu, this, parentScreen.getSideboardPage(), new Callback<>() {
|
|
||||||
@Override
|
|
||||||
public void run(Integer result) { //ignore quantity
|
|
||||||
moveCard(card, parentScreen.getSideboardPage());
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
addMoveCardMenuItem(menu,
|
||||||
|
this,
|
||||||
|
parentScreen.getSideboardPage(),
|
||||||
|
result -> { //ignore quantity
|
||||||
|
moveCard(card, parentScreen.getSideboardPage());
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -150,14 +150,11 @@ public class FSideboardDialog extends FDialog {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void buildMenu(FDropDownMenu menu, final PaperCard card) {
|
protected void buildMenu(FDropDownMenu menu, final PaperCard card) {
|
||||||
addItem(menu, Forge.getLocalizer().getMessage("lblMove"), Forge.getLocalizer().getMessage("lblToMainDeck"), FDeckEditor.MAIN_DECK_ICON, new Callback<Integer>() {
|
addItem(menu, Forge.getLocalizer().getMessage("lblMove"), Forge.getLocalizer().getMessage("lblToMainDeck"), FDeckEditor.MAIN_DECK_ICON, result -> {
|
||||||
@Override
|
if (result == null || result <= 0) { return; }
|
||||||
public void run(Integer result) {
|
|
||||||
if (result == null || result <= 0) { return; }
|
|
||||||
|
|
||||||
removeCard(card, result);
|
removeCard(card, result);
|
||||||
parent.getMainDeckPage().addCard(card, result);
|
parent.getMainDeckPage().addCard(card, result);
|
||||||
}
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -181,14 +178,11 @@ public class FSideboardDialog extends FDialog {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void buildMenu(FDropDownMenu menu, final PaperCard card) {
|
protected void buildMenu(FDropDownMenu menu, final PaperCard card) {
|
||||||
addItem(menu, Forge.getLocalizer().getMessage("lblMove"), Forge.getLocalizer().getMessage("lbltosideboard"), FDeckEditor.SIDEBOARD_ICON, new Callback<Integer>() {
|
addItem(menu, Forge.getLocalizer().getMessage("lblMove"), Forge.getLocalizer().getMessage("lbltosideboard"), FDeckEditor.SIDEBOARD_ICON, result -> {
|
||||||
@Override
|
if (result == null || result <= 0) { return; }
|
||||||
public void run(Integer result) {
|
|
||||||
if (result == null || result <= 0) { return; }
|
|
||||||
|
|
||||||
removeCard(card, result);
|
removeCard(card, result);
|
||||||
parent.getSideboardPage().addCard(card, result);
|
parent.getSideboardPage().addCard(card, result);
|
||||||
}
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -534,18 +534,15 @@ public class PlayerPanel extends FContainer {
|
|||||||
private FEventHandler avatarCommand = new FEventHandler() {
|
private FEventHandler avatarCommand = new FEventHandler() {
|
||||||
@Override
|
@Override
|
||||||
public void handleEvent(FEvent e) {
|
public void handleEvent(FEvent e) {
|
||||||
AvatarSelector.show(getPlayerName(), avatarIndex, screen.getUsedAvatars(), new Callback<Integer>() {
|
AvatarSelector.show(getPlayerName(), avatarIndex, screen.getUsedAvatars(), result -> {
|
||||||
@Override
|
setAvatarIndex(result);
|
||||||
public void run(Integer result) {
|
|
||||||
setAvatarIndex(result);
|
|
||||||
|
|
||||||
if (index < 2) {
|
if (index < 2) {
|
||||||
screen.updateAvatar(index, result);
|
screen.updateAvatar(index, result);
|
||||||
screen.updateAvatarPrefs();
|
screen.updateAvatarPrefs();
|
||||||
}
|
}
|
||||||
if (allowNetworking) {
|
if (allowNetworking) {
|
||||||
screen.firePlayerChangeListener(index);
|
screen.firePlayerChangeListener(index);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -554,18 +551,15 @@ public class PlayerPanel extends FContainer {
|
|||||||
private FEventHandler sleeveCommand = new FEventHandler() {
|
private FEventHandler sleeveCommand = new FEventHandler() {
|
||||||
@Override
|
@Override
|
||||||
public void handleEvent(FEvent e) {
|
public void handleEvent(FEvent e) {
|
||||||
SleevesSelector.show(getPlayerName(), sleeveIndex, screen.getUsedSleeves(), new Callback<Integer>() {
|
SleevesSelector.show(getPlayerName(), sleeveIndex, screen.getUsedSleeves(), result -> {
|
||||||
@Override
|
setSleeveIndex(result);
|
||||||
public void run(Integer result) {
|
|
||||||
setSleeveIndex(result);
|
|
||||||
|
|
||||||
if (index < 2) {
|
if (index < 2) {
|
||||||
screen.updateSleeve(index, result);
|
screen.updateSleeve(index, result);
|
||||||
screen.updateSleevePrefs();
|
screen.updateSleevePrefs();
|
||||||
}
|
}
|
||||||
if (allowNetworking) {
|
if (allowNetworking) {
|
||||||
screen.firePlayerChangeListener(index);
|
screen.firePlayerChangeListener(index);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -804,21 +798,18 @@ public class PlayerPanel extends FContainer {
|
|||||||
private FLabel createNameRandomizer() {
|
private FLabel createNameRandomizer() {
|
||||||
final FLabel newNameBtn = new FLabel.Builder().iconInBackground(false)
|
final FLabel newNameBtn = new FLabel.Builder().iconInBackground(false)
|
||||||
.icon(Forge.hdbuttons ? FSkinImage.HDEDIT : FSkinImage.EDIT).opaque(false).build();
|
.icon(Forge.hdbuttons ? FSkinImage.HDEDIT : FSkinImage.EDIT).opaque(false).build();
|
||||||
newNameBtn.setCommand(e -> getNewName(new Callback<String>() {
|
newNameBtn.setCommand(e -> getNewName(newName -> {
|
||||||
@Override
|
if (newName == null) { return; }
|
||||||
public void run(String newName) {
|
|
||||||
if (newName == null) { return; }
|
|
||||||
|
|
||||||
txtPlayerName.setText(newName);
|
txtPlayerName.setText(newName);
|
||||||
|
|
||||||
if (index == 0) {
|
if (index == 0) {
|
||||||
prefs.setPref(FPref.PLAYER_NAME, newName);
|
prefs.setPref(FPref.PLAYER_NAME, newName);
|
||||||
prefs.save();
|
prefs.save();
|
||||||
screen.getLobby().applyToSlot(index, UpdateLobbyPlayerEvent.nameUpdate(newName));
|
screen.getLobby().applyToSlot(index, UpdateLobbyPlayerEvent.nameUpdate(newName));
|
||||||
}
|
}
|
||||||
if (allowNetworking) {
|
if (allowNetworking) {
|
||||||
screen.firePlayerChangeListener(index);
|
screen.firePlayerChangeListener(index);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}));
|
}));
|
||||||
return newNameBtn;
|
return newNameBtn;
|
||||||
@@ -1070,41 +1061,32 @@ public class PlayerPanel extends FContainer {
|
|||||||
final String message = Forge.getLocalizer().getMessage("lbltypeofName");
|
final String message = Forge.getLocalizer().getMessage("lbltypeofName");
|
||||||
final FSkinImage icon = FOptionPane.QUESTION_ICON;
|
final FSkinImage icon = FOptionPane.QUESTION_ICON;
|
||||||
|
|
||||||
FOptionPane.showOptionDialog(message, title, icon, genderOptions, 2, new Callback<Integer>() {
|
FOptionPane.showOptionDialog(message, title, icon, genderOptions, 2, genderIndex -> {
|
||||||
@Override
|
if (genderIndex == null || genderIndex < 0) {
|
||||||
public void run(final Integer genderIndex) {
|
callback.run(null);
|
||||||
if (genderIndex == null || genderIndex < 0) {
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
FOptionPane.showOptionDialog(message, title, icon, typeOptions, 2, typeIndex -> {
|
||||||
|
if (typeIndex == null || typeIndex < 0) {
|
||||||
callback.run(null);
|
callback.run(null);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
FOptionPane.showOptionDialog(message, title, icon, typeOptions, 2, new Callback<Integer>() {
|
generateRandomName(genderOptions.get(genderIndex), typeOptions.get(typeIndex), screen.getPlayerNames(), title, callback);
|
||||||
@Override
|
});
|
||||||
public void run(final Integer typeIndex) {
|
|
||||||
if (typeIndex == null || typeIndex < 0) {
|
|
||||||
callback.run(null);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
generateRandomName(genderOptions.get(genderIndex), typeOptions.get(typeIndex), screen.getPlayerNames(), title, callback);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
private void generateRandomName(final String gender, final String type, final List<String> usedNames, final String title, final Callback<String> callback) {
|
private void generateRandomName(final String gender, final String type, final List<String> usedNames, final String title, final Callback<String> callback) {
|
||||||
final String newName = NameGenerator.getRandomName(gender, type, usedNames);
|
final String newName = NameGenerator.getRandomName(gender, type, usedNames);
|
||||||
String confirmMsg = Forge.getLocalizer().getMessage("lblconfirmName").replace("%s", newName);
|
String confirmMsg = Forge.getLocalizer().getMessage("lblconfirmName").replace("%s", newName);
|
||||||
FOptionPane.showConfirmDialog(confirmMsg, title, Forge.getLocalizer().getMessage("lblUseThisName"), Forge.getLocalizer().getMessage("lblTryAgain"), true, new Callback<Boolean>() {
|
FOptionPane.showConfirmDialog(confirmMsg, title, Forge.getLocalizer().getMessage("lblUseThisName"), Forge.getLocalizer().getMessage("lblTryAgain"), true, result -> {
|
||||||
@Override
|
if (result) {
|
||||||
public void run(Boolean result) {
|
callback.run(newName);
|
||||||
if (result) {
|
}
|
||||||
callback.run(newName);
|
else {
|
||||||
}
|
generateRandomName(gender, type, usedNames, title, callback);
|
||||||
else {
|
|
||||||
generateRandomName(gender, type, usedNames, title, callback);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -32,7 +32,6 @@ import forge.screens.settings.SettingsScreen;
|
|||||||
import forge.toolbox.FButton;
|
import forge.toolbox.FButton;
|
||||||
import forge.toolbox.FList;
|
import forge.toolbox.FList;
|
||||||
import forge.toolbox.FOptionPane;
|
import forge.toolbox.FOptionPane;
|
||||||
import forge.util.Callback;
|
|
||||||
import forge.util.ThreadUtil;
|
import forge.util.ThreadUtil;
|
||||||
import forge.util.Utils;
|
import forge.util.Utils;
|
||||||
|
|
||||||
@@ -107,15 +106,12 @@ public class LoadGauntletScreen extends LaunchScreen {
|
|||||||
if (userDeck == null) {
|
if (userDeck == null) {
|
||||||
//give user a chance to select a deck if none saved with gauntlet
|
//give user a chance to select a deck if none saved with gauntlet
|
||||||
FDeckChooser.promptForDeck(Forge.getLocalizer().getMessage("lblSelectGauntletDeck"), gauntlet.isCommanderGauntlet()
|
FDeckChooser.promptForDeck(Forge.getLocalizer().getMessage("lblSelectGauntletDeck"), gauntlet.isCommanderGauntlet()
|
||||||
? GameType.CommanderGauntlet : GameType.Gauntlet, false, new Callback<Deck>() {
|
? GameType.CommanderGauntlet : GameType.Gauntlet, false, result -> {
|
||||||
@Override
|
if (result != null) {
|
||||||
public void run(Deck result) {
|
gauntlet.setUserDeck(result);
|
||||||
if (result != null) {
|
GauntletIO.saveGauntlet(gauntlet);
|
||||||
gauntlet.setUserDeck(result);
|
}
|
||||||
GauntletIO.saveGauntlet(gauntlet);
|
});
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -7,7 +7,6 @@ import java.util.List;
|
|||||||
|
|
||||||
import forge.Forge;
|
import forge.Forge;
|
||||||
import forge.assets.FSkinFont;
|
import forge.assets.FSkinFont;
|
||||||
import forge.deck.Deck;
|
|
||||||
import forge.deck.DeckType;
|
import forge.deck.DeckType;
|
||||||
import forge.deck.FDeckChooser;
|
import forge.deck.FDeckChooser;
|
||||||
import forge.game.GameType;
|
import forge.game.GameType;
|
||||||
@@ -23,7 +22,6 @@ import forge.toolbox.FLabel;
|
|||||||
import forge.toolbox.FTextArea;
|
import forge.toolbox.FTextArea;
|
||||||
import forge.toolbox.GuiChoose;
|
import forge.toolbox.GuiChoose;
|
||||||
import forge.toolbox.ListChooser;
|
import forge.toolbox.ListChooser;
|
||||||
import forge.util.Callback;
|
|
||||||
import forge.util.Utils;
|
import forge.util.Utils;
|
||||||
|
|
||||||
public class NewGauntletScreen extends LaunchScreen {
|
public class NewGauntletScreen extends LaunchScreen {
|
||||||
@@ -58,158 +56,125 @@ public class NewGauntletScreen extends LaunchScreen {
|
|||||||
Forge.getLocalizer().getMessage("lblGauntletContest"),
|
Forge.getLocalizer().getMessage("lblGauntletContest"),
|
||||||
Forge.getLocalizer().getMessage("lblQuickCommanderGauntlet"),
|
Forge.getLocalizer().getMessage("lblQuickCommanderGauntlet"),
|
||||||
Forge.getLocalizer().getMessage("lblCustomCommanderGauntlet"),
|
Forge.getLocalizer().getMessage("lblCustomCommanderGauntlet"),
|
||||||
}, new Callback<String>() {
|
}, result -> {
|
||||||
@Override
|
if (result == null) { return; }
|
||||||
public void run(String result) {
|
|
||||||
if (result == null) { return; }
|
|
||||||
|
|
||||||
if (Forge.getLocalizer().getMessage("lblQuickGauntlet").equals(result)) {
|
if (Forge.getLocalizer().getMessage("lblQuickGauntlet").equals(result)) {
|
||||||
createQuickGauntlet();
|
createQuickGauntlet();
|
||||||
} else if(Forge.getLocalizer().getMessage("lblCustomGauntlet").equals(result)) {
|
} else if(Forge.getLocalizer().getMessage("lblCustomGauntlet").equals(result)) {
|
||||||
createCustomGauntlet();
|
createCustomGauntlet();
|
||||||
} else if(Forge.getLocalizer().getMessage("lblQuickCommanderGauntlet").equals(result)) {
|
} else if(Forge.getLocalizer().getMessage("lblQuickCommanderGauntlet").equals(result)) {
|
||||||
createQuickCommandGauntlet();
|
createQuickCommandGauntlet();
|
||||||
} else if(Forge.getLocalizer().getMessage("lblCustomCommanderGauntlet").equals(result)) {
|
} else if(Forge.getLocalizer().getMessage("lblCustomCommanderGauntlet").equals(result)) {
|
||||||
createCustomCommanderGauntlet();
|
createCustomCommanderGauntlet();
|
||||||
} else {
|
} else {
|
||||||
createGauntletContest();
|
createGauntletContest();
|
||||||
}
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
private void createQuickCommandGauntlet() {
|
private void createQuickCommandGauntlet() {
|
||||||
GuiChoose.getInteger(Forge.getLocalizer().getMessage("lblHowManyOpponents"), 3, 50, new Callback<Integer>() {
|
GuiChoose.getInteger(Forge.getLocalizer().getMessage("lblHowManyOpponents"), 3, 50, numOpponents -> {
|
||||||
@Override
|
if (numOpponents == null) { return; }
|
||||||
public void run(final Integer numOpponents) {
|
|
||||||
if (numOpponents == null) { return; }
|
|
||||||
|
|
||||||
ListChooser<DeckType> chooser = new ListChooser<>(
|
ListChooser<DeckType> chooser = new ListChooser<>(
|
||||||
Forge.getLocalizer().getMessage("lblChooseAllowedDeckTypeOpponents"), 0, 11, Arrays.asList(DeckType.COMMANDER_DECK,
|
Forge.getLocalizer().getMessage("lblChooseAllowedDeckTypeOpponents"), 0, 11, Arrays.asList(DeckType.COMMANDER_DECK,
|
||||||
DeckType.PRECON_COMMANDER_DECK,
|
DeckType.PRECON_COMMANDER_DECK,
|
||||||
DeckType.RANDOM_COMMANDER_DECK), null, new Callback<List<DeckType>>() {
|
DeckType.RANDOM_COMMANDER_DECK), null, allowedDeckTypes -> {
|
||||||
@Override
|
|
||||||
public void run(final List<DeckType> allowedDeckTypes) {
|
|
||||||
if (allowedDeckTypes == null || allowedDeckTypes.isEmpty()) {
|
if (allowedDeckTypes == null || allowedDeckTypes.isEmpty()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
FDeckChooser.promptForDeck(Forge.getLocalizer().getMessage("lblSelectYourDeck"), GameType.Commander, false, new Callback<Deck>() {
|
FDeckChooser.promptForDeck(Forge.getLocalizer().getMessage("lblSelectYourDeck"), GameType.Commander, false, userDeck -> {
|
||||||
@Override
|
if (userDeck == null) {
|
||||||
public void run(Deck userDeck) {
|
return;
|
||||||
if (userDeck == null) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
GauntletData gauntlet = GauntletUtil.createCommanderGauntlet(userDeck, numOpponents, allowedDeckTypes, null);
|
|
||||||
launchGauntlet(gauntlet);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
GauntletData gauntlet = GauntletUtil.createCommanderGauntlet(userDeck, numOpponents, allowedDeckTypes, null);
|
||||||
|
launchGauntlet(gauntlet);
|
||||||
});
|
});
|
||||||
}
|
});
|
||||||
});
|
chooser.show(null, false); /*setting selectMax to true will select all available option*/
|
||||||
chooser.show(null, false); /*setting selectMax to true will select all available option*/
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
private void createQuickGauntlet() {
|
private void createQuickGauntlet() {
|
||||||
GuiChoose.getInteger(Forge.getLocalizer().getMessage("lblHowManyOpponents"), 3, 50, new Callback<Integer>() {
|
GuiChoose.getInteger(Forge.getLocalizer().getMessage("lblHowManyOpponents"), 3, 50, numOpponents -> {
|
||||||
@Override
|
if (numOpponents == null) { return; }
|
||||||
public void run(final Integer numOpponents) {
|
|
||||||
if (numOpponents == null) { return; }
|
|
||||||
|
|
||||||
ListChooser<DeckType> chooser = new ListChooser<>(
|
ListChooser<DeckType> chooser = new ListChooser<>(
|
||||||
Forge.getLocalizer().getMessage("lblChooseAllowedDeckTypeOpponents"), 0, 11, Arrays.asList(DeckType.CUSTOM_DECK,
|
Forge.getLocalizer().getMessage("lblChooseAllowedDeckTypeOpponents"), 0, 11, Arrays.asList(DeckType.CUSTOM_DECK,
|
||||||
DeckType.PRECONSTRUCTED_DECK,
|
DeckType.PRECONSTRUCTED_DECK,
|
||||||
DeckType.QUEST_OPPONENT_DECK,
|
DeckType.QUEST_OPPONENT_DECK,
|
||||||
DeckType.COLOR_DECK,
|
DeckType.COLOR_DECK,
|
||||||
DeckType.STANDARD_COLOR_DECK,
|
DeckType.STANDARD_COLOR_DECK,
|
||||||
DeckType.STANDARD_CARDGEN_DECK,
|
DeckType.STANDARD_CARDGEN_DECK,
|
||||||
DeckType.MODERN_COLOR_DECK,
|
DeckType.MODERN_COLOR_DECK,
|
||||||
DeckType.PIONEER_CARDGEN_DECK,
|
DeckType.PIONEER_CARDGEN_DECK,
|
||||||
DeckType.HISTORIC_CARDGEN_DECK,
|
DeckType.HISTORIC_CARDGEN_DECK,
|
||||||
DeckType.MODERN_CARDGEN_DECK,
|
DeckType.MODERN_CARDGEN_DECK,
|
||||||
DeckType.LEGACY_CARDGEN_DECK,
|
DeckType.LEGACY_CARDGEN_DECK,
|
||||||
DeckType.VINTAGE_CARDGEN_DECK,
|
DeckType.VINTAGE_CARDGEN_DECK,
|
||||||
DeckType.PAUPER_CARDGEN_DECK,
|
DeckType.PAUPER_CARDGEN_DECK,
|
||||||
DeckType.THEME_DECK), null, new Callback<List<DeckType>>() {
|
DeckType.THEME_DECK), null, allowedDeckTypes -> {
|
||||||
@Override
|
|
||||||
public void run(final List<DeckType> allowedDeckTypes) {
|
|
||||||
if (allowedDeckTypes == null || allowedDeckTypes.isEmpty()) {
|
if (allowedDeckTypes == null || allowedDeckTypes.isEmpty()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
FDeckChooser.promptForDeck(Forge.getLocalizer().getMessage("lblSelectYourDeck"), GameType.Gauntlet, false, new Callback<Deck>() {
|
FDeckChooser.promptForDeck(Forge.getLocalizer().getMessage("lblSelectYourDeck"), GameType.Gauntlet, false, userDeck -> {
|
||||||
@Override
|
if (userDeck == null) {
|
||||||
public void run(Deck userDeck) {
|
return;
|
||||||
if (userDeck == null) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
GauntletData gauntlet = GauntletUtil.createQuickGauntlet(userDeck, numOpponents, allowedDeckTypes, null);
|
|
||||||
launchGauntlet(gauntlet);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
GauntletData gauntlet = GauntletUtil.createQuickGauntlet(userDeck, numOpponents, allowedDeckTypes, null);
|
||||||
|
launchGauntlet(gauntlet);
|
||||||
});
|
});
|
||||||
}
|
});
|
||||||
});
|
chooser.show(null, false); /*setting selectMax to true will select all available option*/
|
||||||
chooser.show(null, false); /*setting selectMax to true will select all available option*/
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
private void createCustomGauntlet() {
|
private void createCustomGauntlet() {
|
||||||
GuiChoose.getInteger(Forge.getLocalizer().getMessage("lblHowManyOpponents"), 3, 50, new Callback<Integer>() {
|
GuiChoose.getInteger(Forge.getLocalizer().getMessage("lblHowManyOpponents"), 3, 50, numOpponents -> {
|
||||||
@Override
|
if (numOpponents == null) { return; }
|
||||||
public void run(final Integer numOpponents) {
|
|
||||||
if (numOpponents == null) { return; }
|
|
||||||
|
|
||||||
GauntletData gauntlet = new GauntletData();
|
GauntletData gauntlet = new GauntletData();
|
||||||
gauntlet.setDecks(new ArrayList<>());
|
gauntlet.setDecks(new ArrayList<>());
|
||||||
promptForAiDeck(gauntlet, numOpponents);
|
promptForAiDeck(gauntlet, numOpponents);
|
||||||
}
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
private void createCustomCommanderGauntlet() {
|
private void createCustomCommanderGauntlet() {
|
||||||
GuiChoose.getInteger(Forge.getLocalizer().getMessage("lblHowManyOpponents"), 3, 50, new Callback<Integer>() {
|
GuiChoose.getInteger(Forge.getLocalizer().getMessage("lblHowManyOpponents"), 3, 50, numOpponents -> {
|
||||||
@Override
|
if (numOpponents == null) { return; }
|
||||||
public void run(final Integer numOpponents) {
|
|
||||||
if (numOpponents == null) { return; }
|
|
||||||
|
|
||||||
GauntletData gauntlet = new GauntletData(true);
|
GauntletData gauntlet = new GauntletData(true);
|
||||||
gauntlet.setDecks(new ArrayList<>());
|
gauntlet.setDecks(new ArrayList<>());
|
||||||
promptForAiDeck(gauntlet, numOpponents);
|
promptForAiDeck(gauntlet, numOpponents);
|
||||||
}
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
private void promptForAiDeck(final GauntletData gauntlet, final int numOpponents) {
|
private void promptForAiDeck(final GauntletData gauntlet, final int numOpponents) {
|
||||||
final int opponentNum = gauntlet.getDecks().size() + 1;
|
final int opponentNum = gauntlet.getDecks().size() + 1;
|
||||||
final GameType gameType = gauntlet.isCommanderGauntlet() ? GameType.CommanderGauntlet : GameType.Gauntlet;
|
final GameType gameType = gauntlet.isCommanderGauntlet() ? GameType.CommanderGauntlet : GameType.Gauntlet;
|
||||||
FDeckChooser.promptForDeck(Forge.getLocalizer().getMessage("lblSelectDeckForOpponent") + " " + opponentNum + " / " + numOpponents, gameType, true, new Callback<Deck>() {
|
FDeckChooser.promptForDeck(Forge.getLocalizer().getMessage("lblSelectDeckForOpponent") + " " + opponentNum + " / " + numOpponents, gameType, true, aiDeck -> {
|
||||||
@Override
|
if (aiDeck == null) { return; }
|
||||||
public void run(Deck aiDeck) {
|
|
||||||
if (aiDeck == null) { return; }
|
|
||||||
|
|
||||||
gauntlet.getDecks().add(aiDeck);
|
gauntlet.getDecks().add(aiDeck);
|
||||||
gauntlet.getEventNames().add(aiDeck.getName());
|
gauntlet.getEventNames().add(aiDeck.getName());
|
||||||
|
|
||||||
if (opponentNum < numOpponents) {
|
if (opponentNum < numOpponents) {
|
||||||
promptForAiDeck(gauntlet, numOpponents);
|
promptForAiDeck(gauntlet, numOpponents);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
//once all ai decks have been selected, prompt for user deck
|
//once all ai decks have been selected, prompt for user deck
|
||||||
FDeckChooser.promptForDeck(Forge.getLocalizer().getMessage("lblSelectYourDeck"), gameType, false, new Callback<Deck>() {
|
FDeckChooser.promptForDeck(Forge.getLocalizer().getMessage("lblSelectYourDeck"), gameType, false, userDeck -> {
|
||||||
@Override
|
if (userDeck == null) { return; }
|
||||||
public void run(Deck userDeck) {
|
|
||||||
if (userDeck == null) { return; }
|
|
||||||
|
|
||||||
gauntlet.setUserDeck(userDeck);
|
gauntlet.setUserDeck(userDeck);
|
||||||
GauntletUtil.setDefaultGauntletName(gauntlet, GauntletIO.PREFIX_CUSTOM);
|
GauntletUtil.setDefaultGauntletName(gauntlet, GauntletIO.PREFIX_CUSTOM);
|
||||||
launchGauntlet(gauntlet);
|
launchGauntlet(gauntlet);
|
||||||
}
|
});
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -224,26 +189,20 @@ public class NewGauntletScreen extends LaunchScreen {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
GuiChoose.oneOrNone(Forge.getLocalizer().getMessage("lblSelectGauntletContest"), contests, new Callback<GauntletData>() {
|
GuiChoose.oneOrNone(Forge.getLocalizer().getMessage("lblSelectGauntletContest"), contests, contest -> {
|
||||||
@Override
|
if (contest == null) { return; }
|
||||||
public void run(final GauntletData contest) {
|
|
||||||
if (contest == null) { return; }
|
|
||||||
|
|
||||||
FDeckChooser.promptForDeck(Forge.getLocalizer().getMessage("lblSelectYourDeck"), GameType.Gauntlet, false, new Callback<Deck>() {
|
FDeckChooser.promptForDeck(Forge.getLocalizer().getMessage("lblSelectYourDeck"), GameType.Gauntlet, false, userDeck -> {
|
||||||
@Override
|
if (userDeck == null) { return; }
|
||||||
public void run(final Deck userDeck) {
|
|
||||||
if (userDeck == null) { return; }
|
|
||||||
|
|
||||||
//create copy of contest to use as gauntlet
|
//create copy of contest to use as gauntlet
|
||||||
GauntletData gauntlet = new GauntletData();
|
GauntletData gauntlet = new GauntletData();
|
||||||
gauntlet.setDecks(new ArrayList<>(contest.getDecks()));
|
gauntlet.setDecks(new ArrayList<>(contest.getDecks()));
|
||||||
gauntlet.setEventNames(new ArrayList<>(contest.getEventNames()));
|
gauntlet.setEventNames(new ArrayList<>(contest.getEventNames()));
|
||||||
gauntlet.setUserDeck(userDeck);
|
gauntlet.setUserDeck(userDeck);
|
||||||
GauntletUtil.setDefaultGauntletName(gauntlet, contest.getDisplayName() + "_");
|
GauntletUtil.setDefaultGauntletName(gauntlet, contest.getDisplayName() + "_");
|
||||||
launchGauntlet(gauntlet);
|
launchGauntlet(gauntlet);
|
||||||
}
|
});
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -23,7 +23,6 @@ import forge.toolbox.FLabel;
|
|||||||
import forge.toolbox.FOptionPane;
|
import forge.toolbox.FOptionPane;
|
||||||
import forge.toolbox.FTextArea;
|
import forge.toolbox.FTextArea;
|
||||||
import forge.toolbox.GuiChoose;
|
import forge.toolbox.GuiChoose;
|
||||||
import forge.util.Callback;
|
|
||||||
import forge.util.Utils;
|
import forge.util.Utils;
|
||||||
|
|
||||||
public class PuzzleScreen extends LaunchScreen {
|
public class PuzzleScreen extends LaunchScreen {
|
||||||
@@ -56,32 +55,29 @@ public class PuzzleScreen extends LaunchScreen {
|
|||||||
final ArrayList<Puzzle> puzzles = PuzzleIO.loadPuzzles(ForgeConstants.PUZZLE_DIR);
|
final ArrayList<Puzzle> puzzles = PuzzleIO.loadPuzzles(ForgeConstants.PUZZLE_DIR);
|
||||||
Collections.sort(puzzles);
|
Collections.sort(puzzles);
|
||||||
|
|
||||||
GuiChoose.oneOrNone(Forge.getLocalizer().getMessage("lblChooseAPuzzle"), puzzles, new Callback<Puzzle>() {
|
GuiChoose.oneOrNone(Forge.getLocalizer().getMessage("lblChooseAPuzzle"), puzzles, chosen -> {
|
||||||
@Override
|
if (chosen != null) {
|
||||||
public void run(final Puzzle chosen) {
|
LoadingOverlay.show(Forge.getLocalizer().getMessage("lblLoadingThePuzzle"), true, () -> {
|
||||||
if (chosen != null) {
|
// Load selected puzzle
|
||||||
LoadingOverlay.show(Forge.getLocalizer().getMessage("lblLoadingThePuzzle"), true, () -> {
|
final HostedMatch hostedMatch = GuiBase.getInterface().hostMatch();
|
||||||
// Load selected puzzle
|
hostedMatch.setStartGameHook(() -> chosen.applyToGame(hostedMatch.getGame()));
|
||||||
final HostedMatch hostedMatch = GuiBase.getInterface().hostMatch();
|
|
||||||
hostedMatch.setStartGameHook(() -> chosen.applyToGame(hostedMatch.getGame()));
|
|
||||||
|
|
||||||
hostedMatch.setEndGameHook((() -> chosen.savePuzzleSolve(hostedMatch.getGame().getOutcome().isWinner(GamePlayerUtil.getGuiPlayer()))));
|
hostedMatch.setEndGameHook((() -> chosen.savePuzzleSolve(hostedMatch.getGame().getOutcome().isWinner(GamePlayerUtil.getGuiPlayer()))));
|
||||||
|
|
||||||
final List<RegisteredPlayer> players = new ArrayList<>();
|
final List<RegisteredPlayer> players = new ArrayList<>();
|
||||||
final RegisteredPlayer human = new RegisteredPlayer(new Deck()).setPlayer(GamePlayerUtil.getGuiPlayer());
|
final RegisteredPlayer human = new RegisteredPlayer(new Deck()).setPlayer(GamePlayerUtil.getGuiPlayer());
|
||||||
human.setStartingHand(0);
|
human.setStartingHand(0);
|
||||||
players.add(human);
|
players.add(human);
|
||||||
|
|
||||||
final RegisteredPlayer ai = new RegisteredPlayer(new Deck()).setPlayer(GamePlayerUtil.createAiPlayer());
|
final RegisteredPlayer ai = new RegisteredPlayer(new Deck()).setPlayer(GamePlayerUtil.createAiPlayer());
|
||||||
ai.setStartingHand(0);
|
ai.setStartingHand(0);
|
||||||
players.add(ai);
|
players.add(ai);
|
||||||
|
|
||||||
GameRules rules = new GameRules(GameType.Puzzle);
|
GameRules rules = new GameRules(GameType.Puzzle);
|
||||||
rules.setGamesPerMatch(1);
|
rules.setGamesPerMatch(1);
|
||||||
hostedMatch.startMatch(rules, null, players, human, GuiBase.getInterface().getNewGuiGame());
|
hostedMatch.startMatch(rules, null, players, human, GuiBase.getInterface().getNewGuiGame());
|
||||||
FOptionPane.showMessageDialog(chosen.getGoalDescription(), chosen.getName());
|
FOptionPane.showMessageDialog(chosen.getGoalDescription(), chosen.getName());
|
||||||
});
|
});
|
||||||
}
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -69,40 +69,34 @@ public class DraftingProcessScreen extends FDeckEditor {
|
|||||||
}
|
}
|
||||||
|
|
||||||
FThreads.invokeInEdtNowOrLater(() -> {
|
FThreads.invokeInEdtNowOrLater(() -> {
|
||||||
FOptionPane.showInputDialog(Forge.getLocalizer().getMessage("lblSaveDraftAs") + "?", new Callback<>() {
|
FOptionPane.showInputDialog(Forge.getLocalizer().getMessage("lblSaveDraftAs") + "?", name -> {
|
||||||
@Override
|
if (StringUtils.isEmpty(name)) {
|
||||||
public void run(final String name) {
|
save(callback); //re-prompt if user doesn't pick a name
|
||||||
if (StringUtils.isEmpty(name)) {
|
return;
|
||||||
save(callback); //re-prompt if user doesn't pick a name
|
}
|
||||||
|
|
||||||
|
// Check for overwrite case
|
||||||
|
for (DeckGroup d : FModel.getDecks().getDraft()) {
|
||||||
|
if (name.equalsIgnoreCase(d.getName())) {
|
||||||
|
FOptionPane.showConfirmDialog(
|
||||||
|
Forge.getLocalizer().getMessage("lblAlreadyDeckName") + name + Forge.getLocalizer().getMessage("lblOverwriteConfirm"),
|
||||||
|
Forge.getLocalizer().getMessage("lblOverwriteDeck"), false, result -> {
|
||||||
|
if (result) {
|
||||||
|
finishSave(name);
|
||||||
|
if (callback != null) {
|
||||||
|
callback.run(true);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
save(callback); //If no overwrite, recurse
|
||||||
|
}
|
||||||
|
});
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Check for overwrite case
|
finishSave(name);
|
||||||
for (DeckGroup d : FModel.getDecks().getDraft()) {
|
if (callback != null) {
|
||||||
if (name.equalsIgnoreCase(d.getName())) {
|
callback.run(true);
|
||||||
FOptionPane.showConfirmDialog(
|
|
||||||
Forge.getLocalizer().getMessage("lblAlreadyDeckName") + name + Forge.getLocalizer().getMessage("lblOverwriteConfirm"),
|
|
||||||
Forge.getLocalizer().getMessage("lblOverwriteDeck"), false, new Callback<>() {
|
|
||||||
@Override
|
|
||||||
public void run(Boolean result) {
|
|
||||||
if (result) {
|
|
||||||
finishSave(name);
|
|
||||||
if (callback != null) {
|
|
||||||
callback.run(true);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
save(callback); //If no overwrite, recurse
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
finishSave(name);
|
|
||||||
if (callback != null) {
|
|
||||||
callback.run(true);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -1188,12 +1188,9 @@ public class MatchScreen extends FScreen {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void confirmUserConcedes() {
|
private void confirmUserConcedes() {
|
||||||
final Callback<Boolean> callback = new Callback<>() {
|
final Callback<Boolean> callback = result -> {
|
||||||
@Override
|
if (result) {
|
||||||
public void run(Boolean result) {
|
getGameController().concede();
|
||||||
if (result) {
|
|
||||||
getGameController().concede();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -13,7 +13,6 @@ import forge.menu.FPopupMenu;
|
|||||||
import forge.model.FModel;
|
import forge.model.FModel;
|
||||||
import forge.screens.FScreen;
|
import forge.screens.FScreen;
|
||||||
import forge.toolbox.FOptionPane;
|
import forge.toolbox.FOptionPane;
|
||||||
import forge.util.Callback;
|
|
||||||
|
|
||||||
public class OnlineMenu extends FPopupMenu {
|
public class OnlineMenu extends FPopupMenu {
|
||||||
public enum OnlineScreen {
|
public enum OnlineScreen {
|
||||||
@@ -31,23 +30,20 @@ public class OnlineMenu extends FPopupMenu {
|
|||||||
if(screenClass == null) {
|
if(screenClass == null) {
|
||||||
FOptionPane.showConfirmDialog(
|
FOptionPane.showConfirmDialog(
|
||||||
Forge.getLocalizer().getMessage("lblLeaveLobbyDescription"),
|
Forge.getLocalizer().getMessage("lblLeaveLobbyDescription"),
|
||||||
Forge.getLocalizer().getMessage("lblDisconnect"), new Callback<Boolean>() {
|
Forge.getLocalizer().getMessage("lblDisconnect"), result -> {
|
||||||
@Override
|
if (result) {
|
||||||
public void run(Boolean result) {
|
if (FServerManager.getInstance() != null)
|
||||||
if (result) {
|
if(FServerManager.getInstance().isHosting()) {
|
||||||
if (FServerManager.getInstance() != null)
|
FServerManager.getInstance().unsetReady();
|
||||||
if(FServerManager.getInstance().isHosting()) {
|
FServerManager.getInstance().stopServer();
|
||||||
FServerManager.getInstance().unsetReady();
|
}
|
||||||
FServerManager.getInstance().stopServer();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (OnlineLobbyScreen.getfGameClient() != null)
|
if (OnlineLobbyScreen.getfGameClient() != null)
|
||||||
OnlineLobbyScreen.closeClient();
|
OnlineLobbyScreen.closeClient();
|
||||||
|
|
||||||
Forge.back();
|
Forge.back();
|
||||||
screen = null;
|
screen = null;
|
||||||
OnlineLobbyScreen.clearGameLobby();
|
OnlineLobbyScreen.clearGameLobby();
|
||||||
}
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
return;
|
return;
|
||||||
|
|||||||
@@ -355,13 +355,10 @@ public class ConquestAEtherScreen extends FScreen {
|
|||||||
caption = caption0;
|
caption = caption0;
|
||||||
options = ImmutableList.copyOf(options0);
|
options = ImmutableList.copyOf(options0);
|
||||||
setSelectedOption(options.get(0));
|
setSelectedOption(options.get(0));
|
||||||
setCommand(e -> GuiChoose.getChoices(Forge.getLocalizer().getMessage("lblSelectCaptionFilter", caption), 0, 1, options, Set.of(selectedOption), null, new Callback<>() {
|
setCommand(e -> GuiChoose.getChoices(Forge.getLocalizer().getMessage("lblSelectCaptionFilter", caption), 0, 1, options, Set.of(selectedOption), null, result -> {
|
||||||
@Override
|
if (!result.isEmpty()) {
|
||||||
public void run(List<AEtherFilter> result) {
|
setSelectedOption(result.get(0));
|
||||||
if (!result.isEmpty()) {
|
updateFilteredPool();
|
||||||
setSelectedOption(result.get(0));
|
|
||||||
updateFilteredPool();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -95,12 +95,7 @@ public class ConquestCommandersScreen extends FScreen {
|
|||||||
String problem = DeckFormat.PlanarConquest.getDeckConformanceProblem(commander.getDeck());
|
String problem = DeckFormat.PlanarConquest.getDeckConformanceProblem(commander.getDeck());
|
||||||
if (problem != null) {
|
if (problem != null) {
|
||||||
//prevent selecting a commander with an invalid deck
|
//prevent selecting a commander with an invalid deck
|
||||||
FOptionPane.showMessageDialog(Forge.getLocalizer().getMessage("lblCantSelectDeckBecause", commander.getName(), problem), Forge.getLocalizer().getMessage("lblInvalidDeck"), FOptionPane.INFORMATION_ICON, new Callback<Integer>() {
|
FOptionPane.showMessageDialog(Forge.getLocalizer().getMessage("lblCantSelectDeckBecause", commander.getName(), problem), Forge.getLocalizer().getMessage("lblInvalidDeck"), FOptionPane.INFORMATION_ICON, result -> canCloseCallback.run(false));
|
||||||
@Override
|
|
||||||
public void run(Integer result) {
|
|
||||||
canCloseCallback.run(false);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -28,7 +28,6 @@ import forge.gamemodes.planarconquest.ConquestBattle;
|
|||||||
import forge.gamemodes.planarconquest.ConquestChaosBattle;
|
import forge.gamemodes.planarconquest.ConquestChaosBattle;
|
||||||
import forge.gamemodes.planarconquest.ConquestData;
|
import forge.gamemodes.planarconquest.ConquestData;
|
||||||
import forge.gamemodes.planarconquest.ConquestEvent;
|
import forge.gamemodes.planarconquest.ConquestEvent;
|
||||||
import forge.gamemodes.planarconquest.ConquestEvent.ChaosWheelOutcome;
|
|
||||||
import forge.gamemodes.planarconquest.ConquestEvent.ConquestEventRecord;
|
import forge.gamemodes.planarconquest.ConquestEvent.ConquestEventRecord;
|
||||||
import forge.gamemodes.planarconquest.ConquestLocation;
|
import forge.gamemodes.planarconquest.ConquestLocation;
|
||||||
import forge.gamemodes.planarconquest.ConquestPlane;
|
import forge.gamemodes.planarconquest.ConquestPlane;
|
||||||
@@ -50,7 +49,6 @@ import forge.toolbox.FDisplayObject;
|
|||||||
import forge.toolbox.FList;
|
import forge.toolbox.FList;
|
||||||
import forge.toolbox.FOptionPane;
|
import forge.toolbox.FOptionPane;
|
||||||
import forge.toolbox.FScrollPane;
|
import forge.toolbox.FScrollPane;
|
||||||
import forge.util.Callback;
|
|
||||||
import forge.util.Utils;
|
import forge.util.Utils;
|
||||||
import forge.util.collect.FCollectionView;
|
import forge.util.collect.FCollectionView;
|
||||||
|
|
||||||
@@ -130,38 +128,30 @@ public class ConquestMultiverseScreen extends FScreen {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void spinChaosWheel() {
|
private void spinChaosWheel() {
|
||||||
ConquestChaosWheel.spin(new Callback<ChaosWheelOutcome>() {
|
ConquestChaosWheel.spin(outcome -> {
|
||||||
@Override
|
switch (outcome) {
|
||||||
public void run(ChaosWheelOutcome outcome) {
|
case BOOSTER:
|
||||||
switch (outcome) {
|
awardBoosters(model.getCurrentPlane().getAwardPool(), 1);
|
||||||
case BOOSTER:
|
break;
|
||||||
awardBoosters(model.getCurrentPlane().getAwardPool(), 1);
|
case DOUBLE_BOOSTER:
|
||||||
break;
|
awardBoosters(model.getCurrentPlane().getAwardPool(), 2);
|
||||||
case DOUBLE_BOOSTER:
|
break;
|
||||||
awardBoosters(model.getCurrentPlane().getAwardPool(), 2);
|
case SHARDS:
|
||||||
break;
|
awardShards(FModel.getConquestPreferences().getPrefInt(CQPref.AETHER_WHEEL_SHARDS), false);
|
||||||
case SHARDS:
|
break;
|
||||||
awardShards(FModel.getConquestPreferences().getPrefInt(CQPref.AETHER_WHEEL_SHARDS), false);
|
case DOUBLE_SHARDS:
|
||||||
break;
|
awardShards(2 * FModel.getConquestPreferences().getPrefInt(CQPref.AETHER_WHEEL_SHARDS), false);
|
||||||
case DOUBLE_SHARDS:
|
break;
|
||||||
awardShards(2 * FModel.getConquestPreferences().getPrefInt(CQPref.AETHER_WHEEL_SHARDS), false);
|
case PLANESWALK:
|
||||||
break;
|
if (model.getUnlockedPlaneCount() == model.getAccessiblePlaneCount()) {
|
||||||
case PLANESWALK:
|
FOptionPane.showMessageDialog(Forge.getLocalizer().getMessage("lblAllPlanesUnlockedNotify"), Forge.getLocalizer().getMessage("lblAllPlanesUnlocked"), EMBLEM_IMAGE, result -> launchChaosBattle());
|
||||||
if (model.getUnlockedPlaneCount() == model.getAccessiblePlaneCount()) {
|
} else {
|
||||||
FOptionPane.showMessageDialog(Forge.getLocalizer().getMessage("lblAllPlanesUnlockedNotify"), Forge.getLocalizer().getMessage("lblAllPlanesUnlocked"), EMBLEM_IMAGE, new Callback<Integer>() {
|
awardBonusPlaneswalkEmblems(FModel.getConquestPreferences().getPrefInt(CQPref.PLANESWALK_WHEEL_EMBLEMS));
|
||||||
@Override
|
|
||||||
public void run(Integer result) {
|
|
||||||
launchChaosBattle();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
awardBonusPlaneswalkEmblems(FModel.getConquestPreferences().getPrefInt(CQPref.PLANESWALK_WHEEL_EMBLEMS));
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case CHAOS:
|
|
||||||
launchChaosBattle();
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
break;
|
||||||
|
case CHAOS:
|
||||||
|
launchChaosBattle();
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -205,19 +205,16 @@ public class QuestSpellShopScreen extends TabPageScreen<QuestSpellShopScreen> {
|
|||||||
final int max = itemManager.getItemCount(item);
|
final int max = itemManager.getItemCount(item);
|
||||||
if (max == 0) { return; }
|
if (max == 0) { return; }
|
||||||
|
|
||||||
final Callback<Integer> callback = new Callback<Integer>() {
|
final Callback<Integer> callback = result -> {
|
||||||
@Override
|
if (result == null || result <= 0) { return; }
|
||||||
public void run(final Integer result) {
|
|
||||||
if (result == null || result <= 0) { return; }
|
|
||||||
|
|
||||||
//invoke in background thread so other dialogs can be shown properly
|
//invoke in background thread so other dialogs can be shown properly
|
||||||
FThreads.invokeInBackgroundThread(() -> {
|
FThreads.invokeInBackgroundThread(() -> {
|
||||||
ItemPool<InventoryItem> items = new ItemPool<>(InventoryItem.class);
|
ItemPool<InventoryItem> items = new ItemPool<>(InventoryItem.class);
|
||||||
items.add(item, result);
|
items.add(item, result);
|
||||||
activateItems(items);
|
activateItems(items);
|
||||||
FThreads.invokeInEdtLater(() -> parentScreen.updateCreditsLabel());
|
FThreads.invokeInEdtLater(() -> parentScreen.updateCreditsLabel());
|
||||||
});
|
});
|
||||||
}
|
|
||||||
};
|
};
|
||||||
if (max == 1) {
|
if (max == 1) {
|
||||||
callback.run(max);
|
callback.run(max);
|
||||||
|
|||||||
@@ -296,12 +296,9 @@ public class FilesPage extends TabPage<SettingsScreen> {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void select() {
|
public void select() {
|
||||||
new GuiDownloader(createService(), new Callback<Boolean>() {
|
new GuiDownloader(createService(), finished -> {
|
||||||
@Override
|
if (finished) {
|
||||||
public void run(Boolean finished) {
|
finishCallback();
|
||||||
if (finished) {
|
|
||||||
finishCallback();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}).show();
|
}).show();
|
||||||
}
|
}
|
||||||
@@ -322,20 +319,14 @@ public class FilesPage extends TabPage<SettingsScreen> {
|
|||||||
@Override
|
@Override
|
||||||
public void select() {
|
public void select() {
|
||||||
final Map<String, String> categories = getCategories();
|
final Map<String, String> categories = getCategories();
|
||||||
GuiChoose.one(prompt, categories.keySet(), new Callback<String>() {
|
GuiChoose.one(prompt, categories.keySet(), result -> {
|
||||||
@Override
|
final String url = categories.get(result);
|
||||||
public void run(String result) {
|
final String name = url.substring(url.lastIndexOf("/") + 2);
|
||||||
final String url = categories.get(result);
|
new GuiDownloader(new GuiDownloadZipService(name, name, url, ForgeConstants.FONTS_DIR, null, null), finished -> {
|
||||||
final String name = url.substring(url.lastIndexOf("/") + 2);
|
if (finished) {
|
||||||
new GuiDownloader(new GuiDownloadZipService(name, name, url, ForgeConstants.FONTS_DIR, null, null), new Callback<Boolean>() {
|
finishCallback();
|
||||||
@Override
|
}
|
||||||
public void run(Boolean finished) {
|
}).show();
|
||||||
if (finished) {
|
|
||||||
finishCallback();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}).show();
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
protected abstract Map<String, String> getCategories();
|
protected abstract Map<String, String> getCategories();
|
||||||
@@ -355,14 +346,11 @@ public class FilesPage extends TabPage<SettingsScreen> {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void select() {
|
public void select() {
|
||||||
FFileChooser.show(Forge.getLocalizer().getMessage("lblSelect").replace("%s", label), ChoiceType.GetDirectory, description, new Callback<String>() {
|
FFileChooser.show(Forge.getLocalizer().getMessage("lblSelect").replace("%s", label), ChoiceType.GetDirectory, description, result -> {
|
||||||
@Override
|
if (StringUtils.isEmpty(result) || description.equals(result)) { return; }
|
||||||
public void run(String result) {
|
updateDir(result);
|
||||||
if (StringUtils.isEmpty(result) || description.equals(result)) { return; }
|
onDirectoryChanged(result);
|
||||||
updateDir(result);
|
FOptionPane.showMessageDialog(Forge.getLocalizer().getMessage("lblRestartForgeMoveFilesNewLocation"), Forge.getLocalizer().getMessage("lblRestartRequired"), FOptionPane.INFORMATION_ICON);
|
||||||
onDirectoryChanged(result);
|
|
||||||
FOptionPane.showMessageDialog(Forge.getLocalizer().getMessage("lblRestartForgeMoveFilesNewLocation"), Forge.getLocalizer().getMessage("lblRestartRequired"), FOptionPane.INFORMATION_ICON);
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
protected abstract void onDirectoryChanged(String newDir);
|
protected abstract void onDirectoryChanged(String newDir);
|
||||||
|
|||||||
@@ -28,7 +28,6 @@ import forge.toolbox.FCheckBox;
|
|||||||
import forge.toolbox.FGroupList;
|
import forge.toolbox.FGroupList;
|
||||||
import forge.toolbox.FList;
|
import forge.toolbox.FList;
|
||||||
import forge.toolbox.FOptionPane;
|
import forge.toolbox.FOptionPane;
|
||||||
import forge.util.Callback;
|
|
||||||
import forge.util.Utils;
|
import forge.util.Utils;
|
||||||
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
@@ -75,12 +74,9 @@ public class SettingsPage extends TabPage<SettingsScreen> {
|
|||||||
|
|
||||||
FLanguage.changeLanguage(newValue);
|
FLanguage.changeLanguage(newValue);
|
||||||
|
|
||||||
FOptionPane.showConfirmDialog(Forge.getLocalizer().getMessage("lblRestartForgeDescription"), Forge.getLocalizer().getMessage("lblRestartForge"), Forge.getLocalizer().getMessage("lblRestart"), Forge.getLocalizer().getMessage("lblLater"), new Callback<Boolean>() {
|
FOptionPane.showConfirmDialog(Forge.getLocalizer().getMessage("lblRestartForgeDescription"), Forge.getLocalizer().getMessage("lblRestartForge"), Forge.getLocalizer().getMessage("lblRestart"), Forge.getLocalizer().getMessage("lblLater"), result -> {
|
||||||
@Override
|
if (result) {
|
||||||
public void run(Boolean result) {
|
Forge.restart(true);
|
||||||
if (result) {
|
|
||||||
Forge.restart(true);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -125,12 +121,9 @@ public class SettingsPage extends TabPage<SettingsScreen> {
|
|||||||
boolean landscapeMode = FModel.getPreferences().getPrefBoolean(FPref.UI_LANDSCAPE_MODE);
|
boolean landscapeMode = FModel.getPreferences().getPrefBoolean(FPref.UI_LANDSCAPE_MODE);
|
||||||
Forge.getDeviceAdapter().setLandscapeMode(landscapeMode); //ensure device able to save off ini file so landscape change takes effect
|
Forge.getDeviceAdapter().setLandscapeMode(landscapeMode); //ensure device able to save off ini file so landscape change takes effect
|
||||||
if (Forge.isLandscapeMode() != landscapeMode) {
|
if (Forge.isLandscapeMode() != landscapeMode) {
|
||||||
FOptionPane.showConfirmDialog(Forge.getLocalizer().getMessage("lblRestartForgeDescription"), Forge.getLocalizer().getMessage("lblRestartForge"), Forge.getLocalizer().getMessage("lblRestart"), Forge.getLocalizer().getMessage("lblLater"), new Callback<Boolean>() {
|
FOptionPane.showConfirmDialog(Forge.getLocalizer().getMessage("lblRestartForgeDescription"), Forge.getLocalizer().getMessage("lblRestartForge"), Forge.getLocalizer().getMessage("lblRestart"), Forge.getLocalizer().getMessage("lblLater"), result -> {
|
||||||
@Override
|
if (result) {
|
||||||
public void run(Boolean result) {
|
Forge.restart(true);
|
||||||
if (result) {
|
|
||||||
Forge.restart(true);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -376,12 +369,9 @@ public class SettingsPage extends TabPage<SettingsScreen> {
|
|||||||
Forge.getLocalizer().getMessage("lblRestartForgeDescription"),
|
Forge.getLocalizer().getMessage("lblRestartForgeDescription"),
|
||||||
Forge.getLocalizer().getMessage("lblRestartForge"),
|
Forge.getLocalizer().getMessage("lblRestartForge"),
|
||||||
Forge.getLocalizer().getMessage("lblRestart"),
|
Forge.getLocalizer().getMessage("lblRestart"),
|
||||||
Forge.getLocalizer().getMessage("lblLater"), new Callback<Boolean>() {
|
Forge.getLocalizer().getMessage("lblLater"), result -> {
|
||||||
@Override
|
if (result) {
|
||||||
public void run(Boolean result) {
|
Forge.restart(true);
|
||||||
if (result) {
|
|
||||||
Forge.restart(true);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
@@ -397,12 +387,9 @@ public class SettingsPage extends TabPage<SettingsScreen> {
|
|||||||
Forge.getLocalizer().getMessage("lblRestartForgeDescription"),
|
Forge.getLocalizer().getMessage("lblRestartForgeDescription"),
|
||||||
Forge.getLocalizer().getMessage("lblRestartForge"),
|
Forge.getLocalizer().getMessage("lblRestartForge"),
|
||||||
Forge.getLocalizer().getMessage("lblRestart"),
|
Forge.getLocalizer().getMessage("lblRestart"),
|
||||||
Forge.getLocalizer().getMessage("lblLater"), new Callback<Boolean>() {
|
Forge.getLocalizer().getMessage("lblLater"), result -> {
|
||||||
@Override
|
if (result) {
|
||||||
public void run(Boolean result) {
|
Forge.restart(true);
|
||||||
if (result) {
|
|
||||||
Forge.restart(true);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
@@ -418,12 +405,9 @@ public class SettingsPage extends TabPage<SettingsScreen> {
|
|||||||
Forge.getLocalizer().getMessage("lblRestartForgeDescription"),
|
Forge.getLocalizer().getMessage("lblRestartForgeDescription"),
|
||||||
Forge.getLocalizer().getMessage("lblRestartForge"),
|
Forge.getLocalizer().getMessage("lblRestartForge"),
|
||||||
Forge.getLocalizer().getMessage("lblRestart"),
|
Forge.getLocalizer().getMessage("lblRestart"),
|
||||||
Forge.getLocalizer().getMessage("lblLater"), new Callback<Boolean>() {
|
Forge.getLocalizer().getMessage("lblLater"), result -> {
|
||||||
@Override
|
if (result) {
|
||||||
public void run(Boolean result) {
|
Forge.restart(true);
|
||||||
if (result) {
|
|
||||||
Forge.restart(true);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
@@ -458,12 +442,9 @@ public class SettingsPage extends TabPage<SettingsScreen> {
|
|||||||
Forge.getLocalizer().getMessage("lblRestartForgeDescription"),
|
Forge.getLocalizer().getMessage("lblRestartForgeDescription"),
|
||||||
Forge.getLocalizer().getMessage("lblRestartForge"),
|
Forge.getLocalizer().getMessage("lblRestartForge"),
|
||||||
Forge.getLocalizer().getMessage("lblRestart"),
|
Forge.getLocalizer().getMessage("lblRestart"),
|
||||||
Forge.getLocalizer().getMessage("lblLater"), new Callback<Boolean>() {
|
Forge.getLocalizer().getMessage("lblLater"), result -> {
|
||||||
@Override
|
if (result) {
|
||||||
public void run(Boolean result) {
|
Forge.restart(true);
|
||||||
if (result) {
|
|
||||||
Forge.restart(true);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
@@ -495,12 +476,9 @@ public class SettingsPage extends TabPage<SettingsScreen> {
|
|||||||
Forge.getLocalizer().getMessage("lblRestartForgeDescription"),
|
Forge.getLocalizer().getMessage("lblRestartForgeDescription"),
|
||||||
Forge.getLocalizer().getMessage("lblRestartForge"),
|
Forge.getLocalizer().getMessage("lblRestartForge"),
|
||||||
Forge.getLocalizer().getMessage("lblRestart"),
|
Forge.getLocalizer().getMessage("lblRestart"),
|
||||||
Forge.getLocalizer().getMessage("lblLater"), new Callback<Boolean>() {
|
Forge.getLocalizer().getMessage("lblLater"), result -> {
|
||||||
@Override
|
if (result) {
|
||||||
public void run(Boolean result) {
|
Forge.restart(true);
|
||||||
if (result) {
|
|
||||||
Forge.restart(true);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
@@ -958,21 +936,18 @@ public class SettingsPage extends TabPage<SettingsScreen> {
|
|||||||
description,
|
description,
|
||||||
currentValue,
|
currentValue,
|
||||||
null,
|
null,
|
||||||
new Callback<String>() {
|
input -> {
|
||||||
@Override
|
if (input == null) return; // cancelled
|
||||||
public void run(String input) {
|
if (!input.matches("\\d+")) {
|
||||||
if (input == null) return; // cancelled
|
FOptionPane.showMessageDialog("Please enter a valid number.", "Invalid Input");
|
||||||
if (!input.matches("\\d+")) {
|
return;
|
||||||
FOptionPane.showMessageDialog("Please enter a valid number.", "Invalid Input");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
int value = Integer.parseInt(input);
|
|
||||||
if (value < minValue || value > maxValue) {
|
|
||||||
FOptionPane.showMessageDialog("Value must be between " + minValue + " and " + maxValue + ".", "Invalid Input");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
valueChanged(input);
|
|
||||||
}
|
}
|
||||||
|
int value = Integer.parseInt(input);
|
||||||
|
if (value < minValue || value > maxValue) {
|
||||||
|
FOptionPane.showMessageDialog("Value must be between " + minValue + " and " + maxValue + ".", "Invalid Input");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
valueChanged(input);
|
||||||
},
|
},
|
||||||
true // isNumeric
|
true // isNumeric
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -83,12 +83,7 @@ public class FOptionPane extends FDialog {
|
|||||||
|
|
||||||
public static void showConfirmDialog(final String message, final String title, final String yesButtonText, final String noButtonText, final boolean defaultYes, final Callback<Boolean> callback) {
|
public static void showConfirmDialog(final String message, final String title, final String yesButtonText, final String noButtonText, final boolean defaultYes, final Callback<Boolean> callback) {
|
||||||
final List<String> options = ImmutableList.of(yesButtonText, noButtonText);
|
final List<String> options = ImmutableList.of(yesButtonText, noButtonText);
|
||||||
showOptionDialog(message, title, QUESTION_ICON, options, defaultYes ? 0 : 1, new Callback<Integer>() {
|
showOptionDialog(message, title, QUESTION_ICON, options, defaultYes ? 0 : 1, result -> callback.run(result == 0));
|
||||||
@Override
|
|
||||||
public void run(final Integer result) {
|
|
||||||
callback.run(result == 0);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void showOptionDialog(final String message, final String title, final FImage icon, final List<String> options, final Callback<Integer> callback) {
|
public static void showOptionDialog(final String message, final String title, final FImage icon, final List<String> options, final Callback<Integer> callback) {
|
||||||
@@ -189,19 +184,15 @@ public class FOptionPane extends FDialog {
|
|||||||
container.add(inputField);
|
container.add(inputField);
|
||||||
container.setHeight(inputField.getHeight() + padTop + PADDING);
|
container.setHeight(inputField.getHeight() + padTop + PADDING);
|
||||||
|
|
||||||
final FOptionPane optionPane = new FOptionPane(message, null, title, null, container, ImmutableList.of(Forge.getLocalizer().getMessage("lblOK"), Forge.getLocalizer().getMessage("lblCancel")), 0, new Callback<Integer>() {
|
final FOptionPane optionPane = new FOptionPane(message, null, title, null, container, ImmutableList.of(Forge.getLocalizer().getMessage("lblOK"), Forge.getLocalizer().getMessage("lblCancel")), 0, result -> {
|
||||||
@SuppressWarnings("unchecked")
|
if (result == 0) {
|
||||||
@Override
|
if (txtInput != null) {
|
||||||
public void run(final Integer result) {
|
callback.run((T)txtInput.getText());
|
||||||
if (result == 0) {
|
|
||||||
if (txtInput != null) {
|
|
||||||
callback.run((T)txtInput.getText());
|
|
||||||
} else {
|
|
||||||
callback.run(cbInput.getSelectedItem());
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
callback.run(null);
|
callback.run(cbInput.getSelectedItem());
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
callback.run(null);
|
||||||
}
|
}
|
||||||
}) {
|
}) {
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -2,7 +2,6 @@ package forge.toolbox;
|
|||||||
|
|
||||||
import forge.Forge;
|
import forge.Forge;
|
||||||
import forge.toolbox.FEvent.FEventType;
|
import forge.toolbox.FEvent.FEventType;
|
||||||
import forge.util.Callback;
|
|
||||||
|
|
||||||
|
|
||||||
public class FSpinner extends FTextField {
|
public class FSpinner extends FTextField {
|
||||||
@@ -36,16 +35,13 @@ public class FSpinner extends FTextField {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean tap(float x, float y, int count) {
|
public boolean tap(float x, float y, int count) {
|
||||||
GuiChoose.getInteger(Forge.getLocalizer().getMessage("lblSelectANumber"), minValue, maxValue, new Callback<Integer>() {
|
GuiChoose.getInteger(Forge.getLocalizer().getMessage("lblSelectANumber"), minValue, maxValue, result -> {
|
||||||
@Override
|
if (result != null && result != value) {
|
||||||
public void run(Integer result) {
|
int oldValue = value;
|
||||||
if (result != null && result != value) {
|
setValue(result);
|
||||||
int oldValue = value;
|
if (getChangedHandler() != null) {
|
||||||
setValue(result);
|
//handle change event if value changed from input
|
||||||
if (getChangedHandler() != null) {
|
getChangedHandler().handleEvent(new FEvent(FSpinner.this, FEventType.CHANGE, oldValue));
|
||||||
//handle change event if value changed from input
|
|
||||||
getChangedHandler().handleEvent(new FEvent(FSpinner.this, FEventType.CHANGE, oldValue));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -35,12 +35,7 @@ public class GuiChoose {
|
|||||||
callback.run(null);
|
callback.run(null);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
getChoices(message, 0, 1, choices, new Callback<List<T>>() {
|
getChoices(message, 0, 1, choices, result -> callback.run(result.isEmpty() ? null : result.get(0)));
|
||||||
@Override
|
|
||||||
public void run(final List<T> result) {
|
|
||||||
callback.run(result.isEmpty() ? null : result.get(0));
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static <T> void oneOrNone(final String message, final Collection<T> choices, final Callback<T> callback) {
|
public static <T> void oneOrNone(final String message, final Collection<T> choices, final Callback<T> callback) {
|
||||||
@@ -48,12 +43,7 @@ public class GuiChoose {
|
|||||||
callback.run(null);
|
callback.run(null);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
getChoices(message, 0, 1, choices, new Callback<List<T>>() {
|
getChoices(message, 0, 1, choices, result -> callback.run(result.isEmpty() ? null : result.get(0)));
|
||||||
@Override
|
|
||||||
public void run(final List<T> result) {
|
|
||||||
callback.run(result.isEmpty() ? null : result.get(0));
|
|
||||||
}
|
|
||||||
});
|
|
||||||
} // getChoiceOptional(String,T...)
|
} // getChoiceOptional(String,T...)
|
||||||
|
|
||||||
// returned Object will never be null
|
// returned Object will never be null
|
||||||
@@ -80,12 +70,9 @@ public class GuiChoose {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
getChoices(message, 1, 1, choices, new Callback<List<T>>() {
|
getChoices(message, 1, 1, choices, result -> {
|
||||||
@Override
|
assert result.size() == 1;
|
||||||
public void run(final List<T> result) {
|
callback.run(result.get(0));
|
||||||
assert result.size() == 1;
|
|
||||||
callback.run(result.get(0));
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -99,12 +86,9 @@ public class GuiChoose {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
getChoices(message, 1, 1, choices, new Callback<List<T>>() {
|
getChoices(message, 1, 1, choices, result -> {
|
||||||
@Override
|
assert result.size() == 1;
|
||||||
public void run(final List<T> result) {
|
callback.run(result.get(0));
|
||||||
assert result.size() == 1;
|
|
||||||
callback.run(result.get(0));
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -172,52 +156,46 @@ public class GuiChoose {
|
|||||||
}
|
}
|
||||||
choices.add(Forge.getLocalizer().getMessage("lblOther") + "...");
|
choices.add(Forge.getLocalizer().getMessage("lblOther") + "...");
|
||||||
|
|
||||||
oneOrNone(message, choices, new Callback<Object>() {
|
oneOrNone(message, choices, choice -> {
|
||||||
@Override
|
if (choice instanceof Integer || choice == null) {
|
||||||
public void run(Object choice) {
|
callback.run((Integer)choice);
|
||||||
if (choice instanceof Integer || choice == null) {
|
return;
|
||||||
callback.run((Integer)choice);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
//if Other option picked, prompt for number input
|
|
||||||
String prompt = "Enter a number";
|
|
||||||
if (min != Integer.MIN_VALUE) {
|
|
||||||
if (max != Integer.MAX_VALUE) {
|
|
||||||
prompt += " between " + min + " and " + max;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
prompt += " greater than or equal to " + min;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (max != Integer.MAX_VALUE) {
|
|
||||||
prompt += " less than or equal to " + max;
|
|
||||||
}
|
|
||||||
prompt += ":";
|
|
||||||
getNumberInput(prompt, message, min, max, callback);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//if Other option picked, prompt for number input
|
||||||
|
String prompt = "Enter a number";
|
||||||
|
if (min != Integer.MIN_VALUE) {
|
||||||
|
if (max != Integer.MAX_VALUE) {
|
||||||
|
prompt += " between " + min + " and " + max;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
prompt += " greater than or equal to " + min;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (max != Integer.MAX_VALUE) {
|
||||||
|
prompt += " less than or equal to " + max;
|
||||||
|
}
|
||||||
|
prompt += ":";
|
||||||
|
getNumberInput(prompt, message, min, max, callback);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void getNumberInput(final String prompt, final String message, final int min, final int max, final Callback<Integer> callback) {
|
private static void getNumberInput(final String prompt, final String message, final int min, final int max, final Callback<Integer> callback) {
|
||||||
FOptionPane.showInputDialog(prompt, message, new Callback<String>() {
|
FOptionPane.showInputDialog(prompt, message, result -> {
|
||||||
@Override
|
if (result == null) { //that is 'cancel'
|
||||||
public void run(String result) {
|
callback.run(null);
|
||||||
if (result == null) { //that is 'cancel'
|
return;
|
||||||
callback.run(null);
|
}
|
||||||
|
if (StringUtils.isNumeric(result)) {
|
||||||
|
int val = Integer.parseInt(result);
|
||||||
|
if (val >= min && val <= max) {
|
||||||
|
callback.run(val);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (StringUtils.isNumeric(result)) {
|
|
||||||
int val = Integer.parseInt(result);
|
|
||||||
if (val >= min && val <= max) {
|
|
||||||
callback.run(val);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//re-prompt if invalid input
|
|
||||||
getNumberInput(prompt, message, min, max, callback);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//re-prompt if invalid input
|
||||||
|
getNumberInput(prompt, message, min, max, callback);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -271,12 +249,7 @@ public class GuiChoose {
|
|||||||
callback.run(null);
|
callback.run(null);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
sortedGetChoices(message, 0, 1, choices, comparer, new Callback<List<T>>() {
|
sortedGetChoices(message, 0, 1, choices, comparer, result -> callback.run(result.isEmpty() ? null : result.get(0)));
|
||||||
@Override
|
|
||||||
public void run(List<T> result) {
|
|
||||||
callback.run(result.isEmpty() ? null : result.get(0));
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// If comparer is NULL, T has to be comparable. Otherwise you'll get an exception from inside the Arrays.sort() routine
|
// If comparer is NULL, T has to be comparable. Otherwise you'll get an exception from inside the Arrays.sort() routine
|
||||||
@@ -285,12 +258,7 @@ public class GuiChoose {
|
|||||||
callback.run(null);
|
callback.run(null);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
sortedGetChoices(message, 0, 1, choices, comparer, new Callback<List<T>>() {
|
sortedGetChoices(message, 0, 1, choices, comparer, result -> callback.run(result.isEmpty() ? null : result.get(0)));
|
||||||
@Override
|
|
||||||
public void run(List<T> result) {
|
|
||||||
callback.run(result.isEmpty() ? null : result.get(0));
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// If comparer is NULL, T has to be comparable. Otherwise you'll get an exception from inside the Arrays.sort() routine
|
// If comparer is NULL, T has to be comparable. Otherwise you'll get an exception from inside the Arrays.sort() routine
|
||||||
@@ -299,12 +267,9 @@ public class GuiChoose {
|
|||||||
callback.run(null);
|
callback.run(null);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
sortedGetChoices(message, 1, 1, choices, comparer, new Callback<List<T>>() {
|
sortedGetChoices(message, 1, 1, choices, comparer, result -> {
|
||||||
@Override
|
assert result.size() == 1;
|
||||||
public void run(List<T> result) {
|
callback.run(result.get(0));
|
||||||
assert result.size() == 1;
|
|
||||||
callback.run(result.get(0));
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -314,12 +279,9 @@ public class GuiChoose {
|
|||||||
callback.run(null);
|
callback.run(null);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
sortedGetChoices(message, 1, 1, choices, comparer, new Callback<List<T>>() {
|
sortedGetChoices(message, 1, 1, choices, comparer, result -> {
|
||||||
@Override
|
assert result.size() == 1;
|
||||||
public void run(List<T> result) {
|
callback.run(result.get(0));
|
||||||
assert result.size() == 1;
|
|
||||||
callback.run(result.get(0));
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -29,11 +29,7 @@ public class GuiDialog {
|
|||||||
final String title = c == null ? "Question" : c + " - Ability";
|
final String title = c == null ? "Question" : c + " - Ability";
|
||||||
String questionToUse = StringUtils.isBlank(question) ? "Activate card's ability?" : question;
|
String questionToUse = StringUtils.isBlank(question) ? "Activate card's ability?" : question;
|
||||||
final List<String> opts = options == null ? defaultConfirmOptions : options;
|
final List<String> opts = options == null ? defaultConfirmOptions : options;
|
||||||
FOptionPane.showCardOptionDialog(c, questionToUse, title, FOptionPane.QUESTION_ICON, opts, defaultIsYes ? 0 : 1, new Callback<Integer>() {
|
FOptionPane.showCardOptionDialog(c, questionToUse, title, FOptionPane.QUESTION_ICON, opts, defaultIsYes ? 0 : 1, result -> callback.run(result == 0));
|
||||||
@Override public void run(final Integer result) {
|
|
||||||
callback.run(result == 0);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -120,19 +120,16 @@ public class ListChooser<T> extends FContainer {
|
|||||||
|
|
||||||
updateHeight();
|
updateHeight();
|
||||||
|
|
||||||
optionPane = new FOptionPane(null, null, title, null, this, options, 0, new Callback<Integer>() {
|
optionPane = new FOptionPane(null, null, title, null, this, options, 0, result -> {
|
||||||
@Override
|
called = false;
|
||||||
public void run(Integer result) {
|
if (result == 0) {
|
||||||
called = false;
|
callback.run(lstChoices.getSelectedItems());
|
||||||
if (result == 0) {
|
}
|
||||||
callback.run(lstChoices.getSelectedItems());
|
else if (minChoices > 0) {
|
||||||
}
|
show(); //show if user tries to cancel when input is mandatory
|
||||||
else if (minChoices > 0) {
|
}
|
||||||
show(); //show if user tries to cancel when input is mandatory
|
else {
|
||||||
}
|
callback.run(new ArrayList<>());
|
||||||
else {
|
|
||||||
callback.run(new ArrayList<>());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}) {
|
}) {
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
package forge.util;
|
package forge.util;
|
||||||
|
|
||||||
public abstract class Callback<T> {
|
@FunctionalInterface
|
||||||
public abstract void run(T result);
|
public interface Callback<T> {
|
||||||
|
void run(T result);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ package forge.util;
|
|||||||
|
|
||||||
import forge.gui.FThreads;
|
import forge.gui.FThreads;
|
||||||
|
|
||||||
public abstract class WaitCallback<T> extends Callback<T> implements Runnable {
|
public abstract class WaitCallback<T> implements Callback<T>, Runnable {
|
||||||
public class Lock {
|
public class Lock {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user