migrate Callback to Interface

- closes #5717
This commit is contained in:
Anthony Calosa
2025-08-26 05:14:20 +08:00
parent 23555b9564
commit f27472d9bd
29 changed files with 550 additions and 852 deletions

View File

@@ -639,14 +639,11 @@ 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
public void run(Boolean result) {
if (result) { if (result) {
exited = true; exited = true;
exitAnimation(true); exitAnimation(true);
} }
}
}; };
@@ -668,14 +665,11 @@ 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
public void run(Integer result) {
if (result == 0) { if (result == 0) {
exited = true; exited = true;
exitAnimation(false); exitAnimation(false);
} }
}
}; };
if (silent) { if (silent) {
@@ -701,9 +695,7 @@ public class Forge implements ApplicationListener {
return; return;
} }
currentScreen.onSwitchAway(new Callback<Boolean>() { currentScreen.onSwitchAway(result -> {
@Override
public void run(Boolean result) {
if (result) { if (result) {
if (replaceBackScreen && !Dscreens.isEmpty()) { if (replaceBackScreen && !Dscreens.isEmpty()) {
Dscreens.removeFirst(); Dscreens.removeFirst();
@@ -725,7 +717,6 @@ public class Forge implements ApplicationListener {
deltaTime = 0f; deltaTime = 0f;
hueFragTime = 0f; hueFragTime = 0f;
} }
}
}); });
} }

View File

@@ -295,14 +295,11 @@ 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
public void run(Boolean result) {
if (result) { if (result) {
Current.player().doBulkSell(toSell); Current.player().doBulkSell(toSell);
refresh(); refresh();
} }
}
}); });
} }
@@ -423,13 +420,10 @@ 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
public void run(Boolean result) {
if (result) { if (result) {
moveCards(toMove, autoSellPage); 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;
} }

View File

@@ -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
public void run(Integer result) {
if (runnable != null) if (runnable != null)
runnable.run(); runnable.run();
}
}); });
} }

View File

@@ -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
public void run(Boolean result) {
currentEvent.eventStatus = AdventureEventController.EventStatus.Entered; currentEvent.eventStatus = AdventureEventController.EventStatus.Entered;
refresh(); refresh();
}
}; };
enterWithShards.callback = new Callback<Boolean>() { enterWithShards.callback = (result) -> {
@Override
public void run(Boolean result) {
currentEvent.eventStatus = AdventureEventController.EventStatus.Entered; currentEvent.eventStatus = AdventureEventController.EventStatus.Entered;
refresh(); refresh();
}
}; };
enterWithGold.callback = new Callback<Boolean>() { enterWithGold.callback = (result) -> {
@Override
public void run(Boolean result) {
currentEvent.eventStatus = AdventureEventController.EventStatus.Entered; currentEvent.eventStatus = AdventureEventController.EventStatus.Entered;
refresh(); refresh();
}
}; };
introDialog.options = new DialogData[4]; introDialog.options = new DialogData[4];

View File

@@ -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,14 +64,11 @@ 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
public void run(Boolean result) {
if (result) { if (result) {
doAutosell(); doAutosell();
} }
} }
}
); );
} else { } else {
doAutosell(); doAutosell();

View File

@@ -34,16 +34,13 @@ 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
public void run(Integer result) {
if (result == 0) { if (result == 0) {
callback.run(((PickerTab) tabPages.get(0)).list.getSelectedItem()); callback.run(((PickerTab) tabPages.get(0)).list.getSelectedItem());
} }
else { else {
callback.run(null); callback.run(null);
} }
}
}) { }) {
@Override @Override
protected boolean padAboveAndBelow() { protected boolean padAboveAndBelow() {

View File

@@ -1421,9 +1421,7 @@ 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
public void run(final Integer numOpponents) {
if (numOpponents == null) { return; } if (numOpponents == null) { return; }
List<DeckType> deckTypes = Lists.newArrayList( List<DeckType> deckTypes = Lists.newArrayList(
DeckType.CUSTOM_DECK, DeckType.CUSTOM_DECK,
@@ -1462,9 +1460,7 @@ public class FDeckChooser extends FScreen {
} }
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,17 +1486,13 @@ 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
public void run(final Deck aiDeck) {
if (aiDeck == null) { return; } if (aiDeck == null) { return; }
LoadingOverlay.show(Forge.getLocalizer().getMessage("lblLoadingNewGame"), true, () -> { LoadingOverlay.show(Forge.getLocalizer().getMessage("lblLoadingNewGame"), true, () -> {
@@ -1521,7 +1513,6 @@ public class FDeckChooser extends FScreen {
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);
}); });
}
}); });
} }

