From 608cae25724e93f537f4873d2ad0969d66782d2a Mon Sep 17 00:00:00 2001 From: elcnesh Date: Wed, 3 Sep 2014 10:47:51 +0000 Subject: [PATCH] Refactor GameLog in new GUI code. --- .../src/main/java/forge/control/FControl.java | 2 +- .../java/forge/screens/match/ViewWinLose.java | 12 +++--- .../forge/screens/match/controllers/CLog.java | 15 +++---- .../java/forge/screens/match/views/VLog.java | 40 +++++++++---------- .../forge/player/PlayerControllerHuman.java | 33 +++++++++------ .../src/main/java/forge/view/IGameView.java | 12 ++++-- 6 files changed, 64 insertions(+), 50 deletions(-) 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 efd668ac692..8fbc46e4eff 100644 --- a/forge-gui-desktop/src/main/java/forge/control/FControl.java +++ b/forge-gui-desktop/src/main/java/forge/control/FControl.java @@ -516,7 +516,7 @@ public enum FControl implements KeyEventDispatcher { CDock.SINGLETON_INSTANCE.setModel(game0); CStack.SINGLETON_INSTANCE.setModel(game0, localPlayer); CPlayers.SINGLETON_INSTANCE.setModel(game0); - CLog.SINGLETON_INSTANCE.setModel(game0.getGameLog()); + CLog.SINGLETON_INSTANCE.setModel(game0); actuateMatchPreferences(); VAntes.SINGLETON_INSTANCE.setModel(players); diff --git a/forge-gui-desktop/src/main/java/forge/screens/match/ViewWinLose.java b/forge-gui-desktop/src/main/java/forge/screens/match/ViewWinLose.java index 90ef30a024a..822faa224b8 100644 --- a/forge-gui-desktop/src/main/java/forge/screens/match/ViewWinLose.java +++ b/forge-gui-desktop/src/main/java/forge/screens/match/ViewWinLose.java @@ -11,9 +11,11 @@ import javax.swing.SwingConstants; import javax.swing.SwingUtilities; import net.miginfocom.swing.MigLayout; + +import org.apache.commons.lang3.StringUtils; + import forge.LobbyPlayer; import forge.UiCommand; -import forge.game.GameLog; import forge.game.GameLogEntry; import forge.game.GameLogEntryType; import forge.gui.SOverlayUtils; @@ -105,7 +107,7 @@ public class ViewWinLose implements IWinLoseView { // Assemble game log scroller. final FTextArea txtLog = new FTextArea(); - txtLog.setText(game.getGameLog().getLogText(null).replace("[COMPUTER]", "[AI]")); + txtLog.setText(StringUtils.join(game.getLogEntries(null), "\r\n").replace("[COMPUTER]", "[AI]")); txtLog.setFont(FSkin.getFont(14)); txtLog.setFocusable(true); // allow highlighting and copying of log @@ -218,14 +220,12 @@ public class ViewWinLose implements IWinLoseView { } private void showGameOutcomeSummary() { - GameLog log = game.getGameLog(); - for (GameLogEntry o : log.getLogEntriesExact(GameLogEntryType.GAME_OUTCOME)) + for (final GameLogEntry o : game.getLogEntriesExact(GameLogEntryType.GAME_OUTCOME)) pnlOutcomes.add(new FLabel.Builder().text(o.message).fontSize(14).build(), "h 20!"); } private void showPlayerScores() { - GameLog log = game.getGameLog(); - for (GameLogEntry o : log.getLogEntriesExact(GameLogEntryType.MATCH_RESULTS)) { + for (final GameLogEntry o : game.getLogEntriesExact(GameLogEntryType.MATCH_RESULTS)) { lblStats.setText(removePlayerTypeFromLogMessage(o.message)); } } diff --git a/forge-gui-desktop/src/main/java/forge/screens/match/controllers/CLog.java b/forge-gui-desktop/src/main/java/forge/screens/match/controllers/CLog.java index 440da581921..31bac22cd81 100644 --- a/forge-gui-desktop/src/main/java/forge/screens/match/controllers/CLog.java +++ b/forge-gui-desktop/src/main/java/forge/screens/match/controllers/CLog.java @@ -2,9 +2,9 @@ package forge.screens.match.controllers; import forge.UiCommand; import forge.FThreads; -import forge.game.GameLog; import forge.gui.framework.ICDoc; import forge.screens.match.views.VLog; +import forge.view.IGameView; import java.util.Observable; import java.util.Observer; @@ -19,7 +19,8 @@ public enum CLog implements ICDoc, Observer { /** */ SINGLETON_INSTANCE; - private GameLog model; + private IGameView model; + /* (non-Javadoc) * @see forge.gui.framework.ICDoc#getCommandOnSelect() */ @@ -45,18 +46,18 @@ public enum CLog implements ICDoc, Observer { /** * TODO: Write javadoc for this method. - * @param gameLog + * @param game0 */ - public void setModel(GameLog gameLog) { - model = gameLog; - model.addObserver(this); + public void setModel(final IGameView game0) { + model = game0; + model.addLogObserver(this); } /* (non-Javadoc) * @see java.util.Observer#update(java.util.Observable, java.lang.Object) */ @Override - public void update(Observable o, Object arg) { + public void update(final Observable o, final Object arg) { update(); } diff --git a/forge-gui-desktop/src/main/java/forge/screens/match/views/VLog.java b/forge-gui-desktop/src/main/java/forge/screens/match/views/VLog.java index 56860ae6e65..62e6674d1ae 100644 --- a/forge-gui-desktop/src/main/java/forge/screens/match/views/VLog.java +++ b/forge-gui-desktop/src/main/java/forge/screens/match/views/VLog.java @@ -17,9 +17,14 @@ */ package forge.screens.match.views; +import java.util.List; + +import javax.swing.JPanel; + +import net.miginfocom.swing.MigLayout; + import com.google.common.collect.Lists; -import forge.game.GameLog; import forge.game.GameLogEntry; import forge.game.GameLogEntryType; import forge.gui.framework.DragCell; @@ -32,12 +37,7 @@ import forge.screens.match.GameLogPanel; import forge.screens.match.controllers.CLog; import forge.toolbox.FSkin; import forge.toolbox.FSkin.SkinFont; -import net.miginfocom.swing.MigLayout; - -import javax.swing.*; - -import java.util.ArrayList; -import java.util.List; +import forge.view.IGameView; /** * Assembles Swing components of game log report. @@ -50,10 +50,10 @@ public enum VLog implements IVDoc { // Keeps a record of log entries currently displayed so we can // easily identify new entries to be added to the game log. - private List displayedLogEntries = new ArrayList(); + private final List displayedLogEntries = Lists.newArrayList(); // Used to determine when a new game has started. - private GameLog gameLogModel = null; + private IGameView gameLogModel = null; // Fields used with interface IVDoc private DragCell parentCell; @@ -122,12 +122,12 @@ public enum VLog implements IVDoc { *

* This is an Observer update method. *

- * @param activeGameLogModel contains list of log entries. + * @param model contains list of log entries. */ - public void updateConsole(GameLog activeGameLogModel) { + public void updateConsole(final IGameView model) { if (isGameLogConsoleVisible()) { - resetDisplayIfNewGame(activeGameLogModel); - displayNewGameLogEntries(activeGameLogModel); + resetDisplayIfNewGame(model); + displayNewGameLogEntries(model); // Important : refreshLayout() needs to be called every update. refreshLayout(); } @@ -137,11 +137,11 @@ public enum VLog implements IVDoc { return parentCell.getSelected().equals(this); } - private void resetDisplayIfNewGame(GameLog activeGameLogModel) { - if (this.gameLogModel != activeGameLogModel) { + private void resetDisplayIfNewGame(final IGameView model) { + if (this.gameLogModel != model) { gameLog.reset(); this.displayedLogEntries.clear(); - this.gameLogModel = activeGameLogModel; + this.gameLogModel = model; } } @@ -164,17 +164,17 @@ public enum VLog implements IVDoc { p.add(gameLog, "w 10:100%, h 100%"); } - private void displayNewGameLogEntries(GameLog activeGameLogModel) { - List newLogEntries = Lists.reverse(getNewGameLogEntries(activeGameLogModel)); + private void displayNewGameLogEntries(final IGameView model) { + List newLogEntries = Lists.reverse(getNewGameLogEntries(model)); if (newLogEntries.size() > 0) { addNewLogEntriesToJPanel(newLogEntries); } } - private List getNewGameLogEntries(GameLog activeGameLogModel) { + private List getNewGameLogEntries(final IGameView model) { String logEntryType = FModel.getPreferences().getPref(FPref.DEV_LOG_ENTRY_TYPE); GameLogEntryType logVerbosityFilter = GameLogEntryType.valueOf(logEntryType); - List logEntries = activeGameLogModel.getLogEntries(logVerbosityFilter); + List logEntries = model.getLogEntries(logVerbosityFilter); // Set subtraction - remove all log entries from new list which are already displayed. logEntries.removeAll(this.displayedLogEntries); return logEntries; diff --git a/forge-gui/src/main/java/forge/player/PlayerControllerHuman.java b/forge-gui/src/main/java/forge/player/PlayerControllerHuman.java index 5c1fdb9473e..abbfb00044e 100644 --- a/forge-gui/src/main/java/forge/player/PlayerControllerHuman.java +++ b/forge-gui/src/main/java/forge/player/PlayerControllerHuman.java @@ -7,6 +7,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Map.Entry; +import java.util.Observer; import org.apache.commons.lang3.Range; import org.apache.commons.lang3.StringUtils; @@ -36,7 +37,7 @@ import forge.deck.DeckSection; import forge.events.UiEventAttackerDeclared; import forge.game.Game; import forge.game.GameEntity; -import forge.game.GameLog; +import forge.game.GameLogEntry; import forge.game.GameLogEntryType; import forge.game.GameObject; import forge.game.GameOutcome; @@ -1175,13 +1176,13 @@ public class PlayerControllerHuman extends PlayerController implements IGameView } } - @Override - public CardShields chooseRegenerationShield(Card c) { - if (c.getShield().size() < 2) { + @Override + public CardShields chooseRegenerationShield(Card c) { + if (c.getShield().size() < 2) { return Iterables.getFirst(c.getShield(), null); - } - return SGuiChoose.one("Choose a regeneration shield:", c.getShield()); - } + } + return SGuiChoose.one("Choose a regeneration shield:", c.getShield()); + } @Override public List chooseCardsYouWonToAddToDeck(List losses) { @@ -1361,13 +1362,21 @@ public class PlayerControllerHuman extends PlayerController implements IGameView } } - /* (non-Javadoc) - * @see forge.view.IGameView#getGameLog() - */ @Override - public GameLog getGameLog() { - return game.getGameLog(); + public void addLogObserver(final Observer o) { + game.getGameLog().addObserver(o); } + + @Override + public List getLogEntries(final GameLogEntryType maxLogLevel) { + return game.getGameLog().getLogEntries(maxLogLevel); + } + + @Override + public List getLogEntriesExact(final GameLogEntryType logLevel) { + return game.getGameLog().getLogEntriesExact(logLevel); + } + /* (non-Javadoc) * @see forge.view.IGameView#getGuiRegisteredPlayer(forge.LobbyPlayer) */ diff --git a/forge-gui/src/main/java/forge/view/IGameView.java b/forge-gui/src/main/java/forge/view/IGameView.java index 84daf344d64..2867d9f1bc1 100644 --- a/forge-gui/src/main/java/forge/view/IGameView.java +++ b/forge-gui/src/main/java/forge/view/IGameView.java @@ -1,9 +1,11 @@ package forge.view; import java.util.List; +import java.util.Observer; import forge.LobbyPlayer; -import forge.game.GameLog; +import forge.game.GameLogEntry; +import forge.game.GameLogEntryType; import forge.game.GameOutcome; import forge.game.GameType; import forge.game.phase.PhaseType; @@ -41,11 +43,13 @@ public interface IGameView { public abstract CombatView getCombat(); - // the following methods should eventually be replaced by methods returning + public abstract void addLogObserver(Observer o); + public abstract List getLogEntries(final GameLogEntryType maxLogLevel); + public abstract List getLogEntriesExact(final GameLogEntryType logLevel); + + // the following method should eventually be replaced by methods returning // View classes @Deprecated - public abstract GameLog getGameLog(); - @Deprecated public abstract RegisteredPlayer getGuiRegisteredPlayer(LobbyPlayer p); public abstract List getPlayers();