summaryrefslogtreecommitdiffstats
path: root/src/jrummikub/control/SettingsControl.java
diff options
context:
space:
mode:
authorMatthias Schiffer <mschiffer@universe-factory.net>2011-06-13 22:29:28 +0200
committerMatthias Schiffer <mschiffer@universe-factory.net>2011-06-13 22:29:28 +0200
commit570187c95000afd1ac9f6d6e8bb5cab30b984e87 (patch)
treecd6ed34d64da7621545d66c9f1126c723645b58f /src/jrummikub/control/SettingsControl.java
parent741a94953f2d4667de564d8ade37e68a04442fe0 (diff)
downloadJRummikub-570187c95000afd1ac9f6d6e8bb5cab30b984e87.tar
JRummikub-570187c95000afd1ac9f6d6e8bb5cab30b984e87.zip
Implemented most of network settings control
git-svn-id: svn://sunsvr01.isp.uni-luebeck.de/swproj13/trunk@425 72836036-5685-4462-b002-a69064685172
Diffstat (limited to 'src/jrummikub/control/SettingsControl.java')
-rw-r--r--src/jrummikub/control/SettingsControl.java106
1 files changed, 61 insertions, 45 deletions
diff --git a/src/jrummikub/control/SettingsControl.java b/src/jrummikub/control/SettingsControl.java
index abcbd5d..398ce5d 100644
--- a/src/jrummikub/control/SettingsControl.java
+++ b/src/jrummikub/control/SettingsControl.java
@@ -3,6 +3,7 @@ package jrummikub.control;
import java.awt.Color;
import java.util.ArrayList;
import java.util.Arrays;
+import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
@@ -34,20 +35,44 @@ public class SettingsControl {
* Create a new settings control
*
* @param view
- * the view to use
+ * the view to use
* @param settings
- * initial game settings
+ * initial game settings
*/
public SettingsControl(IView view, GameSettings settings) {
this.view = view;
this.settings = settings;
view.getSettingsPanel().enableNetworkMode(false);
+ view.getSettingsPanel().setPlayerNamesEditable(
+ Collections.<Boolean> emptyList());
+ addPlayer();
+ addPlayer();
+
+ addListeners();
+
+ connections.add(view.getSettingsPanel().getStartGameEvent()
+ .add(new IListener() {
+ @Override
+ public void handle() {
+ startGame();
+ }
+ }));
+ }
+
+ protected SettingsControl() {
+ }
+
+ protected void addListeners() {
+ addPlayerSettingsListeners();
+
+ addOptionListeners1();
+ addOptionListeners2();
}
/**
- * the start game event is emitted when the user wants to start a game and
- * the settings made are valid
+ * the start game event is emitted when the user wants to start a game and the
+ * settings made are valid
*
* @return the event
*/
@@ -59,28 +84,12 @@ public class SettingsControl {
* Start the operation of the settings control
*/
public void startSettings() {
- addPlayer();
- addPlayer();
-
- addPlayerSettingsListeners();
-
- addOptionListeners1();
- addOptionListeners2();
-
- connections.add(view.getSettingsPanel().getStartGameEvent()
- .add(new IListener() {
- @Override
- public void handle() {
- startGame();
- }
- }));
view.showSettingsPanel(true);
}
private void addOptionListeners1() {
connections.add(view.getSettingsPanel()
- .getChangeInitialMeldThresholdEvent()
- .add(new IListener1<Integer>() {
+ .getChangeInitialMeldThresholdEvent().add(new IListener1<Integer>() {
@Override
public void handle(Integer value) {
settings.setInitialMeldThreshold(value);
@@ -105,8 +114,7 @@ public class SettingsControl {
update();
}
}));
- connections.add(view.getSettingsPanel()
- .getChangeNumberOfStonesDealtEvent()
+ connections.add(view.getSettingsPanel().getChangeNumberOfStonesDealtEvent()
.add(new IListener1<Integer>() {
@Override
public void handle(Integer value) {
@@ -217,7 +225,7 @@ public class SettingsControl {
}));
}
- private void addPlayer() {
+ protected void addPlayer() {
if (settings.getPlayerList().size() >= ISettingsPanel.PLAYER_COLORS.length) {
return;
}
@@ -237,7 +245,13 @@ public class SettingsControl {
break;
}
- // Next, find unused color
+ settings.getPlayerList().add(
+ new PlayerSettings("Spieler " + num, findUnusedColor()));
+
+ update();
+ }
+
+ protected Color findUnusedColor() {
Color color = null;
colorLoop: for (Color c : ISettingsPanel.PLAYER_COLORS) {
color = c;
@@ -248,11 +262,7 @@ public class SettingsControl {
}
break;
}
-
- settings.getPlayerList().add(
- new PlayerSettings("Spieler " + num, color));
-
- update();
+ return color;
}
private void removePlayer(int i) {
@@ -283,17 +293,18 @@ public class SettingsControl {
update();
}
- private void setPlayerType(int i, Type type) {
- settings.getPlayerList().get(i).setTurnControlType(type);
+ protected void setPlayerType(int i, Type type) {
+ settings.getPlayerList().get(i).setType(type);
update();
}
protected void update() {
+ boolean enableRemoveButtons = settings.getPlayerList().size() > 2;
view.getSettingsPanel().enableRemovePlayerButtons(
- settings.getPlayerList().size() > 2);
- view.getSettingsPanel()
- .enableAddPlayerButton(
- settings.getPlayerList().size() < ISettingsPanel.PLAYER_COLORS.length);
+ Collections.nCopies(settings.getPlayerList().size(),
+ enableRemoveButtons));
+ view.getSettingsPanel().enableAddPlayerButton(
+ settings.getPlayerList().size() < ISettingsPanel.PLAYER_COLORS.length);
checkSettings();
@@ -305,7 +316,7 @@ public class SettingsControl {
view.getSettingsPanel().setGameSettings(settings);
}
- private boolean checkSettings() {
+ protected boolean checkSettings() {
if (!checkErrors()) {
return false;
}
@@ -328,13 +339,19 @@ public class SettingsControl {
}
}
for (int i = 0; i < settings.getPlayerList().size(); ++i) {
- String name = settings.getPlayerList().get(i).getName();
+ PlayerSettings player1 = settings.getPlayerList().get(i);
+ String name = player1.getName();
+ Type type = player1.getType();
+
+ if (type == Type.NETWORK) {
+ continue;
+ }
for (int j = i + 1; j < settings.getPlayerList().size(); ++j) {
- if (settings.getPlayerList().get(j).getName().equals(name)) {
- view.getSettingsPanel()
- .setError(
- ISettingsPanel.SettingsError.DUPLICATE_PLAYER_NAME_ERROR);
+ PlayerSettings player2 = settings.getPlayerList().get(j);
+ if (player2.getName().equals(name) && player2.getType() == type) {
+ view.getSettingsPanel().setError(
+ ISettingsPanel.SettingsError.DUPLICATE_PLAYER_NAME_ERROR);
view.getSettingsPanel().enableStartGameButton(false);
return false;
}
@@ -343,8 +360,7 @@ public class SettingsControl {
int totalStonesDealt = settings.getNumberOfStonesDealt()
* settings.getPlayerList().size();
- int totalStones = settings.getHighestValue()
- * settings.getStoneSetNumber()
+ int totalStones = settings.getHighestValue() * settings.getStoneSetNumber()
* settings.getStoneColors().size() + settings.getJokerNumber();
if (totalStones <= totalStonesDealt) {
@@ -373,7 +389,7 @@ public class SettingsControl {
boolean humanPlayerFound = false;
for (PlayerSettings player : settings.getPlayerList()) {
- if (player.getTurnControlType() == Type.HUMAN) {
+ if (player.getType() == Type.HUMAN) {
humanPlayerFound = true;
break;
}