View File

@@ -547,9 +547,7 @@ 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
public void run(String result) {
if (result == null || !options.contains(result)) if (result == null || !options.contains(result))
return; return;
DeckSection newSection = hiddenExtraSections.get(options.indexOf(result)); DeckSection newSection = hiddenExtraSections.get(options.indexOf(result));
@@ -557,7 +555,6 @@ public class FDeckEditor extends TabPageScreen<FDeckEditor> {
filterCatalogForExtraSection(newSection); filterCatalogForExtraSection(newSection);
getCatalogPage().scheduleRefresh(); getCatalogPage().scheduleRefresh();
setSelectedPage(getCatalogPage()); 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
public void run(String result) {
if (!StringUtils.isEmpty(result)) { if (!StringUtils.isEmpty(result)) {
deckController.saveAs(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,14 +607,11 @@ 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
public void run(Boolean result) {
if (result) { if (result) {
deckController.delete(); deckController.delete();
Forge.back(); 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
public void run(String result) {
if(StringUtils.isBlank(result)) if(StringUtils.isBlank(result))
return; return;
CardPool requested = CardPool.fromSingleCardRequest(result); CardPool requested = CardPool.fromSingleCardRequest(result);
devAddCards(requested); devAddCards(requested);
}
}); });
} }
@@ -924,16 +902,13 @@ 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
public void run(String result) {
if (StringUtils.isEmpty(result)) { return; } if (StringUtils.isEmpty(result)) { return; }
deckController.saveAs(result); deckController.saveAs(result);
if (callback != null) { if (callback != null) {
callback.run(true); callback.run(true);
} }
}
}); });
}); });
return; return;
@@ -979,9 +954,7 @@ 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
public void run(Integer result) {
if (result == 0) { if (result == 0) {
save(canCloseCallback); save(canCloseCallback);
} else if (result == 1) { } else if (result == 1) {
@@ -990,7 +963,6 @@ public class FDeckEditor extends TabPageScreen<FDeckEditor> {
} else { } else {
canCloseCallback.run(false); 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
public void run(Integer result) {
if (result == null || result == 0) if (result == null || result == 0)
return; return;
callback.accept(result); callback.accept(result);
}
}); });
} }
} }
@@ -2024,15 +1993,12 @@ 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
public void run(Integer result) {
moveCard(card, cardSourcePage, result); moveCard(card, cardSourcePage, result);
if(cardSourcePage == parentScreen.getCatalogPage()) { if(cardSourcePage == parentScreen.getCatalogPage()) {
parentScreen.getCatalogPage().refresh(); //refresh so commander options shown again parentScreen.getCatalogPage().refresh(); //refresh so commander options shown again
parentScreen.setSelectedPage(parentScreen.getCatalogPage()); 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
public void run(List<String> result) {
addCard(card.copyWithMarkedColors(ColorSet.fromNames(result))); addCard(card.copyWithMarkedColors(ColorSet.fromNames(result)));
removeCard(card); removeCard(card);
}
}); });
})); }));
} }
@@ -2109,9 +2072,7 @@ 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
public void run(PaperCard replacement) {
if (replacement == null || replacement == card) if (replacement == null || replacement == card)
return; return;
//Next, ask how many copies they'd like to swap, taking into account the number available. //Next, ask how many copies they'd like to swap, taking into account the number available.
@@ -2123,7 +2084,6 @@ public class FDeckEditor extends TabPageScreen<FDeckEditor> {
DeckSectionPage.this.moveCard(card, sourcePage, amount); DeckSectionPage.this.moveCard(card, sourcePage, amount);
sourcePage.moveCard(replacement, DeckSectionPage.this, amount); sourcePage.moveCard(replacement, DeckSectionPage.this, amount);
}).handleEvent(e); }).handleEvent(e);
}
}); });
} }
@@ -2294,28 +2254,22 @@ 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
public void run(Integer result) { //ignore quantity
PaperCard realCard = getDraftPlayer().pickFromArchdemonCurse(getDraftPlayer().nextChoice()); PaperCard realCard = getDraftPlayer().pickFromArchdemonCurse(getDraftPlayer().nextChoice());
moveCard(realCard, parentScreen.getSideboardPage()); 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
public void run(Integer result) { //ignore quantity
moveCard(card, destinationPage); moveCard(card, destinationPage);
}
}); });
addMoveCardMenuItem(menu, this, parentScreen.getSideboardPage(), new Callback<>() { addMoveCardMenuItem(menu,
@Override this,
public void run(Integer result) { //ignore quantity parentScreen.getSideboardPage(),
result -> { //ignore quantity
moveCard(card, parentScreen.getSideboardPage()); moveCard(card, parentScreen.getSideboardPage());
}
}); });
} }

