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
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();
for (final PlayerView view : playersWithTargetables.keySet()) {
for(final ZoneType zone : zones) {

View File

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

View File

@@ -81,6 +81,7 @@ public class MatchController extends AbstractGuiGame {
}
private final Map<PlayerView, InfoTab> zonesToRestore = Maps.newHashMap();
private final Map<PlayerView, InfoTab> 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<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();
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<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; }
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())));
}
};

View File

@@ -295,7 +295,7 @@ public class NetGuiGame extends AbstractGuiGame {
}
@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();
return sendAndWait(ProtocolMethod.openZones, controller, zones, players);
}

View File

@@ -113,7 +113,7 @@ public class FControlGameEventHandler extends IGameEventVisitor.Base<Void> {
}
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<Void> {
} 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<Void> {
} 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;

View File

@@ -165,7 +165,7 @@ public interface IGuiGame {
void setCard(CardView card);
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 setHighlighted(PlayerView pv, boolean b);
void setUsedToPay(CardView card, boolean value);

View File

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