Tested and implemented player type selection in the settings panel

git-svn-id: svn://sunsvr01.isp.uni-luebeck.de/swproj13/trunk@317 72836036-5685-4462-b002-a69064685172
This commit is contained in:
Jannis Harder 2011-05-29 22:24:48 +02:00
parent d9b651828a
commit f3f52956f7
5 changed files with 59 additions and 5 deletions

View file

@ -2,6 +2,8 @@ package jrummikub.view;
import java.awt.Color; import java.awt.Color;
import jrummikub.control.turn.TurnControlFactory;
import jrummikub.control.turn.TurnControlFactory.Type;
import jrummikub.model.GameSettings; import jrummikub.model.GameSettings;
import jrummikub.util.IEvent; import jrummikub.util.IEvent;
import jrummikub.util.IEvent1; import jrummikub.util.IEvent1;
@ -22,6 +24,8 @@ public class MockSettingsPanel implements ISettingsPanel {
/** */ /** */
public MockEvent2<Integer, String> changePlayerNameEvent = new MockEvent2<Integer, String>(); public MockEvent2<Integer, String> changePlayerNameEvent = new MockEvent2<Integer, String>();
/** */ /** */
public MockEvent2<Integer, TurnControlFactory.Type> changePlayerTypeEvent = new MockEvent2<Integer, TurnControlFactory.Type>();
/** */
public MockEvent startGameEvent = new MockEvent(); public MockEvent startGameEvent = new MockEvent();
/** */ /** */
public SettingsError error = SettingsError.NO_ERROR; public SettingsError error = SettingsError.NO_ERROR;
@ -43,7 +47,6 @@ public class MockSettingsPanel implements ISettingsPanel {
public int initialMeldThreshold; public int initialMeldThreshold;
/** */ /** */
public int jokerNumber; public int jokerNumber;
@Override @Override
public IEvent getAddPlayerEvent() { public IEvent getAddPlayerEvent() {
return addPlayerEvent; return addPlayerEvent;
@ -119,4 +122,9 @@ public class MockSettingsPanel implements ISettingsPanel {
this.jokerNumber = jokerNumber; this.jokerNumber = jokerNumber;
} }
@Override
public IEvent2<Integer, Type> getChangePlayerTypeEvent() {
return changePlayerTypeEvent;
}
} }

View file

@ -4,6 +4,8 @@ import java.awt.Color;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import jrummikub.control.turn.TurnControlFactory;
import jrummikub.control.turn.TurnControlFactory.Type;
import jrummikub.model.GameSettings; import jrummikub.model.GameSettings;
import jrummikub.model.PlayerSettings; import jrummikub.model.PlayerSettings;
import jrummikub.util.Connection; import jrummikub.util.Connection;
@ -118,6 +120,13 @@ public class SettingsControl {
setPlayerName(i, name); setPlayerName(i, name);
} }
})); }));
connections.add(view.getSettingsPanel().getChangePlayerTypeEvent()
.add(new IListener2<Integer, TurnControlFactory.Type>() {
@Override
public void handle(Integer i, TurnControlFactory.Type type) {
setPlayerType(i, type);
}
}));
} }
private void addPlayer() { private void addPlayer() {
@ -186,6 +195,11 @@ public class SettingsControl {
update(); update();
} }
private void setPlayerType(Integer i, Type type) {
settings.getPlayerList().get(i).setTurnControlType(type);
update();
}
private void update() { private void update() {
view.getSettingsPanel().enableRemovePlayerButtons( view.getSettingsPanel().enableRemovePlayerButtons(
settings.getPlayerList().size() > 2); settings.getPlayerList().size() > 2);

View file

@ -2,6 +2,8 @@ package jrummikub.view;
import java.awt.Color; import java.awt.Color;
import jrummikub.control.turn.TurnControlFactory;
import jrummikub.control.turn.TurnControlFactory.Type;
import jrummikub.model.GameSettings; import jrummikub.model.GameSettings;
import jrummikub.util.IEvent; import jrummikub.util.IEvent;
import jrummikub.util.IEvent1; import jrummikub.util.IEvent1;
@ -64,6 +66,14 @@ public interface ISettingsPanel {
*/ */
public IEvent2<Integer, String> getChangePlayerNameEvent(); public IEvent2<Integer, String> getChangePlayerNameEvent();
/**
* The change player color event is emitted when the user wants change a
* player's type
*
* @return the event
*/
public IEvent2<Integer, TurnControlFactory.Type> getChangePlayerTypeEvent();
/** /**
* The change initial meld threshold event is emitted when the user wants * The change initial meld threshold event is emitted when the user wants
* change the initial meld threshold * change the initial meld threshold

View file

@ -41,6 +41,7 @@ import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener; import javax.swing.event.DocumentListener;
import jrummikub.control.turn.TurnControlFactory; import jrummikub.control.turn.TurnControlFactory;
import jrummikub.control.turn.TurnControlFactory.Type;
import jrummikub.model.GameSettings; import jrummikub.model.GameSettings;
import jrummikub.model.PlayerSettings; import jrummikub.model.PlayerSettings;
import jrummikub.util.Event; import jrummikub.util.Event;
@ -312,10 +313,12 @@ class SettingsPanel extends JPanel implements ISettingsPanel {
nameField.setText(settings.getName()); nameField.setText(settings.getName());
} }
// playerType.setSelectedIndex(0); // playerType.setSelectedIndex(0);
playerType.setSelectedIndex(Arrays.binarySearch( int index = Arrays.binarySearch(
TurnControlFactory.Type.values(), TurnControlFactory.Type.values(),
settings.getTurnControlType())); settings.getTurnControlType());
if (index != playerType.getSelectedIndex()) {
playerType.setSelectedIndex(index);
}
colorButton.setIcon(ImageUtil.createColorIcon(settings.getColor(), colorButton.setIcon(ImageUtil.createColorIcon(settings.getColor(),
16, 2)); 16, 2));
} }
@ -494,4 +497,9 @@ class SettingsPanel extends JPanel implements ISettingsPanel {
public void setJokerNumber(int jokerNumber) { public void setJokerNumber(int jokerNumber) {
jokerNumberSpinner.setValue(jokerNumber); jokerNumberSpinner.setValue(jokerNumber);
} }
@Override
public IEvent2<Integer, Type> getChangePlayerTypeEvent() {
return changePlayerTypeEvent;
}
} }

View file

@ -4,6 +4,7 @@ import static org.junit.Assert.*;
import java.awt.Color; import java.awt.Color;
import jrummikub.control.turn.TurnControlFactory;
import jrummikub.model.GameSettings; import jrummikub.model.GameSettings;
import jrummikub.util.IListener1; import jrummikub.util.IListener1;
import jrummikub.view.ISettingsPanel; import jrummikub.view.ISettingsPanel;
@ -195,4 +196,17 @@ public class SettingsControlTest {
assertEquals(25, gameSettings.getJokerNumber()); assertEquals(25, gameSettings.getJokerNumber());
} }
/** */
@Test
public void typeChangeTest() {
view.settingsPanel.changePlayerTypeEvent.emit(0, TurnControlFactory.Type.COMPUTER);
view.settingsPanel.changePlayerTypeEvent.emit(1, TurnControlFactory.Type.COMPUTER);
view.settingsPanel.changePlayerTypeEvent.emit(1, TurnControlFactory.Type.HUMAN);
view.settingsPanel.startGameEvent.emit();
assertNotNull(gameSettings);
assertEquals(2, gameSettings.getPlayerList().size());
assertSame(TurnControlFactory.Type.COMPUTER, gameSettings.getPlayerList().get(0).getTurnControlType());
assertSame(TurnControlFactory.Type.HUMAN, gameSettings.getPlayerList().get(1).getTurnControlType());
}
} }