View File

@@ -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
public void run(Integer result) {
if (result == null || result <= 0) { return; } 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
public void run(Integer result) {
if (result == null || result <= 0) { return; } if (result == null || result <= 0) { return; }
removeCard(card, result); removeCard(card, result);
parent.getSideboardPage().addCard(card, result); parent.getSideboardPage().addCard(card, result);
}
}); });
} }
} }

View File

@@ -534,9 +534,7 @@ 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
public void run(Integer result) {
setAvatarIndex(result); setAvatarIndex(result);
if (index < 2) { if (index < 2) {
@@ -546,7 +544,6 @@ public class PlayerPanel extends FContainer {
if (allowNetworking) { if (allowNetworking) {
screen.firePlayerChangeListener(index); screen.firePlayerChangeListener(index);
} }
}
}); });
} }
}; };
@@ -554,9 +551,7 @@ 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
public void run(Integer result) {
setSleeveIndex(result); setSleeveIndex(result);
if (index < 2) { if (index < 2) {
@@ -566,7 +561,6 @@ public class PlayerPanel extends FContainer {
if (allowNetworking) { if (allowNetworking) {
screen.firePlayerChangeListener(index); screen.firePlayerChangeListener(index);
} }
}
}); });
} }
}; };
@@ -804,9 +798,7 @@ 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
public void run(String newName) {
if (newName == null) { return; } if (newName == null) { return; }
txtPlayerName.setText(newName); txtPlayerName.setText(newName);
@@ -819,7 +811,6 @@ public class PlayerPanel extends FContainer {
if (allowNetworking) { if (allowNetworking) {
screen.firePlayerChangeListener(index); screen.firePlayerChangeListener(index);
} }
}
})); }));
return newNameBtn; return newNameBtn;
} }
@@ -1070,42 +1061,33 @@ 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
public void run(final Integer genderIndex) {
if (genderIndex == null || genderIndex < 0) { if (genderIndex == null || genderIndex < 0) {
callback.run(null); callback.run(null);
return; return;
} }
FOptionPane.showOptionDialog(message, title, icon, typeOptions, 2, new Callback<Integer>() { FOptionPane.showOptionDialog(message, title, icon, typeOptions, 2, typeIndex -> {
@Override
public void run(final Integer typeIndex) {
if (typeIndex == null || typeIndex < 0) { if (typeIndex == null || typeIndex < 0) {
callback.run(null); callback.run(null);
return; return;
} }
generateRandomName(genderOptions.get(genderIndex), typeOptions.get(typeIndex), screen.getPlayerNames(), title, callback); 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
public void run(Boolean result) {
if (result) { if (result) {
callback.run(newName); callback.run(newName);
} }
else { else {
generateRandomName(gender, type, usedNames, title, callback); generateRandomName(gender, type, usedNames, title, callback);
} }
}
}); });
} }

View File

@@ -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,14 +106,11 @@ 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
public void run(Deck result) {
if (result != null) { if (result != null) {
gauntlet.setUserDeck(result); gauntlet.setUserDeck(result);
GauntletIO.saveGauntlet(gauntlet); GauntletIO.saveGauntlet(gauntlet);
} }
}
}); });
return; return;
} }

View File

