From e75213629410c9e9aba3dcb1015919c4ae441190 Mon Sep 17 00:00:00 2001 From: Maxmtg Date: Mon, 27 May 2013 13:19:00 +0000 Subject: [PATCH] FControl in response to player control changes redraws hands panel --- src/main/java/forge/control/FControl.java | 10 +++++++++ src/main/java/forge/gui/match/CMatchUI.java | 21 ++++++++++++++----- src/main/java/forge/gui/match/VMatchUI.java | 8 +++++++ .../forge/gui/match/nonsingleton/CHand.java | 3 ++- 4 files changed, 36 insertions(+), 6 deletions(-) diff --git a/src/main/java/forge/control/FControl.java b/src/main/java/forge/control/FControl.java index bb665869ae8..4cd230ea5ec 100644 --- a/src/main/java/forge/control/FControl.java +++ b/src/main/java/forge/control/FControl.java @@ -45,6 +45,7 @@ import forge.game.ai.AiProfileUtil; import forge.game.event.CardsAntedEvent; import forge.game.event.DuelFinishedEvent; import forge.game.event.Event; +import forge.game.event.PlayerControlEvent; import forge.game.player.LobbyPlayer; import forge.game.player.Player; import forge.gui.GuiDialog; @@ -66,6 +67,7 @@ import forge.gui.match.controllers.CLog; import forge.gui.match.controllers.CMessage; import forge.gui.match.controllers.CStack; import forge.gui.match.nonsingleton.VField; +import forge.gui.match.nonsingleton.VHand; import forge.gui.match.views.VAntes; import forge.gui.toolbox.CardFaceSymbols; import forge.gui.toolbox.FSkin; @@ -419,6 +421,14 @@ public enum FControl { msg.append(kv.getKey().getName()).append(" ante: ").append(kv.getValue()).append(nl); } GuiDialog.message(msg.toString(), "Ante"); + } else if ( ev instanceof PlayerControlEvent ) { + FThreads.invokeInEdtNowOrLater(new Runnable() { @Override public void run() { + CMatchUI.SINGLETON_INSTANCE.initHandViews(getLobby().getGuiPlayer()); + VMatchUI.SINGLETON_INSTANCE.populate(); + for(VHand h : VMatchUI.SINGLETON_INSTANCE.getHands()) { + h.getLayoutControl().updateHand(); + } + } }); } } } diff --git a/src/main/java/forge/gui/match/CMatchUI.java b/src/main/java/forge/gui/match/CMatchUI.java index 4a3a579b69c..1ca54e866c5 100644 --- a/src/main/java/forge/gui/match/CMatchUI.java +++ b/src/main/java/forge/gui/match/CMatchUI.java @@ -34,6 +34,8 @@ import forge.Singletons; import forge.game.phase.PhaseType; import forge.game.player.LobbyPlayer; import forge.game.player.Player; +import forge.game.zone.PlayerZone; +import forge.game.zone.ZoneType; import forge.gui.framework.EDocID; import forge.gui.match.controllers.CDetail; import forge.gui.match.controllers.CMessage; @@ -58,6 +60,7 @@ public enum CMatchUI { SINGLETON_INSTANCE; private List sortedPlayers; + private VMatchUI view; private ImageIcon getPlayerAvatar(final Player p, final int defaultIndex) { LobbyPlayer lp = p.getLobbyPlayer(); @@ -83,6 +86,8 @@ public enum CMatchUI { * @param numHandPanels int */ public void initMatch(final List players, LobbyPlayer localPlayer) { + view = VMatchUI.SINGLETON_INSTANCE; + // TODO fix for use with multiplayer final String[] indices = Singletons.getModel().getPreferences().getPref(FPref.UI_AVATARS).split(","); @@ -111,8 +116,8 @@ public enum CMatchUI { } // Replace old instances - VMatchUI.SINGLETON_INSTANCE.setCommandViews(commands); - VMatchUI.SINGLETON_INSTANCE.setFieldViews(fields); + view.setCommandViews(commands); + view.setFieldViews(fields); VPlayers.SINGLETON_INSTANCE.init(players); @@ -121,9 +126,15 @@ public enum CMatchUI { public void initHandViews(LobbyPlayer localPlayer) { final List hands = new ArrayList(); + final Iterable oldHands = view.getHands(); int i = 0; for (Player p : sortedPlayers) { + + PlayerZone hand = p.getZone(ZoneType.Hand); + for(VHand vh : oldHands) + hand.deleteObserver(vh.getLayoutControl()); + if (p.getLobbyPlayer() == localPlayer) { VHand newHand = new VHand(EDocID.Hands[i], p); newHand.getLayoutControl().initialize(); @@ -137,7 +148,7 @@ public enum CMatchUI { newHand.getLayoutControl().initialize(); hands.add(newHand); } - VMatchUI.SINGLETON_INSTANCE.setHandViews(hands); + view.setHandViews(hands); } private List shiftPlayersPlaceLocalFirst(final List players, LobbyPlayer localPlayer) { @@ -163,7 +174,7 @@ public enum CMatchUI { // This method is in the top-level controller because it affects ALL fields // (not just one). public void resetAllPhaseButtons() { - for (final VField v : VMatchUI.SINGLETON_INSTANCE.getFieldViews()) { + for (final VField v : view.getFieldViews()) { v.resetPhaseButtons(); } } @@ -175,7 +186,7 @@ public enum CMatchUI { public VField getFieldViewFor(Player p) { int idx = getPlayerIndex(p); - return idx < 0 ? null : VMatchUI.SINGLETON_INSTANCE.getFieldViews().get(idx); + return idx < 0 ? null :view.getFieldViews().get(idx); } /** diff --git a/src/main/java/forge/gui/match/VMatchUI.java b/src/main/java/forge/gui/match/VMatchUI.java index d223ef83563..7d3b25f3950 100644 --- a/src/main/java/forge/gui/match/VMatchUI.java +++ b/src/main/java/forge/gui/match/VMatchUI.java @@ -162,4 +162,12 @@ public enum VMatchUI implements IVTopLevelUI { public void setCommandViews(List lstCommands0) { this.lstCommands = lstCommands0; } + + /** + * TODO: Write javadoc for this method. + * @return + */ + public Iterable getHands() { + return lstHands; + } } diff --git a/src/main/java/forge/gui/match/nonsingleton/CHand.java b/src/main/java/forge/gui/match/nonsingleton/CHand.java index f8f20a2aa88..ecb6388cf76 100644 --- a/src/main/java/forge/gui/match/nonsingleton/CHand.java +++ b/src/main/java/forge/gui/match/nonsingleton/CHand.java @@ -76,7 +76,8 @@ public class CHand implements ICDoc, Observer { if (player != null) player.getZone(ZoneType.Hand).addObserver(this); - view.getHandArea().addMouseListener(madCardClick); + HandArea area = view.getHandArea(); + area.addMouseListener(madCardClick); } /**