diff --git a/forge-gui-desktop/src/main/java/forge/GuiDesktop.java b/forge-gui-desktop/src/main/java/forge/GuiDesktop.java index 33b8f8a68ac..5e2d1776509 100644 --- a/forge-gui-desktop/src/main/java/forge/GuiDesktop.java +++ b/forge-gui-desktop/src/main/java/forge/GuiDesktop.java @@ -332,7 +332,7 @@ public class GuiDesktop implements IGuiBase { new Runnable() { @Override public void run() { - CPrompt.SINGLETON_INSTANCE.getInputControl().selectAbility(ab); + CPrompt.SINGLETON_INSTANCE.selectAbility(ab); } }, enabled); if (shortcut > 0) { diff --git a/forge-gui-desktop/src/main/java/forge/control/FControl.java b/forge-gui-desktop/src/main/java/forge/control/FControl.java index 9e5e0854b85..85ae560526b 100644 --- a/forge-gui-desktop/src/main/java/forge/control/FControl.java +++ b/forge-gui-desktop/src/main/java/forge/control/FControl.java @@ -81,7 +81,6 @@ import forge.screens.match.VMatchUI; import forge.screens.match.controllers.CDock; import forge.screens.match.controllers.CLog; import forge.screens.match.controllers.CPlayers; -import forge.screens.match.controllers.CPrompt; import forge.screens.match.controllers.CStack; import forge.screens.match.views.VAntes; import forge.screens.match.views.VDev; @@ -523,8 +522,6 @@ public enum FControl implements KeyEventDispatcher { setCurrentScreen(FScreen.MATCH_SCREEN); SDisplayUtil.showTab(EDocID.REPORT_LOG.getDoc()); - CPrompt.SINGLETON_INSTANCE.getInputControl().setGame(game0); - // Listen to DuelOutcome event to show ViewWinLose game0.subscribeToEvents(fcVisitor); diff --git a/forge-gui-desktop/src/main/java/forge/screens/match/controllers/CDock.java b/forge-gui-desktop/src/main/java/forge/screens/match/controllers/CDock.java index ebe8c0e6fed..804bf0e1bdc 100644 --- a/forge-gui-desktop/src/main/java/forge/screens/match/controllers/CDock.java +++ b/forge-gui-desktop/src/main/java/forge/screens/match/controllers/CDock.java @@ -62,7 +62,7 @@ public enum CDock implements ICDoc { */ public void endTurn() { game.autoPassUntilEndOfTurn(); - if (!CPrompt.SINGLETON_INSTANCE.getInputControl().passPriority()) { + if (!CPrompt.SINGLETON_INSTANCE.passPriority()) { game.autoPassCancel(); } } diff --git a/forge-gui-desktop/src/main/java/forge/screens/match/controllers/CField.java b/forge-gui-desktop/src/main/java/forge/screens/match/controllers/CField.java index 89f8de18c4d..aeec5bceb0e 100644 --- a/forge-gui-desktop/src/main/java/forge/screens/match/controllers/CField.java +++ b/forge-gui-desktop/src/main/java/forge/screens/match/controllers/CField.java @@ -53,7 +53,7 @@ public class CField implements ICDoc { private final MouseListener madAvatar = new MouseAdapter() { @Override public void mousePressed(final MouseEvent e) { - CPrompt.SINGLETON_INSTANCE.getInputControl().selectPlayer(player, new MouseTriggerEvent(e)); + CPrompt.SINGLETON_INSTANCE.selectPlayer(player, new MouseTriggerEvent(e)); } }; @@ -103,7 +103,7 @@ public class CField implements ICDoc { return; } - CPrompt.SINGLETON_INSTANCE.getInputControl().selectCard(c, null); + CPrompt.SINGLETON_INSTANCE.selectCard(c, null); // Temporarily commenting out the below to route, Flashback cards through the InputProxy /* final Game game = player.getGame(); diff --git a/forge-gui-desktop/src/main/java/forge/screens/match/controllers/CPrompt.java b/forge-gui-desktop/src/main/java/forge/screens/match/controllers/CPrompt.java index 8d5dcade4ec..57b75710b6a 100644 --- a/forge-gui-desktop/src/main/java/forge/screens/match/controllers/CPrompt.java +++ b/forge-gui-desktop/src/main/java/forge/screens/match/controllers/CPrompt.java @@ -32,10 +32,13 @@ import forge.Singletons; import forge.UiCommand; import forge.gui.framework.ICDoc; import forge.gui.framework.SDisplayUtil; -import forge.match.input.InputProxy; import forge.screens.match.views.VPrompt; import forge.toolbox.FSkin; +import forge.util.ITriggerEvent; +import forge.view.CardView; import forge.view.IGameView; +import forge.view.PlayerView; +import forge.view.SpellAbilityView; /** * Controls the prompt panel in the match UI. @@ -46,20 +49,19 @@ public enum CPrompt implements ICDoc { /** */ SINGLETON_INSTANCE; - private InputProxy inputControl = new InputProxy(); private Component lastFocusedButton = null; - private VPrompt view = VPrompt.SINGLETON_INSTANCE; + private final VPrompt view = VPrompt.SINGLETON_INSTANCE; private final ActionListener actCancel = new ActionListener() { @Override public void actionPerformed(final ActionEvent evt) { - inputControl.selectButtonCancel(); + selectButtonCancel(); } }; private final ActionListener actOK = new ActionListener() { @Override public void actionPerformed(final ActionEvent evt) { - inputControl.selectButtonOK(); + selectButtonOk(); } }; @@ -87,13 +89,28 @@ public enum CPrompt implements ICDoc { _initButton(view.getBtnOK(), actOK); } - /** - * Gets the input control. - * - * @return GuiInput - */ - public InputProxy getInputControl() { - return this.inputControl; + public void selectButtonOk() { + Singletons.getControl().getGameView().selectButtonOk(); + } + + public void selectButtonCancel() { + Singletons.getControl().getGameView().selectButtonCancel(); + } + + public boolean passPriority() { + return Singletons.getControl().getGameView().passPriority(); + } + + public void selectPlayer(final PlayerView player, final ITriggerEvent triggerEvent) { + Singletons.getControl().getGameView().selectPlayer(player, triggerEvent); + } + + public void selectCard(final CardView card, final ITriggerEvent triggerEvent) { + Singletons.getControl().getGameView().selectCard(card, triggerEvent); + } + + public void selectAbility(final SpellAbilityView sa) { + Singletons.getControl().getGameView().selectAbility(sa); } /** @param s0   {@link java.lang.String} */ @@ -117,6 +134,13 @@ public enum CPrompt implements ICDoc { /* (non-Javadoc) * @see java.util.Observer#update(java.util.Observable, java.lang.Object) */ + @Override + public void update() { + // set focus back to button that last had it + if (null != lastFocusedButton) { + lastFocusedButton.requestFocusInWindow(); + } + } public void updateText() { FThreads.assertExecutedByEdt(GuiBase.getInterface(), true); @@ -125,12 +149,4 @@ public enum CPrompt implements ICDoc { view.getLblGames().setText(text); view.getLblGames().setToolTipText(String.format("%s: Game #%d of %d, turn %d", game.getGameType(), game.getNumPlayedGamesInMatch() + 1, game.getNumGamesInMatch(), game.getTurnNumber())); } - - @Override - public void update() { - // set focus back to button that last had it - if (null != lastFocusedButton) { - lastFocusedButton.requestFocusInWindow(); - } - } } diff --git a/forge-gui-desktop/src/main/java/forge/screens/match/views/VStack.java b/forge-gui-desktop/src/main/java/forge/screens/match/views/VStack.java index 35082432bf6..513db434d98 100644 --- a/forge-gui-desktop/src/main/java/forge/screens/match/views/VStack.java +++ b/forge-gui-desktop/src/main/java/forge/screens/match/views/VStack.java @@ -260,7 +260,7 @@ public enum VStack implements IVDoc { game.setShouldAutoYield(key, !autoYield); if (!autoYield && game.peekStack() == item) { //auto-pass priority if ability is on top of stack - CPrompt.SINGLETON_INSTANCE.getInputControl().passPriority(); + CPrompt.SINGLETON_INSTANCE.passPriority(); } } }); @@ -278,7 +278,7 @@ public enum VStack implements IVDoc { if (game.peekStack() == item && Singletons.getControl().getInputQueue().getInput() instanceof InputConfirm) { //auto-yes if ability is on top of stack - CPrompt.SINGLETON_INSTANCE.getInputControl().selectButtonOK(); + CPrompt.SINGLETON_INSTANCE.selectButtonOk(); } } } @@ -297,7 +297,7 @@ public enum VStack implements IVDoc { if (game.peekStack() == item && Singletons.getControl().getInputQueue().getInput() instanceof InputConfirm) { //auto-no if ability is on top of stack - CPrompt.SINGLETON_INSTANCE.getInputControl().selectButtonOK(); + CPrompt.SINGLETON_INSTANCE.selectButtonOk(); } } } diff --git a/forge-gui-desktop/src/main/java/forge/view/arcane/HandArea.java b/forge-gui-desktop/src/main/java/forge/view/arcane/HandArea.java index bec926bc4e5..b5061dec92b 100644 --- a/forge-gui-desktop/src/main/java/forge/view/arcane/HandArea.java +++ b/forge-gui-desktop/src/main/java/forge/view/arcane/HandArea.java @@ -62,14 +62,14 @@ public class HandArea extends CardArea { /** {@inheritDoc} */ @Override public final void mouseLeftClicked(final CardPanel panel, final MouseEvent evt) { - CPrompt.SINGLETON_INSTANCE.getInputControl().selectCard(panel.getCard(), new MouseTriggerEvent(evt)); + CPrompt.SINGLETON_INSTANCE.selectCard(panel.getCard(), new MouseTriggerEvent(evt)); super.mouseLeftClicked(panel, evt); } /** {@inheritDoc} */ @Override public final void mouseRightClicked(final CardPanel panel, final MouseEvent evt) { - CPrompt.SINGLETON_INSTANCE.getInputControl().selectCard(panel.getCard(), new MouseTriggerEvent(evt)); + CPrompt.SINGLETON_INSTANCE.selectCard(panel.getCard(), new MouseTriggerEvent(evt)); super.mouseRightClicked(panel, evt); } } diff --git a/forge-gui-desktop/src/main/java/forge/view/arcane/PlayArea.java b/forge-gui-desktop/src/main/java/forge/view/arcane/PlayArea.java index c67a4a30ed5..30a6f03f915 100644 --- a/forge-gui-desktop/src/main/java/forge/view/arcane/PlayArea.java +++ b/forge-gui-desktop/src/main/java/forge/view/arcane/PlayArea.java @@ -571,7 +571,7 @@ public class PlayArea extends CardPanelContainer implements CardPanelMouseListen /** {@inheritDoc} */ @Override public final void mouseLeftClicked(final CardPanel panel, final MouseEvent evt) { - CPrompt.SINGLETON_INSTANCE.getInputControl().selectCard(panel.getCard(), new MouseTriggerEvent(evt)); + CPrompt.SINGLETON_INSTANCE.selectCard(panel.getCard(), new MouseTriggerEvent(evt)); if ((panel.getTappedAngle() != 0) && (panel.getTappedAngle() != CardPanel.TAPPED_ANGLE)) { return; } @@ -581,7 +581,7 @@ public class PlayArea extends CardPanelContainer implements CardPanelMouseListen /** {@inheritDoc} */ @Override public final void mouseRightClicked(final CardPanel panel, final MouseEvent evt) { - CPrompt.SINGLETON_INSTANCE.getInputControl().selectCard(panel.getCard(), new MouseTriggerEvent(evt)); + CPrompt.SINGLETON_INSTANCE.selectCard(panel.getCard(), new MouseTriggerEvent(evt)); super.mouseRightClicked(panel, evt); } diff --git a/forge-gui/src/main/java/forge/player/PlayerControllerLocal.java b/forge-gui/src/main/java/forge/player/PlayerControllerLocal.java index efeb0c19e41..485d350518a 100644 --- a/forge-gui/src/main/java/forge/player/PlayerControllerLocal.java +++ b/forge-gui/src/main/java/forge/player/PlayerControllerLocal.java @@ -78,6 +78,7 @@ import forge.match.input.InputConfirm; import forge.match.input.InputConfirmMulligan; import forge.match.input.InputPassPriority; import forge.match.input.InputProliferate; +import forge.match.input.InputProxy; import forge.match.input.InputSelectCardsForConvoke; import forge.match.input.InputSelectCardsFromList; import forge.match.input.InputSelectEntitiesFromList; @@ -105,8 +106,10 @@ import forge.view.ViewUtil; * Handles phase skips for now. */ public class PlayerControllerLocal extends PlayerControllerHuman implements IGameView { + private final InputProxy inputProxy; public PlayerControllerLocal(final Game game0, final Player p, final LobbyPlayer lp, final IGuiBase gui) { super(game0, p, lp, gui); + this.inputProxy = new InputProxy(this); // aggressively cache a view for each player for (final Player player : game.getRegisteredPlayers()) { getPlayerView(player); @@ -1406,6 +1409,36 @@ public class PlayerControllerLocal extends PlayerControllerHuman implements IGam return false; } + @Override + public void selectButtonOk() { + inputProxy.selectButtonOK(); + } + + @Override + public void selectButtonCancel() { + inputProxy.selectButtonCancel(); + } + + @Override + public boolean passPriority() { + return inputProxy.passPriority(); + } + + @Override + public void selectPlayer(final PlayerView player, final ITriggerEvent triggerEvent) { + inputProxy.selectPlayer(player, triggerEvent); + } + + @Override + public void selectCard(final CardView card, final ITriggerEvent triggerEvent) { + inputProxy.selectCard(card, triggerEvent); + } + + @Override + public void selectAbility(final SpellAbilityView sa) { + inputProxy.selectAbility(sa); + } + /* (non-Javadoc) * @see forge.view.IGameView#getGuiRegisteredPlayer(forge.LobbyPlayer) */ @@ -1681,5 +1714,6 @@ public class PlayerControllerLocal extends PlayerControllerHuman implements IGam @Override public void devPlaneswalkTo() { DevModeUtil.devModeRiggedPlanarRoll(game, this); - } + } + } diff --git a/forge-gui/src/main/java/forge/quest/data/QuestAchievements.java b/forge-gui/src/main/java/forge/quest/data/QuestAchievements.java index 90848a74fa2..c1e3a0bc51d 100644 --- a/forge-gui/src/main/java/forge/quest/data/QuestAchievements.java +++ b/forge-gui/src/main/java/forge/quest/data/QuestAchievements.java @@ -39,7 +39,6 @@ public class QuestAchievements { // Difficulty - will store only index from now. private int difficulty; - @SuppressWarnings("unused") public QuestAchievements() { //needed for XML serialization } diff --git a/forge-gui/src/main/java/forge/view/IGameView.java b/forge-gui/src/main/java/forge/view/IGameView.java index d878fd3613f..1de59faa6e2 100644 --- a/forge-gui/src/main/java/forge/view/IGameView.java +++ b/forge-gui/src/main/java/forge/view/IGameView.java @@ -10,6 +10,7 @@ import forge.game.GameOutcome; import forge.game.GameType; import forge.game.phase.PhaseType; import forge.game.player.RegisteredPlayer; +import forge.util.ITriggerEvent; public interface IGameView { @@ -45,11 +46,19 @@ public interface IGameView { public abstract CombatView getCombat(); public abstract void addLogObserver(Observer o); - public abstract List getLogEntries(final GameLogEntryType maxLogLevel); - public abstract List getLogEntriesExact(final GameLogEntryType logLevel); + public abstract List getLogEntries(GameLogEntryType maxLogLevel); + public abstract List getLogEntriesExact(GameLogEntryType logLevel); + // Input controls public abstract boolean tryUndoLastAction(); + public abstract void selectButtonOk(); + public abstract void selectButtonCancel(); + public abstract boolean passPriority(); + public abstract void selectPlayer(PlayerView player, ITriggerEvent triggerEvent); + public abstract void selectCard(CardView card, ITriggerEvent triggerEvent); + public abstract void selectAbility(SpellAbilityView sa); + // the following method should eventually be replaced by methods returning // View classes @Deprecated