update last selected tab

- closes #751
This commit is contained in:
Anthony Calosa
2022-10-15 19:36:44 +08:00
parent ba426d7e99
commit c129b0f290
8 changed files with 52 additions and 71 deletions

View File

@@ -1166,7 +1166,7 @@ public final class CMatchUI
} }
@Override @Override
public PlayerZoneUpdates openZones(PlayerView controller, final Collection<ZoneType> zones, final Map<PlayerView, Object> playersWithTargetables) { public PlayerZoneUpdates openZones(PlayerView controller, final Collection<ZoneType> zones, final Map<PlayerView, Object> playersWithTargetables, boolean backupLastZones) {
final PlayerZoneUpdates zonesToUpdate = new PlayerZoneUpdates(); final PlayerZoneUpdates zonesToUpdate = new PlayerZoneUpdates();
for (final PlayerView view : playersWithTargetables.keySet()) { for (final PlayerView view : playersWithTargetables.keySet()) {
for(final ZoneType zone : zones) { for(final ZoneType zone : zones) {

View File

@@ -56,12 +56,7 @@ public class AchievementsScreen extends FScreen {
cbCollections.setSelectedIndex(0); cbCollections.setSelectedIndex(0);
cbCollections.setAlignment(Align.center); cbCollections.setAlignment(Align.center);
cbCollections.setChangedHandler(new FEventHandler() { cbCollections.setChangedHandler(e -> setAchievements(cbCollections.getSelectedItem()));
@Override
public void handleEvent(FEvent e) {
setAchievements(cbCollections.getSelectedItem());
}
});
setAchievements(cbCollections.getSelectedItem()); setAchievements(cbCollections.getSelectedItem());
} }

View File

@@ -81,6 +81,7 @@ public class MatchController extends AbstractGuiGame {
} }
private final Map<PlayerView, InfoTab> zonesToRestore = Maps.newHashMap(); private final Map<PlayerView, InfoTab> zonesToRestore = Maps.newHashMap();
private final Map<PlayerView, InfoTab> lastZonesToRestore = Maps.newHashMap();
public static MatchScreen getView() { public static MatchScreen getView() {
return view; return view;
@@ -376,7 +377,7 @@ public class MatchController extends AbstractGuiGame {
} }
@Override @Override
public PlayerZoneUpdates openZones(PlayerView controller, final Collection<ZoneType> zones, final Map<PlayerView, Object> playersWithTargetables) { public PlayerZoneUpdates openZones(PlayerView controller, final Collection<ZoneType> zones, final Map<PlayerView, Object> playersWithTargetables, boolean backupLastZones) {
PlayerZoneUpdates updates = new PlayerZoneUpdates(); PlayerZoneUpdates updates = new PlayerZoneUpdates();
if (zones.size() == 1) { if (zones.size() == 1) {
final ZoneType zoneType = zones.iterator().next(); final ZoneType zoneType = zones.iterator().next();
@@ -385,10 +386,13 @@ public class MatchController extends AbstractGuiGame {
case Command: case Command:
playersWithTargetables.clear(); //clear since no zones need to be restored playersWithTargetables.clear(); //clear since no zones need to be restored
default: default:
lastZonesToRestore.clear();
//open zone tab for given zone if needed //open zone tab for given zone if needed
boolean result = true; boolean result = true;
for (final PlayerView player : playersWithTargetables.keySet()) { for (final PlayerView player : playersWithTargetables.keySet()) {
final VPlayerPanel playerPanel = view.getPlayerPanel(player); final VPlayerPanel playerPanel = view.getPlayerPanel(player);
if (backupLastZones)
lastZonesToRestore.put(player, playerPanel.getSelectedTab());
playersWithTargetables.put(player, playerPanel.getSelectedTab()); //backup selected tab before changing it playersWithTargetables.put(player, playerPanel.getSelectedTab()); //backup selected tab before changing it
final InfoTab zoneTab = playerPanel.getZoneTab(zoneType); final InfoTab zoneTab = playerPanel.getZoneTab(zoneType);
updates.add(new PlayerZoneUpdate(player, zoneType)); updates.add(new PlayerZoneUpdate(player, zoneType));
@@ -418,8 +422,14 @@ public class MatchController extends AbstractGuiGame {
continue; continue;
} }
final InfoTab zoneTab = playerPanel.getZoneTab(zone); //final InfoTab zoneTab = playerPanel.getZoneTab(zone);
playerPanel.setSelectedTab(zoneTab); //playerPanel.setSelectedTab(zoneTab);
}
for (Map.Entry<PlayerView, InfoTab> e : lastZonesToRestore.entrySet()) {
if (e.getKey() != null && !e.getKey().getHasLost()) {
final VPlayerPanel p = view.getPlayerPanel(e.getKey());
p.setSelectedTab(e.getValue());
}
} }
} }

View File

@@ -83,7 +83,7 @@ public class VStack extends FDropDown {
} }
} }
if (zones.isEmpty() || playersWithValidTargets.isEmpty()) { return; } 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 //restore old zones when active stack instance changes
@@ -288,23 +288,18 @@ public class VStack extends FDropDown {
final String key = stackInstance.getKey(); final String key = stackInstance.getKey();
final boolean autoYield = gui.shouldAutoYield(key); final boolean autoYield = gui.shouldAutoYield(key);
addItem(new FCheckBoxMenuItem(Forge.getLocalizer().getMessage("cbpAutoYieldMode"), autoYield, addItem(new FCheckBoxMenuItem(Forge.getLocalizer().getMessage("cbpAutoYieldMode"), autoYield,
new FEventHandler() { e -> {
@Override
public void handleEvent(FEvent e) {
gui.setShouldAutoYield(key, !autoYield); gui.setShouldAutoYield(key, !autoYield);
if (!autoYield && stackInstance.equals(gameView.peekStack())) { if (!autoYield && stackInstance.equals(gameView.peekStack())) {
//auto-pass priority if ability is on top of stack //auto-pass priority if ability is on top of stack
controller.passPriority(); controller.passPriority();
} }
}
})); }));
if (stackInstance.isOptionalTrigger() && stackInstance.getActivatingPlayer().equals(player)) { if (stackInstance.isOptionalTrigger() && stackInstance.getActivatingPlayer().equals(player)) {
final int triggerID = stackInstance.getSourceTrigger(); final int triggerID = stackInstance.getSourceTrigger();
addItem(new FCheckBoxMenuItem(Forge.getLocalizer().getMessage("lblAlwaysYes"), addItem(new FCheckBoxMenuItem(Forge.getLocalizer().getMessage("lblAlwaysYes"),
gui.shouldAlwaysAcceptTrigger(triggerID), gui.shouldAlwaysAcceptTrigger(triggerID),
new FEventHandler() { e -> {
@Override
public void handleEvent(FEvent e) {
if (gui.shouldAlwaysAcceptTrigger(triggerID)) { if (gui.shouldAlwaysAcceptTrigger(triggerID)) {
gui.setShouldAlwaysAskTrigger(triggerID); gui.setShouldAlwaysAskTrigger(triggerID);
} }
@@ -315,13 +310,10 @@ public class VStack extends FDropDown {
controller.selectButtonOk(); controller.selectButtonOk();
} }
} }
}
})); }));
addItem(new FCheckBoxMenuItem(Forge.getLocalizer().getMessage("lblAlwaysNo"), addItem(new FCheckBoxMenuItem(Forge.getLocalizer().getMessage("lblAlwaysNo"),
gui.shouldAlwaysDeclineTrigger(triggerID), gui.shouldAlwaysDeclineTrigger(triggerID),
new FEventHandler() { e -> {
@Override
public void handleEvent(FEvent e) {
if (gui.shouldAlwaysDeclineTrigger(triggerID)) { if (gui.shouldAlwaysDeclineTrigger(triggerID)) {
gui.setShouldAlwaysAskTrigger(triggerID); gui.setShouldAlwaysAskTrigger(triggerID);
} }
@@ -332,15 +324,9 @@ public class VStack extends FDropDown {
controller.selectButtonCancel(); controller.selectButtonCancel();
} }
} }
}
})); }));
} }
addItem(new FMenuItem(Forge.getLocalizer().getMessage("lblZoomOrDetails"), new FEventHandler() { addItem(new FMenuItem(Forge.getLocalizer().getMessage("lblZoomOrDetails"), e -> CardZoom.show(stackInstance.getSourceCard())));
@Override
public void handleEvent(FEvent e) {
CardZoom.show(stackInstance.getSourceCard());
}
}));
} }
}; };