@@ -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,9 +56,7 @@ 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
public void run(String result) {
if (result == null) { return; } if (result == null) { return; }
if (Forge.getLocalizer().getMessage("lblQuickGauntlet").equals(result)) { if (Forge.getLocalizer().getMessage("lblQuickGauntlet").equals(result)) {
@@ -74,48 +70,36 @@ public class NewGauntletScreen extends LaunchScreen {
} 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
public void run(final Integer numOpponents) {
if (numOpponents == null) { return; } 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
public void run(Deck userDeck) {
if (userDeck == null) { if (userDeck == null) {
return; return;
} }
GauntletData gauntlet = GauntletUtil.createCommanderGauntlet(userDeck, numOpponents, allowedDeckTypes, null); GauntletData gauntlet = GauntletUtil.createCommanderGauntlet(userDeck, numOpponents, allowedDeckTypes, null);
launchGauntlet(gauntlet); 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
public void run(final Integer numOpponents) {
if (numOpponents == null) { return; } if (numOpponents == null) { return; }
ListChooser<DeckType> chooser = new ListChooser<>( ListChooser<DeckType> chooser = new ListChooser<>(
@@ -132,63 +116,48 @@ public class NewGauntletScreen extends LaunchScreen {
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
public void run(Deck userDeck) {
if (userDeck == null) { if (userDeck == null) {
return; return;
} }
GauntletData gauntlet = GauntletUtil.createQuickGauntlet(userDeck, numOpponents, allowedDeckTypes, null); GauntletData gauntlet = GauntletUtil.createQuickGauntlet(userDeck, numOpponents, allowedDeckTypes, null);
launchGauntlet(gauntlet); 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
public void run(final Integer numOpponents) {
if (numOpponents == null) { return; } 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
public void run(final Integer numOpponents) {
if (numOpponents == null) { return; } 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
public void run(Deck aiDeck) {
if (aiDeck == null) { return; } if (aiDeck == null) { return; }
gauntlet.getDecks().add(aiDeck); gauntlet.getDecks().add(aiDeck);
@@ -199,18 +168,14 @@ public class NewGauntletScreen extends LaunchScreen {
} }
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
public void run(Deck userDeck) {
if (userDeck == null) { return; } 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,14 +189,10 @@ public class NewGauntletScreen extends LaunchScreen {
} }
} }
GuiChoose.oneOrNone(Forge.getLocalizer().getMessage("lblSelectGauntletContest"), contests, new Callback<GauntletData>() { GuiChoose.oneOrNone(Forge.getLocalizer().getMessage("lblSelectGauntletContest"), contests, contest -> {
@Override
public void run(final GauntletData contest) {
if (contest == null) { return; } 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
public void run(final Deck userDeck) {
if (userDeck == null) { return; } if (userDeck == null) { return; }
//create copy of contest to use as gauntlet //create copy of contest to use as gauntlet
@@ -241,9 +202,7 @@ public class NewGauntletScreen extends LaunchScreen {
gauntlet.setUserDeck(userDeck); gauntlet.setUserDeck(userDeck);
GauntletUtil.setDefaultGauntletName(gauntlet, contest.getDisplayName() + "_"); GauntletUtil.setDefaultGauntletName(gauntlet, contest.getDisplayName() + "_");
launchGauntlet(gauntlet); launchGauntlet(gauntlet);
}
}); });
}
}); });
} }

View File

@@ -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,9 +55,7 @@ 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
public void run(final Puzzle chosen) {
if (chosen != null) { if (chosen != null) {
LoadingOverlay.show(Forge.getLocalizer().getMessage("lblLoadingThePuzzle"), true, () -> { LoadingOverlay.show(Forge.getLocalizer().getMessage("lblLoadingThePuzzle"), true, () -> {
// Load selected puzzle // Load selected puzzle
@@ -82,7 +79,6 @@ public class PuzzleScreen extends LaunchScreen {
FOptionPane.showMessageDialog(chosen.getGoalDescription(), chosen.getName()); FOptionPane.showMessageDialog(chosen.getGoalDescription(), chosen.getName());
}); });
} }
}
}); });
} }

View File

