Added UI for the joker number

git-svn-id: svn://sunsvr01.isp.uni-luebeck.de/swproj13/trunk@300 72836036-5685-4462-b002-a69064685172
This commit is contained in:
Jannis Harder 2011-05-29 18:50:47 +02:00
parent 05107f6035
commit 3f3f6370c9
3 changed files with 94 additions and 38 deletions

View file

@ -16,14 +16,18 @@ public class MockSettingsPanel implements ISettingsPanel {
public MockEvent1<Integer> removePlayerEvent = new MockEvent1<Integer>(); public MockEvent1<Integer> removePlayerEvent = new MockEvent1<Integer>();
public MockEvent2<Integer, Color> changePlayerColorEvent = new MockEvent2<Integer, Color>(); public MockEvent2<Integer, Color> changePlayerColorEvent = new MockEvent2<Integer, Color>();
public MockEvent2<Integer, String> changePlayerNameEvent = new MockEvent2<Integer, String>(); public MockEvent2<Integer, String> changePlayerNameEvent = new MockEvent2<Integer, String>();
public MockEvent1<Integer> changeInitialMeldThresholdEvent = new MockEvent1<Integer>();
public MockEvent startGameEvent = new MockEvent(); public MockEvent startGameEvent = new MockEvent();
public SettingsError error = SettingsError.NO_ERROR; public SettingsError error = SettingsError.NO_ERROR;
public boolean startButtonEnabled = true; public boolean startButtonEnabled = true;
public boolean addPlayerButtonEnabled = true; public boolean addPlayerButtonEnabled = true;
public boolean removePlayerButtonsEnabled = false; public boolean removePlayerButtonsEnabled = false;
public GameSettings gameSettings = new GameSettings(); public GameSettings gameSettings = new GameSettings();
public MockEvent1<Integer> changeInitialMeldThresholdEvent = new MockEvent1<Integer>();
public IEvent1<Integer> changeJokerNumberEvent = new MockEvent1<Integer>();
public int initialMeldThreshold; public int initialMeldThreshold;
public int jokerNumber;
@Override @Override
public IEvent getAddPlayerEvent() { public IEvent getAddPlayerEvent() {
@ -90,4 +94,14 @@ public class MockSettingsPanel implements ISettingsPanel {
initialMeldThreshold = value; initialMeldThreshold = value;
} }
@Override
public IEvent1<Integer> getChangeJokerNumberEvent() {
return changeJokerNumberEvent;
}
@Override
public void setJokerNumber(int jokerNumber) {
this.jokerNumber = jokerNumber;
}
} }

View file

@ -139,4 +139,19 @@ public interface ISettingsPanel {
* initial meld threshold * initial meld threshold
*/ */
public void setInitialMeldThreshold(int value); public void setInitialMeldThreshold(int value);
/**
* Emitted when the joker number is changed
*
* @return the event
*/
public IEvent1<Integer> getChangeJokerNumberEvent();
/**
* Sets the joker number in the option pane
*
* @param jokerNumber
* the joker number
*/
public void setJokerNumber(int jokerNumber);
} }

View file

