summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/jrummikub/control/ApplicationControl.java95
-rw-r--r--src/jrummikub/control/SettingsControl.java7
-rw-r--r--src/jrummikub/control/network/LoginControl.java25
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();
+ }
+ }
+
}