@@ -69,9 +69,7 @@ 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
public void run(final String name) {
if (StringUtils.isEmpty(name)) { if (StringUtils.isEmpty(name)) {
save(callback); //re-prompt if user doesn't pick a name save(callback); //re-prompt if user doesn't pick a name
return; return;
@@ -82,9 +80,7 @@ public class DraftingProcessScreen extends FDeckEditor {
if (name.equalsIgnoreCase(d.getName())) { if (name.equalsIgnoreCase(d.getName())) {
FOptionPane.showConfirmDialog( FOptionPane.showConfirmDialog(
Forge.getLocalizer().getMessage("lblAlreadyDeckName") + name + Forge.getLocalizer().getMessage("lblOverwriteConfirm"), Forge.getLocalizer().getMessage("lblAlreadyDeckName") + name + Forge.getLocalizer().getMessage("lblOverwriteConfirm"),
Forge.getLocalizer().getMessage("lblOverwriteDeck"), false, new Callback<>() { Forge.getLocalizer().getMessage("lblOverwriteDeck"), false, result -> {
@Override
public void run(Boolean result) {
if (result) { if (result) {
finishSave(name); finishSave(name);
if (callback != null) { if (callback != null) {
@@ -93,7 +89,6 @@ public class DraftingProcessScreen extends FDeckEditor {
} else { } else {
save(callback); //If no overwrite, recurse save(callback); //If no overwrite, recurse
} }
}
}); });
return; return;
} }
@@ -103,7 +98,6 @@ public class DraftingProcessScreen extends FDeckEditor {
if (callback != null) { if (callback != null) {
callback.run(true); callback.run(true);
} }
}
}); });
}); });
} }

View File

@@ -1188,13 +1188,10 @@ public class MatchScreen extends FScreen {
} }
private void confirmUserConcedes() { private void confirmUserConcedes() {
final Callback<Boolean> callback = new Callback<>() { final Callback<Boolean> callback = result -> {
@Override
public void run(Boolean result) {
if (result) { if (result) {
getGameController().concede(); getGameController().concede();
} }
}
}; };
FOptionPane.showConfirmDialog(getLocalizer().getMessage("lblConcedeCurrentGame"), FOptionPane.showConfirmDialog(getLocalizer().getMessage("lblConcedeCurrentGame"),

View File

@@ -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,9 +30,7 @@ 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
public void run(Boolean result) {
if (result) { if (result) {
if (FServerManager.getInstance() != null) if (FServerManager.getInstance() != null)
if(FServerManager.getInstance().isHosting()) { if(FServerManager.getInstance().isHosting()) {
@@ -48,7 +45,6 @@ public class OnlineMenu extends FPopupMenu {
screen = null; screen = null;
OnlineLobbyScreen.clearGameLobby(); OnlineLobbyScreen.clearGameLobby();
} }
}
}); });
return; return;
} }

View File

@@ -355,14 +355,11 @@ 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
public void run(List<AEtherFilter> result) {
if (!result.isEmpty()) { if (!result.isEmpty()) {
setSelectedOption(result.get(0)); setSelectedOption(result.get(0));
updateFilteredPool(); updateFilteredPool();
} }
}
})); }));
} }

View File

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

View File

