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