View File

@@ -295,7 +295,7 @@ public class NetGuiGame extends AbstractGuiGame {
} }
@Override @Override
public PlayerZoneUpdates openZones(PlayerView controller, final Collection<ZoneType> zones, final Map<PlayerView, Object> players) { public PlayerZoneUpdates openZones(PlayerView controller, final Collection<ZoneType> zones, final Map<PlayerView, Object> players, boolean backupLastZones) {
updateGameView(); updateGameView();
return sendAndWait(ProtocolMethod.openZones, controller, zones, players); return sendAndWait(ProtocolMethod.openZones, controller, zones, players);
} }

View File

@@ -113,7 +113,7 @@ public class FControlGameEventHandler extends IGameEventVisitor.Base<Void> {
} }
if (showExileUpdate) { if (showExileUpdate) {
showExileUpdate = false; showExileUpdate = false;
matchController.openZones(activatingPlayer, Collections.singleton(ZoneType.Exile), playersWithValidTargets); matchController.openZones(activatingPlayer, Collections.singleton(ZoneType.Exile), playersWithValidTargets, false);
activatingPlayer = null; activatingPlayer = null;
playersWithValidTargets.clear(); playersWithValidTargets.clear();
} }
@@ -259,12 +259,7 @@ public class FControlGameEventHandler extends IGameEventVisitor.Base<Void> {
} else { } else {
processEvent(); processEvent();
final Runnable notifyStackAddition = new Runnable() { final Runnable notifyStackAddition = () -> matchController.notifyStackAddition(event);
@Override
public void run() {
matchController.notifyStackAddition(event);
}
};
GuiBase.getInterface().invokeInEdtLater(notifyStackAddition); GuiBase.getInterface().invokeInEdtLater(notifyStackAddition);
} }
return null; return null;
@@ -284,12 +279,7 @@ public class FControlGameEventHandler extends IGameEventVisitor.Base<Void> {
} else { } else {
processEvent(); processEvent();
final Runnable notifyStackAddition = new Runnable() { final Runnable notifyStackAddition = () -> matchController.notifyStackRemoval(event);
@Override
public void run() {
matchController.notifyStackRemoval(event);
}
};
GuiBase.getInterface().invokeInEdtLater(notifyStackAddition); GuiBase.getInterface().invokeInEdtLater(notifyStackAddition);
} }
return null; return null;