@@ -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,9 +128,7 @@ public class ConquestMultiverseScreen extends FScreen {
} }
private void spinChaosWheel() { private void spinChaosWheel() {
ConquestChaosWheel.spin(new Callback<ChaosWheelOutcome>() { ConquestChaosWheel.spin(outcome -> {
@Override
public void run(ChaosWheelOutcome outcome) {
switch (outcome) { switch (outcome) {
case BOOSTER: case BOOSTER:
awardBoosters(model.getCurrentPlane().getAwardPool(), 1); awardBoosters(model.getCurrentPlane().getAwardPool(), 1);
@@ -148,12 +144,7 @@ public class ConquestMultiverseScreen extends FScreen {
break; break;
case PLANESWALK: case PLANESWALK:
if (model.getUnlockedPlaneCount() == model.getAccessiblePlaneCount()) { if (model.getUnlockedPlaneCount() == model.getAccessiblePlaneCount()) {
FOptionPane.showMessageDialog(Forge.getLocalizer().getMessage("lblAllPlanesUnlockedNotify"), Forge.getLocalizer().getMessage("lblAllPlanesUnlocked"), EMBLEM_IMAGE, new Callback<Integer>() { FOptionPane.showMessageDialog(Forge.getLocalizer().getMessage("lblAllPlanesUnlockedNotify"), Forge.getLocalizer().getMessage("lblAllPlanesUnlocked"), EMBLEM_IMAGE, result -> launchChaosBattle());
@Override
public void run(Integer result) {
launchChaosBattle();
}
});
} else { } else {
awardBonusPlaneswalkEmblems(FModel.getConquestPreferences().getPrefInt(CQPref.PLANESWALK_WHEEL_EMBLEMS)); awardBonusPlaneswalkEmblems(FModel.getConquestPreferences().getPrefInt(CQPref.PLANESWALK_WHEEL_EMBLEMS));
} }
@@ -162,7 +153,6 @@ public class ConquestMultiverseScreen extends FScreen {
launchChaosBattle(); launchChaosBattle();
break; break;
} }
}
}); });
} }

View File

@@ -205,9 +205,7 @@ 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
public void run(final Integer result) {
if (result == null || result <= 0) { return; } 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
@@ -217,7 +215,6 @@ public class QuestSpellShopScreen extends TabPageScreen<QuestSpellShopScreen> {
activateItems(items); activateItems(items);
FThreads.invokeInEdtLater(() -> parentScreen.updateCreditsLabel()); FThreads.invokeInEdtLater(() -> parentScreen.updateCreditsLabel());
}); });
}
}; };
if (max == 1) { if (max == 1) {
callback.run(max); callback.run(max);

View File

@@ -296,13 +296,10 @@ 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
public void run(Boolean finished) {
if (finished) { if (finished) {
finishCallback(); finishCallback();
} }
}
}).show(); }).show();
} }
protected abstract GuiDownloadService createService(); protected abstract GuiDownloadService createService();
@@ -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
public void run(String result) {
final String url = categories.get(result); final String url = categories.get(result);
final String name = url.substring(url.lastIndexOf("/") + 2); final String name = url.substring(url.lastIndexOf("/") + 2);
new GuiDownloader(new GuiDownloadZipService(name, name, url, ForgeConstants.FONTS_DIR, null, null), new Callback<Boolean>() { new GuiDownloader(new GuiDownloadZipService(name, name, url, ForgeConstants.FONTS_DIR, null, null), finished -> {
@Override
public void run(Boolean finished) {
if (finished) { if (finished) {
finishCallback(); finishCallback();
} }
}
}).show(); }).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
public void run(String result) {
if (StringUtils.isEmpty(result) || description.equals(result)) { return; } if (StringUtils.isEmpty(result) || description.equals(result)) { return; }
updateDir(result); updateDir(result);
onDirectoryChanged(result); onDirectoryChanged(result);
FOptionPane.showMessageDialog(Forge.getLocalizer().getMessage("lblRestartForgeMoveFilesNewLocation"), Forge.getLocalizer().getMessage("lblRestartRequired"), FOptionPane.INFORMATION_ICON); 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);

View File

@@ -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,13 +74,10 @@ 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
public void run(Boolean result) {
if (result) { if (result) {
Forge.restart(true); Forge.restart(true);
} }
}
}); });
} }
}, 0); }, 0);
@@ -125,13 +121,10 @@ 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
public void run(Boolean result) {
if (result) { if (result) {
Forge.restart(true); Forge.restart(true);
} }
}
}); });
} }
} }
@@ -376,14 +369,11 @@ 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
public void run(Boolean result) {
if (result) { if (result) {
Forge.restart(true); Forge.restart(true);
} }
} }
}
); );
} }
}, 3); }, 3);
@@ -397,14 +387,11 @@ 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
public void run(Boolean result) {
if (result) { if (result) {
Forge.restart(true); Forge.restart(true);
} }
} }
}
); );
} }
}, 3); }, 3);
@@ -418,14 +405,11 @@ 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
public void run(Boolean result) {
if (result) { if (result) {
Forge.restart(true); Forge.restart(true);
} }
} }
}
); );
} }
}, 3); }, 3);
@@ -458,14 +442,11 @@ 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
public void run(Boolean result) {
if (result) { if (result) {
Forge.restart(true); Forge.restart(true);
} }
} }
}
); );
} }
}, 3); }, 3);
@@ -495,14 +476,11 @@ 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
public void run(Boolean result) {
if (result) { if (result) {
Forge.restart(true); Forge.restart(true);
} }
} }
}
); );
} }
}, 4); }, 4);
@@ -958,9 +936,7 @@ public class SettingsPage extends TabPage<SettingsScreen> {
description, description,
currentValue, currentValue,
null, null,
new Callback<String>() { input -> {
@Override
public void run(String input) {
if (input == null) return; // cancelled if (input == null) return; // cancelled
if (!input.matches("\\d+")) { if (!input.matches("\\d+")) {
FOptionPane.showMessageDialog("Please enter a valid number.", "Invalid Input"); FOptionPane.showMessageDialog("Please enter a valid number.", "Invalid Input");
@@ -972,7 +948,6 @@ public class SettingsPage extends TabPage<SettingsScreen> {
return; return;
} }
valueChanged(input); valueChanged(input);
}
}, },
true // isNumeric true // isNumeric
); );

