diff --git a/src/main/java/forge/control/match/ControlHand.java b/src/main/java/forge/control/match/ControlHand.java index a3ef1e86b28..c7fe46aab82 100644 --- a/src/main/java/forge/control/match/ControlHand.java +++ b/src/main/java/forge/control/match/ControlHand.java @@ -51,6 +51,9 @@ public class ControlHand { private final List cardsInPanel; private final ViewHand view; + private MouseAdapter maCardClick; + private MouseMotionAdapter maCardMove; + /** * Child controller - handles operations related to cards in user's hand and * their Swing components, which are assembled in ViewHand. @@ -61,11 +64,37 @@ public class ControlHand { public ControlHand(final ViewHand v) { this.view = v; this.cardsInPanel = new ArrayList(); + + maCardClick = new MouseAdapter() { + // Card click + @Override + public void mousePressed(final MouseEvent e) { + if (e.getButton() != MouseEvent.BUTTON1) { + return; + } + final Card c = view.getHandArea().getCardFromMouseOverPanel(); + if (c != null) { + view.getTopLevel().getInputController().getInputControl().selectCard(c, AllZone.getHumanPlayer().getZone(Zone.Hand)); + view.getTopLevel().getInputController().getView().getBtnOK().requestFocusInWindow(); + } + } + }; + + maCardMove = new MouseMotionAdapter() { + // Card mouseover + @Override + public void mouseMoved(final MouseEvent me) { + final Card c = view.getHandArea().getCardFromMouseOverPanel(); + if (c != null) { + ((GuiTopLevel) AllZone.getDisplay()).setCard(c); + } + } + }; } /** Adds observers to hand panel. */ public void addObservers() { - final ViewTopLevel t = ((GuiTopLevel) AllZone.getDisplay()).getController().getMatchController().getView(); + final ViewTopLevel t = view.getTopLevel(); AllZone.getHumanPlayer().getZone(Zone.Hand).addObserver(new Observer() { @Override @@ -128,33 +157,11 @@ public class ControlHand { /** Adds listeners to hand panel: clicks, mouseover, etc. */ public void addListeners() { - final ViewTopLevel t = ((GuiTopLevel) AllZone.getDisplay()).getController().getMatchController().getView(); + view.getHandArea().removeMouseListener(maCardClick); + view.getHandArea().addMouseListener(maCardClick); - view.getHandArea().addMouseListener(new MouseAdapter() { - // Card click - @Override - public void mousePressed(final MouseEvent e) { - if (e.getButton() != MouseEvent.BUTTON1) { - return; - } - final Card c = view.getHandArea().getCardFromMouseOverPanel(); - if (c != null) { - t.getInputController().getInputControl().selectCard(c, AllZone.getHumanPlayer().getZone(Zone.Hand)); - t.getInputController().getView().getBtnOK().requestFocusInWindow(); - } - } - }); - - view.getHandArea().addMouseMotionListener(new MouseMotionAdapter() { - // Card mouseover - @Override - public void mouseMoved(final MouseEvent me) { - final Card c = view.getHandArea().getCardFromMouseOverPanel(); - if (c != null) { - ((GuiTopLevel) AllZone.getDisplay()).setCard(c); - } - } // mouseMoved - }); + view.getHandArea().removeMouseMotionListener(maCardMove); + view.getHandArea().addMouseMotionListener(maCardMove); } /** diff --git a/src/main/java/forge/view/match/ViewHand.java b/src/main/java/forge/view/match/ViewHand.java index 6d9b5eb85e1..680ee72ddec 100644 --- a/src/main/java/forge/view/match/ViewHand.java +++ b/src/main/java/forge/view/match/ViewHand.java @@ -33,14 +33,18 @@ import forge.view.toolbox.FRoundedPanel; public class ViewHand extends FRoundedPanel { private ControlHand control; private HandArea hand; + private ViewTopLevel topLevel; /** - * VIEW - Swing components for user hand. + * Swing components for user hand. + * + * @param v0   The ViewTopLevel parent. */ - public ViewHand() { + public ViewHand(ViewTopLevel v0) { final JScrollPane scroller = new JScrollPane(); ViewHand.this.hand = new HandArea(scroller, null); ViewHand.this.setBackground(AllZone.getSkin().getColor("theme")); + topLevel = v0; scroller.setViewportView(ViewHand.this.hand); scroller.setOpaque(false); @@ -72,4 +76,9 @@ public class ViewHand extends FRoundedPanel { public HandArea getHandArea() { return ViewHand.this.hand; } + + /** @return ViewTopLevel */ + public ViewTopLevel getTopLevel() { + return this.topLevel; + } } diff --git a/src/main/java/forge/view/match/ViewTopLevel.java b/src/main/java/forge/view/match/ViewTopLevel.java index 8dfeb666995..59199e87eed 100644 --- a/src/main/java/forge/view/match/ViewTopLevel.java +++ b/src/main/java/forge/view/match/ViewTopLevel.java @@ -134,7 +134,7 @@ public class ViewTopLevel extends FPanel { // Declare and add various view components input = new ViewInput(); - hand = new ViewHand(); + hand = new ViewHand(this); dock = new ViewDock(); battlefield = new ViewBattlefield(); tabber = new ViewTabber();