summaryrefslogtreecommitdiffstats
path: root/src/jrummikub/control
diff options
context:
space:
mode:
Diffstat (limited to 'src/jrummikub/control')
-rw-r--r--src/jrummikub/control/ApplicationControl.java11
-rw-r--r--src/jrummikub/control/network/NetworkControl.java45
2 files changed, 44 insertions, 12 deletions
diff --git a/src/jrummikub/control/ApplicationControl.java b/src/jrummikub/control/ApplicationControl.java
index 18d3ba9..752cb3c 100644
--- a/src/jrummikub/control/ApplicationControl.java
+++ b/src/jrummikub/control/ApplicationControl.java
@@ -56,9 +56,13 @@ public class ApplicationControl {
});
}
});
- IListener quitListener = new IListener() {
+ view.getQuitEvent().add(new IListener() {
@Override
public void handle() {
+ if (networkControl != null) {
+ return;
+ }
+
if (gameControl == null) {
System.exit(0);
} else {
@@ -73,10 +77,7 @@ public class ApplicationControl {
});
}
}
- };
- view.getMenuQuitEvent().add(quitListener);
-
- view.getQuitEvent().add(quitListener);
+ });
view.getQuitWarningPanel().getCancelEvent().add(new IListener() {
@Override
diff --git a/src/jrummikub/control/network/NetworkControl.java b/src/jrummikub/control/network/NetworkControl.java
index 88f347c..b76c42a 100644
--- a/src/jrummikub/control/network/NetworkControl.java
+++ b/src/jrummikub/control/network/NetworkControl.java
@@ -17,6 +17,7 @@ import jrummikub.util.IEvent;
import jrummikub.util.IListener;
import jrummikub.util.IListener1;
import jrummikub.util.LoginData;
+import jrummikub.view.IQuitWarningPanel.QuitMode;
import jrummikub.view.IView;
import jrummikub.view.LoginError;
@@ -27,6 +28,7 @@ public class NetworkControl {
private IConnectionControl connectionControl;
private IView view;
private List<Connection> connections = new ArrayList<Connection>();
+ Connection tempConnection;
private Event stopNetworkEvent = new Event();
private Event backToLoginEvent = new Event();
@@ -57,11 +59,11 @@ public class NetworkControl {
* Creates a new network control
*
* @param loginData
- * user's login data
+ * user's login data
* @param connectionControl
- * current connection for events and messages
+ * current connection for events and messages
* @param view
- * for events and handlers
+ * for events and handlers
*/
public NetworkControl(final LoginData loginData,
IConnectionControl connectionControl, SaveControl saveControl,
@@ -73,6 +75,36 @@ public class NetworkControl {
addConnectionSetupListeners(loginData, view);
addConnectionControlListeners(view);
+ connections.add(view.getQuitEvent().add(new IListener() {
+ @Override
+ public void handle() {
+ if (gameControl == null) {
+ System.exit(0);
+ } else {
+ view.getQuitWarningPanel().setMode(QuitMode.QUIT_PROCESS);
+ view.showQuitWarningPanel(true);
+ tempConnection = view.getQuitWarningPanel().getQuitEvent()
+ .add(new IListener() {
+ @Override
+ public void handle() {
+ System.exit(0);
+ }
+ });
+ }
+ }
+ }));
+ connections.add(view.getQuitWarningPanel().getCancelEvent()
+ .add(new IListener() {
+ @Override
+ public void handle() {
+ view.showQuitWarningPanel(false);
+ if (tempConnection != null) {
+ tempConnection.remove();
+ tempConnection = null;
+ }
+ }
+ }));
+
connections.add(view.getGameListPanel().getJoinEvent()
.add(new IListener1<GameData>() {
@Override
@@ -108,7 +140,7 @@ public class NetworkControl {
* Adds the listeners for connection control events
*
* @param view
- * view for events
+ * view for events
*/
public void addConnectionControlListeners(final IView view) {
connections.add(connectionControl.getGameOfferEvent().add(
@@ -250,7 +282,7 @@ public class NetworkControl {
gameJoinControl.abort();
gameJoinControl = null;
}
- if (gameControl != null) {
+ if (gameControl != null) {
gameControl.abortGame();
gameControl = null;
}
@@ -306,8 +338,7 @@ public class NetworkControl {
if (gameOfferControl != null) {
return;
}
- gameOfferControl = new GameOfferControl(connectionControl, settings,
- view);
+ gameOfferControl = new GameOfferControl(connectionControl, settings, view);
gameOfferControl.getBackEvent().add(new IListener() {
@Override
public void handle() {