View File

@@ -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,10 +184,7 @@ 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")
@Override
public void run(final Integer result) {
if (result == 0) { if (result == 0) {
if (txtInput != null) { if (txtInput != null) {
callback.run((T)txtInput.getText()); callback.run((T)txtInput.getText());
@@ -202,7 +194,6 @@ public class FOptionPane extends FDialog {
} else { } else {
callback.run(null); callback.run(null);
} }
}
}) { }) {
@Override @Override
protected float getBottomMargin() { protected float getBottomMargin() {

View File

@@ -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,9 +35,7 @@ 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
public void run(Integer result) {
if (result != null && result != value) { if (result != null && result != value) {
int oldValue = value; int oldValue = value;
setValue(result); setValue(result);
@@ -47,7 +44,6 @@ public class FSpinner extends FTextField {
getChangedHandler().handleEvent(new FEvent(FSpinner.this, FEventType.CHANGE, oldValue)); getChangedHandler().handleEvent(new FEvent(FSpinner.this, FEventType.CHANGE, oldValue));
} }
} }
}
}); });
return true; return true;
} }

View File

@@ -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
public void run(final List<T> result) {
assert result.size() == 1; assert result.size() == 1;
callback.run(result.get(0)); 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
public void run(final List<T> result) {
assert result.size() == 1; assert result.size() == 1;
callback.run(result.get(0)); callback.run(result.get(0));
}
}); });
} }
@@ -172,9 +156,7 @@ 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
public void run(Object choice) {
if (choice instanceof Integer || choice == null) { if (choice instanceof Integer || choice == null) {
callback.run((Integer)choice); callback.run((Integer)choice);
return; return;
@@ -195,14 +177,11 @@ public class GuiChoose {
} }
prompt += ":"; prompt += ":";
getNumberInput(prompt, message, min, max, callback); 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
public void run(String result) {
if (result == null) { //that is 'cancel' if (result == null) { //that is 'cancel'
callback.run(null); callback.run(null);
return; return;
@@ -217,7 +196,6 @@ public class GuiChoose {
//re-prompt if invalid input //re-prompt if invalid input
getNumberInput(prompt, message, min, max, callback); 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
public void run(List<T> result) {
assert result.size() == 1; assert result.size() == 1;
callback.run(result.get(0)); 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
public void run(List<T> result) {
assert result.size() == 1; assert result.size() == 1;
callback.run(result.get(0)); callback.run(result.get(0));
}
}); });
} }

View File

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

View File

@@ -120,9 +120,7 @@ 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
public void run(Integer result) {
called = false; called = false;
if (result == 0) { if (result == 0) {
callback.run(lstChoices.getSelectedItems()); callback.run(lstChoices.getSelectedItems());
@@ -133,7 +131,6 @@ public class ListChooser<T> extends FContainer {
else { else {
callback.run(new ArrayList<>()); callback.run(new ArrayList<>());
} }
}
}) { }) {
@Override @Override
protected boolean padAboveAndBelow() { protected boolean padAboveAndBelow() {

View File

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

View File

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