@ -58,8 +58,9 @@ class SettingsPanel extends JPanel implements ISettingsPanel {
private boolean removeButtonsEnabled = true; private boolean removeButtonsEnabled = true;
private List<PlayerSettingsPanel> playerSettingsPanels = new ArrayList<PlayerSettingsPanel>(); private List<PlayerSettingsPanel> playerSettingsPanels = new ArrayList<PlayerSettingsPanel>();
private JSpinner initialMeldThresholdSpinner; private JSpinner initialMeldThresholdSpinner;
private JSpinner jokerNumberSpinner;
private Event startGameEvent = new Event(); private Event startGameEvent = new Event();
private Event addPlayerEvent = new Event(); private Event addPlayerEvent = new Event();
@ -67,6 +68,7 @@ class SettingsPanel extends JPanel implements ISettingsPanel {
private Event2<Integer, Color> changePlayerColorEvent = new Event2<Integer, Color>(); private Event2<Integer, Color> changePlayerColorEvent = new Event2<Integer, Color>();
private Event2<Integer, String> changePlayerNameEvent = new Event2<Integer, String>(); private Event2<Integer, String> changePlayerNameEvent = new Event2<Integer, String>();
private Event1<Integer> changeInitialMeldThresholdEvent = new Event1<Integer>(); private Event1<Integer> changeInitialMeldThresholdEvent = new Event1<Integer>();
private Event1<Integer> changeJokerNumberEvent = new Event1<Integer>();
@Override @Override
public IEvent getStartGameEvent() { public IEvent getStartGameEvent() {
@ -101,16 +103,16 @@ class SettingsPanel extends JPanel implements ISettingsPanel {
@Override @Override
public void setError(SettingsError error) { public void setError(SettingsError error) {
switch (error) { switch (error) {
case NO_ERROR: case NO_ERROR:
errorMessageLabel.setText(" "); errorMessageLabel.setText(" ");
break; break;
case DUPLICATE_PLAYER_NAME: case DUPLICATE_PLAYER_NAME:
errorMessageLabel errorMessageLabel
.setText("Jeder Spielername darf nur einmal verwendet werden."); .setText("Jeder Spielername darf nur einmal verwendet werden.");
break; break;
case NO_PLAYER_NAME: case NO_PLAYER_NAME:
errorMessageLabel.setText("Jeder Spieler muss einen Namen haben."); errorMessageLabel.setText("Jeder Spieler muss einen Namen haben.");
break; break;
} }
} }
@ -134,7 +136,8 @@ class SettingsPanel extends JPanel implements ISettingsPanel {
@Override @Override
public void setGameSettings(GameSettings gameSettings) { public void setGameSettings(GameSettings gameSettings) {
while (playerSettingsPanels.size() > gameSettings.getPlayerList().size()) { while (playerSettingsPanels.size() > gameSettings.getPlayerList()
.size()) {
removePlayerSettingsPanel(); removePlayerSettingsPanel();
} }
@ -161,8 +164,8 @@ class SettingsPanel extends JPanel implements ISettingsPanel {
} }
private void removePlayerSettingsPanel() { private void removePlayerSettingsPanel() {
PlayerSettingsPanel p = playerSettingsPanels.remove(playerSettingsPanels PlayerSettingsPanel p = playerSettingsPanels
.size() - 1); .remove(playerSettingsPanels.size() - 1);
playerSettingsViewport.remove(p); playerSettingsViewport.remove(p);
} }
@ -184,7 +187,8 @@ class SettingsPanel extends JPanel implements ISettingsPanel {
playerSettingsViewport.add(addPlayerPanel); playerSettingsViewport.add(addPlayerPanel);
addPlayerButton = new JButton("+"); addPlayerButton = new JButton("+");
addPlayerButton.setFont(addPlayerButton.getFont().deriveFont(Font.BOLD)); addPlayerButton
.setFont(addPlayerButton.getFont().deriveFont(Font.BOLD));
addPlayerButton.addActionListener(new ActionListener() { addPlayerButton.addActionListener(new ActionListener() {
@Override @Override
public void actionPerformed(ActionEvent e) { public void actionPerformed(ActionEvent e) {
@ -195,55 +199,68 @@ class SettingsPanel extends JPanel implements ISettingsPanel {
} }
private JComponent makeFiller() { private JComponent makeFiller() {
return new Box.Filler(new Dimension(0, 0), new Dimension(0, 0), new Dimension(Integer.MAX_VALUE, Integer.MAX_VALUE)); return new Box.Filler(new Dimension(0, 0), new Dimension(0, 0),
new Dimension(Integer.MAX_VALUE, Integer.MAX_VALUE));
} }
private void createOptionsPanel() { private void createOptionsPanel() {
optionsPanel = new JPanel(); optionsPanel = new JPanel();
GridBagLayout layout = new GridBagLayout(); GridBagLayout layout = new GridBagLayout();
optionsPanel.setLayout(layout); optionsPanel.setLayout(layout);
GridBagConstraints labelC = new GridBagConstraints(); GridBagConstraints labelC = new GridBagConstraints();
GridBagConstraints optionC = new GridBagConstraints(); GridBagConstraints optionC = new GridBagConstraints();
labelC.anchor = GridBagConstraints.EAST; labelC.anchor = GridBagConstraints.EAST;
labelC.gridx = 0; labelC.gridx = 0;
labelC.insets = new Insets(5,5,5,5); labelC.insets = new Insets(4, 4, 4, 4);
optionC.anchor = GridBagConstraints.WEST; optionC.anchor = GridBagConstraints.WEST;
optionC.gridx = 1; optionC.gridx = 1;
optionC.insets = new Insets(5,5,5,5); optionC.insets = new Insets(2, 2, 2, 2);
JLabel label = new JLabel("Auslegeschranke:"); JLabel label = new JLabel("Auslegeschranke:");
labelC.gridy = 0; labelC.gridy = 0;
optionsPanel.add(label, labelC); optionsPanel.add(label, labelC);
initialMeldThresholdSpinner = new JSpinner(); initialMeldThresholdSpinner = new JSpinner();
initialMeldThresholdSpinner.setModel(new SpinnerNumberModel(1, 1, 999, 1)); initialMeldThresholdSpinner.setModel(new SpinnerNumberModel(1, 1, 999,
initialMeldThresholdSpinner.setPreferredSize(new Dimension(60, initialMeldThresholdSpinner.getMinimumSize().height)); 1));
initialMeldThresholdSpinner.setPreferredSize(new Dimension(60,
initialMeldThresholdSpinner.getMinimumSize().height));
initialMeldThresholdSpinner.addChangeListener(new ChangeListener() { initialMeldThresholdSpinner.addChangeListener(new ChangeListener() {
@Override @Override
public void stateChanged(ChangeEvent e) { public void stateChanged(ChangeEvent e) {
changeInitialMeldThresholdEvent.emit((Integer)initialMeldThresholdSpinner.getValue()); changeInitialMeldThresholdEvent
.emit((Integer) initialMeldThresholdSpinner.getValue());
} }
}); });
optionC.gridy = 0; optionC.gridy = 0;
optionsPanel.add(initialMeldThresholdSpinner, optionC); optionsPanel.add(initialMeldThresholdSpinner, optionC);
label = new JLabel("Jokeranzahl:");
label = new JLabel("Dinge:");
labelC.gridx = 0; labelC.gridx = 0;
labelC.gridy = 1; labelC.gridy = 1;
optionsPanel.add(label, labelC); optionsPanel.add(label, labelC);
jokerNumberSpinner = new JSpinner();
jokerNumberSpinner.setModel(new SpinnerNumberModel(0, 0, 999, 1));
jokerNumberSpinner.addChangeListener(new ChangeListener() {
@Override
public void stateChanged(ChangeEvent e) {
changeJokerNumberEvent.emit((Integer) jokerNumberSpinner
.getValue());
}
});
optionC.gridy = 1;
optionsPanel.add(jokerNumberSpinner, optionC);
labelC.gridx = 1; labelC.gridx = 1;
labelC.gridy = 2; labelC.gridy = 2;
labelC.fill = GridBagConstraints.BOTH; labelC.fill = GridBagConstraints.BOTH;
labelC.weightx = 1; labelC.weightx = 1;
labelC.weighty = 1; labelC.weighty = 1;
optionsPanel.add(makeFiller(), labelC); optionsPanel.add(makeFiller(), labelC);
// TODO Knöpfe für Dinge // TODO Knöpfe für Dinge
} }
@ -279,8 +296,8 @@ class SettingsPanel extends JPanel implements ISettingsPanel {
}); });
add(startButton, c); add(startButton, c);
setBorder(new CompoundBorder(new LineBorder(Color.BLACK), new EmptyBorder( setBorder(new CompoundBorder(new LineBorder(Color.BLACK),
10, 10, 10, 10))); new EmptyBorder(10, 10, 10, 10)));
} }
private class PlayerSettingsPanel extends JPanel { private class PlayerSettingsPanel extends JPanel {
@ -294,8 +311,8 @@ class SettingsPanel extends JPanel implements ISettingsPanel {
nameField.setText(settings.getName()); nameField.setText(settings.getName());
} }
colorButton colorButton.setIcon(ImageUtil.createColorIcon(settings.getColor(),
.setIcon(ImageUtil.createColorIcon(settings.getColor(), 16, 2)); 16, 2));
} }
public void enableRemoveButton(boolean enable) { public void enableRemoveButton(boolean enable) {
@ -420,4 +437,14 @@ class SettingsPanel extends JPanel implements ISettingsPanel {
public void setInitialMeldThreshold(int value) { public void setInitialMeldThreshold(int value) {
initialMeldThresholdSpinner.setValue(value); initialMeldThresholdSpinner.setValue(value);
} }
@Override
public IEvent1<Integer> getChangeJokerNumberEvent() {
return changeJokerNumberEvent;
}
@Override
public void setJokerNumber(int jokerNumber) {
jokerNumberSpinner.setValue(jokerNumber);
}
} }