diff options
Diffstat (limited to 'src/jrummikub')
-rw-r--r-- | src/jrummikub/control/ApplicationControl.java | 95 | ||||
-rw-r--r-- | src/jrummikub/control/SettingsControl.java | 7 | ||||
-rw-r--r-- | src/jrummikub/control/network/LoginControl.java | 25 |
3 files changed, 97 insertions, 30 deletions
diff --git a/src/jrummikub/control/ApplicationControl.java b/src/jrummikub/control/ApplicationControl.java index e00952d..895733b 100644 --- a/src/jrummikub/control/ApplicationControl.java +++ b/src/jrummikub/control/ApplicationControl.java @@ -1,5 +1,6 @@ package jrummikub.control; +import jrummikub.control.network.LoginControl; import jrummikub.model.GameSettings; import jrummikub.model.GameState; import jrummikub.model.IRoundState; @@ -14,38 +15,38 @@ import jrummikub.view.IView.BottomPanelType; * game control */ public class ApplicationControl { + private SettingsControl settingsControl; + private LoginControl loginControl; private SaveControl saveControl; - private IView view; private GameControl gameControl; + private IView view; + /** * Creates a new application control * * @param view * the view to use */ - public ApplicationControl(IView view) { + public ApplicationControl(final IView view) { this.view = view; saveControl = new SaveControl(view); + view.getMenuNewGameEvent().add(new IListener() { + @Override + public void handle() { + abortControls(); + startApplication(); + } + }); view.getMenuQuitEvent().add(new IListener() { @Override public void handle() { System.exit(0); } }); - } - /** - * Starts the application by showing the game settings dialog panel - */ - public void startApplication() { - view.showScorePanel(false); - view.setBottomPanel(BottomPanelType.START_GAME_PANEL); - saveControl.setGameSettings(null); - saveControl.setGameState(null); - final SettingsControl settingsControl = new SettingsControl(view, - new GameSettings()); + addLoginControlListeners(); saveControl.getLoadEvent().add( new IListener3<GameSettings, GameState, IRoundState>() { @@ -53,20 +54,80 @@ public class ApplicationControl { @Override public void handle(GameSettings settings, GameState gameState, IRoundState roundState) { - settingsControl.abort(); - if (gameControl != null) { - gameControl.abortGame(); - } + abortControls(); gameControl = new GameControl(settings, saveControl, view); addGameControlListeners(gameControl); gameControl.continueGame(gameState, roundState); } }); + } + + private void addLoginControlListeners() { + view.getNetworkGameEvent().add(new IListener() { + @Override + public void handle() { + if (settingsControl != null) { + settingsControl.abort(); + } + + if (gameControl != null) { + gameControl.abortGame(); + } + + loginControl = new LoginControl(view); + loginControl.getLoginEvent().add( + new IListener3<String, String, String>() { + @Override + public void handle(String userName, String password, + String channelName) { + // TODO Auto-generated method stub + } + }); + loginControl.getCancelEvent().add(new IListener() { + @Override + public void handle() { + startApplication(); + } + }); + loginControl.startLogin(); + } + }); + } + + private void abortControls() { + if (settingsControl != null) { + settingsControl.abort(); + settingsControl = null; + } + + if (gameControl != null) { + gameControl.abortGame(); + gameControl = null; + } + + if (loginControl != null) { + loginControl.abort(); + loginControl = null; + } + } + + /** + * Starts the application by showing the game settings dialog panel + */ + public void startApplication() { + view.showScorePanel(false); + view.setBottomPanel(BottomPanelType.START_GAME_PANEL); + saveControl.setGameSettings(null); + saveControl.setGameState(null); + + settingsControl = new SettingsControl(view, new GameSettings()); settingsControl.getStartGameEvent().add(new IListener1<GameSettings>() { @Override public void handle(GameSettings settings) { + settingsControl = null; + saveControl.setGameSettings(settings); gameControl = new GameControl(settings, saveControl, view); diff --git a/src/jrummikub/control/SettingsControl.java b/src/jrummikub/control/SettingsControl.java index 2589d88..80b334a 100644 --- a/src/jrummikub/control/SettingsControl.java +++ b/src/jrummikub/control/SettingsControl.java @@ -334,16 +334,11 @@ public class SettingsControl { return; } - view.showSettingsPanel(false); - - for (Connection c : connections) { - c.remove(); - } + abort(); startGameEvent.emit(settings); } public void abort() { - // TODO Auto-generated method stub view.showSettingsPanel(false); for (Connection c : connections) { c.remove(); diff --git a/src/jrummikub/control/network/LoginControl.java b/src/jrummikub/control/network/LoginControl.java index e03625d..07e0b71 100644 --- a/src/jrummikub/control/network/LoginControl.java +++ b/src/jrummikub/control/network/LoginControl.java @@ -1,5 +1,9 @@ package jrummikub.control.network; +import java.util.ArrayList; +import java.util.List; + +import jrummikub.util.Connection; import jrummikub.util.Event; import jrummikub.util.Event3; import jrummikub.util.IEvent; @@ -12,30 +16,30 @@ public class LoginControl { private IView view; private Event3<String, String, String> loginEvent = new Event3<String, String, String>(); private Event cancelEvent = new Event(); + private List<Connection> connections = new ArrayList<Connection>(); public LoginControl(final IView view) { this.view = view; - view.getLoginPanel().getLoginEvent() + connections.add(view.getLoginPanel().getLoginEvent() .add(new IListener3<String, String, String>() { @Override public void handle(String userName, String password, String channelName) { - view.showLoginPanel(false); + abort(); loginEvent.emit(userName, password, channelName); } - }); + })); - view.getLoginPanel().getCancelEvent().add(new IListener() { + connections.add(view.getLoginPanel().getCancelEvent().add(new IListener() { @Override public void handle() { - view.showLoginPanel(false); + abort(); cancelEvent.emit(); } - }); + })); } public void startLogin() { - view.clearView(); view.showLoginPanel(true); } @@ -47,4 +51,11 @@ public class LoginControl { return cancelEvent; } + public void abort() { + view.showLoginPanel(false); + for (Connection c : connections) { + c.remove(); + } + } + } |