From c129b0f2905a655fea800cb6c76f6d07a71f0780 Mon Sep 17 00:00:00 2001 From: Anthony Calosa Date: Sat, 15 Oct 2022 19:36:44 +0800 Subject: [PATCH] update last selected tab - closes #751 --- .../java/forge/screens/match/CMatchUI.java | 2 +- .../achievements/AchievementsScreen.java | 7 +- .../forge/screens/match/MatchController.java | 16 +++- .../src/forge/screens/match/views/VStack.java | 76 ++++++++----------- .../gamemodes/net/server/NetGuiGame.java | 2 +- .../gui/control/FControlGameEventHandler.java | 16 +--- .../java/forge/gui/interfaces/IGuiGame.java | 2 +- .../java/forge/player/TargetSelection.java | 2 +- 8 files changed, 52 insertions(+), 71 deletions(-) diff --git a/forge-gui-desktop/src/main/java/forge/screens/match/CMatchUI.java b/forge-gui-desktop/src/main/java/forge/screens/match/CMatchUI.java index dd8e8d006ed..8071e9b35da 100644 --- a/forge-gui-desktop/src/main/java/forge/screens/match/CMatchUI.java +++ b/forge-gui-desktop/src/main/java/forge/screens/match/CMatchUI.java @@ -1166,7 +1166,7 @@ public final class CMatchUI } @Override - public PlayerZoneUpdates openZones(PlayerView controller, final Collection zones, final Map playersWithTargetables) { + public PlayerZoneUpdates openZones(PlayerView controller, final Collection zones, final Map playersWithTargetables, boolean backupLastZones) { final PlayerZoneUpdates zonesToUpdate = new PlayerZoneUpdates(); for (final PlayerView view : playersWithTargetables.keySet()) { for(final ZoneType zone : zones) { diff --git a/forge-gui-mobile/src/forge/screens/achievements/AchievementsScreen.java b/forge-gui-mobile/src/forge/screens/achievements/AchievementsScreen.java index 82fcc35ba19..c936060330d 100644 --- a/forge-gui-mobile/src/forge/screens/achievements/AchievementsScreen.java +++ b/forge-gui-mobile/src/forge/screens/achievements/AchievementsScreen.java @@ -56,12 +56,7 @@ public class AchievementsScreen extends FScreen { cbCollections.setSelectedIndex(0); cbCollections.setAlignment(Align.center); - cbCollections.setChangedHandler(new FEventHandler() { - @Override - public void handleEvent(FEvent e) { - setAchievements(cbCollections.getSelectedItem()); - } - }); + cbCollections.setChangedHandler(e -> setAchievements(cbCollections.getSelectedItem())); setAchievements(cbCollections.getSelectedItem()); } diff --git a/forge-gui-mobile/src/forge/screens/match/MatchController.java b/forge-gui-mobile/src/forge/screens/match/MatchController.java index 485d95d9c43..c7520ccfbfb 100644 --- a/forge-gui-mobile/src/forge/screens/match/MatchController.java +++ b/forge-gui-mobile/src/forge/screens/match/MatchController.java @@ -81,6 +81,7 @@ public class MatchController extends AbstractGuiGame { } private final Map zonesToRestore = Maps.newHashMap(); + private final Map lastZonesToRestore = Maps.newHashMap(); public static MatchScreen getView() { return view; @@ -376,7 +377,7 @@ public class MatchController extends AbstractGuiGame { } @Override - public PlayerZoneUpdates openZones(PlayerView controller, final Collection zones, final Map playersWithTargetables) { + public PlayerZoneUpdates openZones(PlayerView controller, final Collection zones, final Map playersWithTargetables, boolean backupLastZones) { PlayerZoneUpdates updates = new PlayerZoneUpdates(); if (zones.size() == 1) { final ZoneType zoneType = zones.iterator().next(); @@ -385,10 +386,13 @@ public class MatchController extends AbstractGuiGame { case Command: playersWithTargetables.clear(); //clear since no zones need to be restored default: + lastZonesToRestore.clear(); //open zone tab for given zone if needed boolean result = true; for (final PlayerView player : playersWithTargetables.keySet()) { final VPlayerPanel playerPanel = view.getPlayerPanel(player); + if (backupLastZones) + lastZonesToRestore.put(player, playerPanel.getSelectedTab()); playersWithTargetables.put(player, playerPanel.getSelectedTab()); //backup selected tab before changing it final InfoTab zoneTab = playerPanel.getZoneTab(zoneType); updates.add(new PlayerZoneUpdate(player, zoneType)); @@ -418,8 +422,14 @@ public class MatchController extends AbstractGuiGame { continue; } - final InfoTab zoneTab = playerPanel.getZoneTab(zone); - playerPanel.setSelectedTab(zoneTab); + //final InfoTab zoneTab = playerPanel.getZoneTab(zone); + //playerPanel.setSelectedTab(zoneTab); + } + for (Map.Entry e : lastZonesToRestore.entrySet()) { + if (e.getKey() != null && !e.getKey().getHasLost()) { + final VPlayerPanel p = view.getPlayerPanel(e.getKey()); + p.setSelectedTab(e.getValue()); + } } } diff --git a/forge-gui-mobile/src/forge/screens/match/views/VStack.java b/forge-gui-mobile/src/forge/screens/match/views/VStack.java index 2b5e32e3263..e41a047a471 100644 --- a/forge-gui-mobile/src/forge/screens/match/views/VStack.java +++ b/forge-gui-mobile/src/forge/screens/match/views/VStack.java @@ -83,7 +83,7 @@ public class VStack extends FDropDown { } } if (zones.isEmpty() || playersWithValidTargets.isEmpty()) { return; } - restorablePlayerZones = MatchController.instance.openZones(player, zones, playersWithValidTargets); + restorablePlayerZones = MatchController.instance.openZones(player, zones, playersWithValidTargets, true); } //restore old zones when active stack instance changes @@ -288,59 +288,45 @@ public class VStack extends FDropDown { final String key = stackInstance.getKey(); final boolean autoYield = gui.shouldAutoYield(key); addItem(new FCheckBoxMenuItem(Forge.getLocalizer().getMessage("cbpAutoYieldMode"), autoYield, - new FEventHandler() { - @Override - public void handleEvent(FEvent e) { - gui.setShouldAutoYield(key, !autoYield); - if (!autoYield && stackInstance.equals(gameView.peekStack())) { - //auto-pass priority if ability is on top of stack - controller.passPriority(); - } - } - })); + e -> { + gui.setShouldAutoYield(key, !autoYield); + if (!autoYield && stackInstance.equals(gameView.peekStack())) { + //auto-pass priority if ability is on top of stack + controller.passPriority(); + } + })); if (stackInstance.isOptionalTrigger() && stackInstance.getActivatingPlayer().equals(player)) { final int triggerID = stackInstance.getSourceTrigger(); addItem(new FCheckBoxMenuItem(Forge.getLocalizer().getMessage("lblAlwaysYes"), gui.shouldAlwaysAcceptTrigger(triggerID), - new FEventHandler() { - @Override - public void handleEvent(FEvent e) { - if (gui.shouldAlwaysAcceptTrigger(triggerID)) { - gui.setShouldAlwaysAskTrigger(triggerID); - } - else { - gui.setShouldAlwaysAcceptTrigger(triggerID); - if (stackInstance.equals(gameView.peekStack())) { - //auto-yes if ability is on top of stack - controller.selectButtonOk(); + e -> { + if (gui.shouldAlwaysAcceptTrigger(triggerID)) { + gui.setShouldAlwaysAskTrigger(triggerID); } - } - } - })); + else { + gui.setShouldAlwaysAcceptTrigger(triggerID); + if (stackInstance.equals(gameView.peekStack())) { + //auto-yes if ability is on top of stack + controller.selectButtonOk(); + } + } + })); addItem(new FCheckBoxMenuItem(Forge.getLocalizer().getMessage("lblAlwaysNo"), gui.shouldAlwaysDeclineTrigger(triggerID), - new FEventHandler() { - @Override - public void handleEvent(FEvent e) { - if (gui.shouldAlwaysDeclineTrigger(triggerID)) { - gui.setShouldAlwaysAskTrigger(triggerID); - } - else { - gui.setShouldAlwaysDeclineTrigger(triggerID); - if (stackInstance.equals(gameView.peekStack())) { - //auto-no if ability is on top of stack - controller.selectButtonCancel(); + e -> { + if (gui.shouldAlwaysDeclineTrigger(triggerID)) { + gui.setShouldAlwaysAskTrigger(triggerID); } - } - } - })); + else { + gui.setShouldAlwaysDeclineTrigger(triggerID); + if (stackInstance.equals(gameView.peekStack())) { + //auto-no if ability is on top of stack + controller.selectButtonCancel(); + } + } + })); } - addItem(new FMenuItem(Forge.getLocalizer().getMessage("lblZoomOrDetails"), new FEventHandler() { - @Override - public void handleEvent(FEvent e) { - CardZoom.show(stackInstance.getSourceCard()); - } - })); + addItem(new FMenuItem(Forge.getLocalizer().getMessage("lblZoomOrDetails"), e -> CardZoom.show(stackInstance.getSourceCard()))); } }; diff --git a/forge-gui/src/main/java/forge/gamemodes/net/server/NetGuiGame.java b/forge-gui/src/main/java/forge/gamemodes/net/server/NetGuiGame.java index 6d50d0c6fa4..7e8a1c682e5 100644 --- a/forge-gui/src/main/java/forge/gamemodes/net/server/NetGuiGame.java +++ b/forge-gui/src/main/java/forge/gamemodes/net/server/NetGuiGame.java @@ -295,7 +295,7 @@ public class NetGuiGame extends AbstractGuiGame { } @Override - public PlayerZoneUpdates openZones(PlayerView controller, final Collection zones, final Map players) { + public PlayerZoneUpdates openZones(PlayerView controller, final Collection zones, final Map players, boolean backupLastZones) { updateGameView(); return sendAndWait(ProtocolMethod.openZones, controller, zones, players); } diff --git a/forge-gui/src/main/java/forge/gui/control/FControlGameEventHandler.java b/forge-gui/src/main/java/forge/gui/control/FControlGameEventHandler.java index 80a4be3be2d..c125dcf2ca1 100644 --- a/forge-gui/src/main/java/forge/gui/control/FControlGameEventHandler.java +++ b/forge-gui/src/main/java/forge/gui/control/FControlGameEventHandler.java @@ -113,7 +113,7 @@ public class FControlGameEventHandler extends IGameEventVisitor.Base { } if (showExileUpdate) { showExileUpdate = false; - matchController.openZones(activatingPlayer, Collections.singleton(ZoneType.Exile), playersWithValidTargets); + matchController.openZones(activatingPlayer, Collections.singleton(ZoneType.Exile), playersWithValidTargets, false); activatingPlayer = null; playersWithValidTargets.clear(); } @@ -259,12 +259,7 @@ public class FControlGameEventHandler extends IGameEventVisitor.Base { } else { processEvent(); - final Runnable notifyStackAddition = new Runnable() { - @Override - public void run() { - matchController.notifyStackAddition(event); - } - }; + final Runnable notifyStackAddition = () -> matchController.notifyStackAddition(event); GuiBase.getInterface().invokeInEdtLater(notifyStackAddition); } return null; @@ -284,12 +279,7 @@ public class FControlGameEventHandler extends IGameEventVisitor.Base { } else { processEvent(); - final Runnable notifyStackAddition = new Runnable() { - @Override - public void run() { - matchController.notifyStackRemoval(event); - } - }; + final Runnable notifyStackAddition = () -> matchController.notifyStackRemoval(event); GuiBase.getInterface().invokeInEdtLater(notifyStackAddition); } return null; diff --git a/forge-gui/src/main/java/forge/gui/interfaces/IGuiGame.java b/forge-gui/src/main/java/forge/gui/interfaces/IGuiGame.java index 9cf1c96fb09..b13fa45d90e 100644 --- a/forge-gui/src/main/java/forge/gui/interfaces/IGuiGame.java +++ b/forge-gui/src/main/java/forge/gui/interfaces/IGuiGame.java @@ -165,7 +165,7 @@ public interface IGuiGame { void setCard(CardView card); void setPlayerAvatar(LobbyPlayer player, IHasIcon ihi); - PlayerZoneUpdates openZones(PlayerView controller, Collection zones, Map players); + PlayerZoneUpdates openZones(PlayerView controller, Collection zones, Map players, boolean backupLastZones); void restoreOldZones(PlayerView playerView, PlayerZoneUpdates playerZoneUpdates); void setHighlighted(PlayerView pv, boolean b); void setUsedToPay(CardView card, boolean value); diff --git a/forge-gui/src/main/java/forge/player/TargetSelection.java b/forge-gui/src/main/java/forge/player/TargetSelection.java index 9ef8a768aa8..e34a5643c7e 100644 --- a/forge-gui/src/main/java/forge/player/TargetSelection.java +++ b/forge-gui/src/main/java/forge/player/TargetSelection.java @@ -192,7 +192,7 @@ public class TargetSelection { } PlayerView playerView = controller.getLocalPlayerView(); - PlayerZoneUpdates playerZoneUpdates = controller.getGui().openZones(playerView, zones, playersWithValidTargets); + PlayerZoneUpdates playerZoneUpdates = controller.getGui().openZones(playerView, zones, playersWithValidTargets, true); if (!zones.contains(ZoneType.Stack)) { InputSelectTargets inp = new InputSelectTargets(controller, validTargets, ability, mandatory, divisionValues, filter, mustTargetFiltered); inp.showAndWait();