From 487e239857c7fb8b1018ec3aeba9725bdee23c75 Mon Sep 17 00:00:00 2001 From: drdev Date: Wed, 15 Oct 2014 04:16:29 +0000 Subject: [PATCH] Support updating floating card panels as the zones update --- .../java/forge/screens/match/CMatchUI.java | 25 +++++++++++++------ .../forge/view/arcane/FloatingCardArea.java | 20 +++++++++++++-- 2 files changed, 35 insertions(+), 10 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 b8e0585f8ee..2a4b02b4062 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 @@ -91,6 +91,7 @@ import forge.toolbox.special.PhaseIndicator; import forge.toolbox.special.PhaseLabel; import forge.util.ITriggerEvent; import forge.view.arcane.CardPanel; +import forge.view.arcane.FloatingCardArea; /** * Constructs instance of match UI controller, used as a single point of @@ -278,23 +279,31 @@ public enum CMatchUI implements ICDoc, IMenuProvider, IMatchController { PlayerView owner = kv.getKey(); ZoneType zt = kv.getValue(); - if (zt == ZoneType.Command) { - getCommandFor(owner).getTabletop().setupPlayZone(); - } else if (zt == ZoneType.Hand) { + switch (zt) { + case Battlefield: + getFieldViewFor(owner).getTabletop().setupPlayZone(); + break; + case Hand: VHand vHand = getHandFor(owner); - if (null != vHand) { + if (vHand != null) { vHand.getLayoutControl().updateHand(); } getFieldViewFor(owner).getDetailsPanel().updateZones(); - } else if (zt == ZoneType.Battlefield) { - getFieldViewFor(owner).getTabletop().setupPlayZone(); - } else if (zt == ZoneType.Ante) { + FloatingCardArea.refresh(owner, zt); + break; + case Command: + getCommandFor(owner).getTabletop().setupPlayZone(); + break; + case Ante: CAntes.SINGLETON_INSTANCE.update(); - } else { + break; + default: final VField vf = getFieldViewFor(owner); if (vf != null) { vf.getDetailsPanel().updateZones(); } + FloatingCardArea.refresh(owner, zt); + break; } } } diff --git a/forge-gui-desktop/src/main/java/forge/view/arcane/FloatingCardArea.java b/forge-gui-desktop/src/main/java/forge/view/arcane/FloatingCardArea.java index 0008531221a..2edec51aecb 100644 --- a/forge-gui-desktop/src/main/java/forge/view/arcane/FloatingCardArea.java +++ b/forge-gui-desktop/src/main/java/forge/view/arcane/FloatingCardArea.java @@ -57,6 +57,12 @@ public class FloatingCardArea extends CardArea { } cardArea.showWindow(); } + public static void refresh(PlayerView player, ZoneType zone) { + FloatingCardArea cardArea = floatingAreas.get(getKey(player, zone)); + if (cardArea != null) { + cardArea.refresh(); + } + } private final PlayerView player; private final ZoneType zone; @@ -69,6 +75,16 @@ public class FloatingCardArea extends CardArea { if (hasBeenShown) { return; } //don't change location this way if dialog has already been shown super.setLocationRelativeTo(c); } + + @Override + public void setVisible(boolean b0) { + if (isVisible() == b0) { return; } + super.setVisible(b0); + if (b0) { + refresh(); + hasBeenShown = true; + } + } }; private boolean hasBeenShown; @@ -97,7 +113,6 @@ public class FloatingCardArea extends CardArea { player = player0; zone = zone0; setVertical(true); - refresh(); } private void showWindow() { @@ -113,10 +128,11 @@ public class FloatingCardArea extends CardArea { }); } window.setVisible(true); - hasBeenShown = true; } public void refresh() { + if (!window.isVisible()) { return; } //don't refresh while window hidden + List cardPanels = new ArrayList(); FCollectionView cards = player.getCards(zone); if (cards != null) {