View File

@@ -165,7 +165,7 @@ public interface IGuiGame {
void setCard(CardView card); void setCard(CardView card);
void setPlayerAvatar(LobbyPlayer player, IHasIcon ihi); void setPlayerAvatar(LobbyPlayer player, IHasIcon ihi);
PlayerZoneUpdates openZones(PlayerView controller, Collection<ZoneType> zones, Map<PlayerView, Object> players); PlayerZoneUpdates openZones(PlayerView controller, Collection<ZoneType> zones, Map<PlayerView, Object> players, boolean backupLastZones);
void restoreOldZones(PlayerView playerView, PlayerZoneUpdates playerZoneUpdates); void restoreOldZones(PlayerView playerView, PlayerZoneUpdates playerZoneUpdates);
void setHighlighted(PlayerView pv, boolean b); void setHighlighted(PlayerView pv, boolean b);
void setUsedToPay(CardView card, boolean value); void setUsedToPay(CardView card, boolean value);

View File

@@ -192,7 +192,7 @@ public class TargetSelection {
} }
PlayerView playerView = controller.getLocalPlayerView(); 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)) { if (!zones.contains(ZoneType.Stack)) {
InputSelectTargets inp = new InputSelectTargets(controller, validTargets, ability, mandatory, divisionValues, filter, mustTargetFiltered); InputSelectTargets inp = new InputSelectTargets(controller, validTargets, ability, mandatory, divisionValues, filter, mustTargetFiltered);
inp.showAndWait(); inp.showAndWait();