Updated settings panel to work with new settings control
git-svn-id: svn://sunsvr01.isp.uni-luebeck.de/swproj13/trunk@292 72836036-5685-4462-b002-a69064685172
This commit is contained in:
parent
5aa79ea898
commit
1372ee7b9e
1 changed files with 134 additions and 153 deletions
|
@ -12,7 +12,8 @@ import java.awt.event.ActionEvent;
|
||||||
import java.awt.event.ActionListener;
|
import java.awt.event.ActionListener;
|
||||||
import java.awt.event.MouseAdapter;
|
import java.awt.event.MouseAdapter;
|
||||||
import java.awt.event.MouseEvent;
|
import java.awt.event.MouseEvent;
|
||||||
import java.util.LinkedList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
import javax.swing.BoxLayout;
|
import javax.swing.BoxLayout;
|
||||||
import javax.swing.Icon;
|
import javax.swing.Icon;
|
||||||
|
@ -33,6 +34,7 @@ import jrummikub.model.GameSettings;
|
||||||
import jrummikub.model.PlayerSettings;
|
import jrummikub.model.PlayerSettings;
|
||||||
import jrummikub.util.Event;
|
import jrummikub.util.Event;
|
||||||
import jrummikub.util.Event1;
|
import jrummikub.util.Event1;
|
||||||
|
import jrummikub.util.Event2;
|
||||||
import jrummikub.util.IEvent;
|
import jrummikub.util.IEvent;
|
||||||
import jrummikub.util.IEvent1;
|
import jrummikub.util.IEvent1;
|
||||||
import jrummikub.util.IEvent2;
|
import jrummikub.util.IEvent2;
|
||||||
|
@ -43,48 +45,114 @@ class SettingsPanel extends JPanel implements ISettingsPanel {
|
||||||
private JPanel playerSetupPanel;
|
private JPanel playerSetupPanel;
|
||||||
private JPanel playerSettingsViewport;
|
private JPanel playerSettingsViewport;
|
||||||
private JPanel ruleSetupPanel;
|
private JPanel ruleSetupPanel;
|
||||||
|
private JButton addPlayerButton;
|
||||||
|
private JLabel errorMessageLabel;
|
||||||
|
private JButton startButton;
|
||||||
|
|
||||||
private GameSettings gameSettings = new GameSettings();
|
private List<PlayerSettingsPanel> playerSettingsPanels = new ArrayList<PlayerSettingsPanel>();
|
||||||
|
|
||||||
private LinkedList<PlayerSettingsPanel> playerSettingsPanels = new LinkedList<PlayerSettingsPanel>();
|
|
||||||
|
|
||||||
private Event1<GameSettings> settingsChangeEvent = new Event1<GameSettings>();
|
|
||||||
private Event startGameEvent = new Event();
|
private Event startGameEvent = new Event();
|
||||||
|
private Event addPlayerEvent = new Event();
|
||||||
|
private Event1<Integer> removePlayerEvent = new Event1<Integer>();
|
||||||
|
private Event2<Integer, Color> changePlayerColorEvent = new Event2<Integer, Color>();
|
||||||
|
private Event2<Integer, String> changePlayerNameEvent = new Event2<Integer, String>();
|
||||||
|
private Event1<Integer> changeInitialMeldThresholdEvent = new Event1<Integer>();
|
||||||
|
|
||||||
private void addPlayerSettings() {
|
@Override
|
||||||
// Find unused player name
|
public IEvent getStartGameEvent() {
|
||||||
int num = playerSettingsPanels.size();
|
return startGameEvent;
|
||||||
|
}
|
||||||
|
|
||||||
nameLoop: while (true) {
|
@Override
|
||||||
num++;
|
public IEvent getAddPlayerEvent() {
|
||||||
String playerName = "Spieler " + num;
|
return addPlayerEvent;
|
||||||
|
}
|
||||||
|
|
||||||
for (PlayerSettings player : gameSettings.getPlayerList()) {
|
@Override
|
||||||
if (playerName.equals(player.getName())) {
|
public IEvent1<Integer> getRemovePlayerEvent() {
|
||||||
continue nameLoop;
|
return removePlayerEvent;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
break;
|
@Override
|
||||||
|
public IEvent2<Integer, Color> getChangePlayerColorEvent() {
|
||||||
|
return changePlayerColorEvent;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public IEvent2<Integer, String> getChangePlayerNameEvent() {
|
||||||
|
return changePlayerNameEvent;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public IEvent1<Integer> getChangeInitialMeldThresholdEvent() {
|
||||||
|
return changeInitialMeldThresholdEvent;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setError(SettingsError error) {
|
||||||
|
switch (error) {
|
||||||
|
case NO_ERROR:
|
||||||
|
errorMessageLabel.setText(" ");
|
||||||
|
break;
|
||||||
|
case DUPLICATE_PLAYER_NAME:
|
||||||
|
errorMessageLabel
|
||||||
|
.setText("Jeder Spielername darf nur einmal verwendet werden.");
|
||||||
|
break;
|
||||||
|
case NO_PLAYER_NAME:
|
||||||
|
errorMessageLabel.setText("Jeder Spieler muss einen Namen haben.");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void enableStartGameButton(boolean enable) {
|
||||||
|
startButton.setEnabled(enable);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void enableAddPlayerButton(boolean enable) {
|
||||||
|
addPlayerButton.setVisible(enable);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void enableRemovePlayerButtons(boolean enable) {
|
||||||
|
for (PlayerSettingsPanel psp : playerSettingsPanels) {
|
||||||
|
psp.enableRemoveButton(enable);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setGameSettings(GameSettings gameSettings) {
|
||||||
|
while (playerSettingsPanels.size() > gameSettings.getPlayerList().size()) {
|
||||||
|
removePlayerSettingsPanel();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Next, find unused color
|
for (int i = 0; i < gameSettings.getPlayerList().size(); ++i) {
|
||||||
Color color = null;
|
updatePlayerSettingsPanel(i, gameSettings.getPlayerList().get(i));
|
||||||
colorLoop: for (Color c : PLAYER_COLORS) {
|
|
||||||
color = c;
|
|
||||||
for (PlayerSettings player : gameSettings.getPlayerList()) {
|
|
||||||
if (c == player.getColor()) {
|
|
||||||
continue colorLoop;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
PlayerSettingsPanel panel = new PlayerSettingsPanel("Spieler " + num, color);
|
playerSettingsViewport.revalidate();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void updatePlayerSettingsPanel(int i, PlayerSettings settings) {
|
||||||
|
if (i < playerSettingsPanels.size()) {
|
||||||
|
playerSettingsPanels.get(i).setSettings(settings);
|
||||||
|
} else {
|
||||||
|
addPlayerSettingsPanel(i, settings);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void addPlayerSettingsPanel(int i, PlayerSettings settings) {
|
||||||
|
PlayerSettingsPanel panel = new PlayerSettingsPanel(i, settings);
|
||||||
playerSettingsPanels.add(panel);
|
playerSettingsPanels.add(panel);
|
||||||
playerSettingsViewport.add(panel,
|
playerSettingsViewport.add(panel,
|
||||||
playerSettingsViewport.getComponentCount() - 1);
|
playerSettingsViewport.getComponentCount() - 1);
|
||||||
|
}
|
||||||
|
|
||||||
settingsChangeEvent.emit(gameSettings);
|
private void removePlayerSettingsPanel() {
|
||||||
|
PlayerSettingsPanel p = playerSettingsPanels.remove(playerSettingsPanels
|
||||||
|
.size() - 1);
|
||||||
|
playerSettingsViewport.remove(p);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void createPlayerSetupPanel() {
|
private void createPlayerSetupPanel() {
|
||||||
|
@ -104,19 +172,15 @@ class SettingsPanel extends JPanel implements ISettingsPanel {
|
||||||
addPlayerPanel.setLayout(new FlowLayout(FlowLayout.TRAILING, 0, 2));
|
addPlayerPanel.setLayout(new FlowLayout(FlowLayout.TRAILING, 0, 2));
|
||||||
playerSettingsViewport.add(addPlayerPanel);
|
playerSettingsViewport.add(addPlayerPanel);
|
||||||
|
|
||||||
JButton 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) {
|
||||||
addPlayerSettings();
|
addPlayerEvent.emit();
|
||||||
playerSettingsViewport.revalidate();
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
addPlayerPanel.add(addPlayerButton);
|
addPlayerPanel.add(addPlayerButton);
|
||||||
|
|
||||||
addPlayerSettings();
|
|
||||||
addPlayerSettings();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void createRuleSetupPanel() {
|
private void createRuleSetupPanel() {
|
||||||
|
@ -141,12 +205,12 @@ class SettingsPanel extends JPanel implements ISettingsPanel {
|
||||||
c.weighty = 1;
|
c.weighty = 1;
|
||||||
add(tabbedPane, c);
|
add(tabbedPane, c);
|
||||||
|
|
||||||
JLabel errorMessageLabel = new JLabel(" ");
|
errorMessageLabel = new JLabel(" ");
|
||||||
errorMessageLabel.setForeground(Color.RED);
|
errorMessageLabel.setForeground(Color.RED);
|
||||||
c.weighty = 0;
|
c.weighty = 0;
|
||||||
add(errorMessageLabel, c);
|
add(errorMessageLabel, c);
|
||||||
|
|
||||||
JButton startButton = new JButton("Spiel starten");
|
startButton = new JButton("Spiel starten");
|
||||||
startButton.addActionListener(new ActionListener() {
|
startButton.addActionListener(new ActionListener() {
|
||||||
@Override
|
@Override
|
||||||
public void actionPerformed(ActionEvent e) {
|
public void actionPerformed(ActionEvent e) {
|
||||||
|
@ -160,61 +224,34 @@ class SettingsPanel extends JPanel implements ISettingsPanel {
|
||||||
}
|
}
|
||||||
|
|
||||||
private class PlayerSettingsPanel extends JPanel {
|
private class PlayerSettingsPanel extends JPanel {
|
||||||
private JTextField nameField;
|
private int playerNumber;
|
||||||
private JButton colorButton;
|
private JButton colorButton;
|
||||||
|
private JTextField nameField;
|
||||||
|
private JButton removeButton;
|
||||||
|
|
||||||
private PlayerSettings settings;
|
public void setSettings(PlayerSettings settings) {
|
||||||
|
if (!nameField.getText().equals(settings.getName())) {
|
||||||
|
nameField.setText(settings.getName());
|
||||||
|
}
|
||||||
|
|
||||||
private void remove() {
|
|
||||||
playerSettingsPanels.remove(PlayerSettingsPanel.this);
|
|
||||||
playerSettingsViewport.remove(PlayerSettingsPanel.this);
|
|
||||||
playerSettingsViewport.revalidate();
|
|
||||||
|
|
||||||
gameSettings.getPlayerList().remove(settings);
|
|
||||||
settingsChangeEvent.emit(gameSettings);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void updateColor() {
|
|
||||||
colorButton
|
colorButton
|
||||||
.setIcon(ImageUtil.createColorIcon(settings.getColor(), 16, 2));
|
.setIcon(ImageUtil.createColorIcon(settings.getColor(), 16, 2));
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setName() {
|
public void enableRemoveButton(boolean enable) {
|
||||||
if (nameField.getText() == settings.getName()) {
|
removeButton.setEnabled(enable);
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
settings.setName(nameField.getText());
|
|
||||||
settingsChangeEvent.emit(gameSettings);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setColor(Color c) {
|
public PlayerSettingsPanel(int playerNumber, PlayerSettings settings) {
|
||||||
if (c == settings.getColor()) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Exchange colors if the color is already used
|
|
||||||
for (PlayerSettingsPanel other : playerSettingsPanels) {
|
|
||||||
if (other.settings.getColor() == c) {
|
|
||||||
other.settings.setColor(settings.getColor());
|
|
||||||
other.updateColor();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
settings.setColor(c);
|
|
||||||
updateColor();
|
|
||||||
|
|
||||||
settingsChangeEvent.emit(gameSettings);
|
|
||||||
}
|
|
||||||
|
|
||||||
PlayerSettingsPanel(String name, Color color) {
|
|
||||||
settings = new PlayerSettings(name, color);
|
|
||||||
|
|
||||||
setLayout(new BorderLayout());
|
setLayout(new BorderLayout());
|
||||||
|
|
||||||
|
this.playerNumber = playerNumber;
|
||||||
|
|
||||||
colorButton = new JButton();
|
colorButton = new JButton();
|
||||||
updateColor();
|
nameField = new JTextField(settings.getName());
|
||||||
|
|
||||||
|
setSettings(settings);
|
||||||
|
|
||||||
colorButton.addActionListener(new ActionListener() {
|
colorButton.addActionListener(new ActionListener() {
|
||||||
@Override
|
@Override
|
||||||
public void actionPerformed(ActionEvent e) {
|
public void actionPerformed(ActionEvent e) {
|
||||||
|
@ -223,26 +260,25 @@ class SettingsPanel extends JPanel implements ISettingsPanel {
|
||||||
});
|
});
|
||||||
add(colorButton, BorderLayout.WEST);
|
add(colorButton, BorderLayout.WEST);
|
||||||
|
|
||||||
nameField = new JTextField(settings.getName());
|
|
||||||
nameField.getDocument().addDocumentListener(new DocumentListener() {
|
nameField.getDocument().addDocumentListener(new DocumentListener() {
|
||||||
@Override
|
@Override
|
||||||
public void insertUpdate(DocumentEvent e) {
|
public void insertUpdate(DocumentEvent e) {
|
||||||
setName();
|
changeName();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void removeUpdate(DocumentEvent e) {
|
public void removeUpdate(DocumentEvent e) {
|
||||||
setName();
|
changeName();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void changedUpdate(DocumentEvent e) {
|
public void changedUpdate(DocumentEvent e) {
|
||||||
setName();
|
changeName();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
add(nameField);
|
add(nameField);
|
||||||
|
|
||||||
JButton removeButton = new JButton("\u00d7");
|
removeButton = new JButton("\u00d7");
|
||||||
removeButton.setFont(removeButton.getFont().deriveFont(Font.BOLD));
|
removeButton.setFont(removeButton.getFont().deriveFont(Font.BOLD));
|
||||||
removeButton.addActionListener(new ActionListener() {
|
removeButton.addActionListener(new ActionListener() {
|
||||||
@Override
|
@Override
|
||||||
|
@ -251,8 +287,6 @@ class SettingsPanel extends JPanel implements ISettingsPanel {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
add(removeButton, BorderLayout.EAST);
|
add(removeButton, BorderLayout.EAST);
|
||||||
|
|
||||||
gameSettings.getPlayerList().add(settings);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -265,6 +299,18 @@ class SettingsPanel extends JPanel implements ISettingsPanel {
|
||||||
return new Dimension(Integer.MAX_VALUE, getPreferredSize().height);
|
return new Dimension(Integer.MAX_VALUE, getPreferredSize().height);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void changeName() {
|
||||||
|
changePlayerNameEvent.emit(playerNumber, nameField.getText());
|
||||||
|
}
|
||||||
|
|
||||||
|
private void changeColor(Color c) {
|
||||||
|
changePlayerColorEvent.emit(playerNumber, c);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void remove() {
|
||||||
|
removePlayerEvent.emit(playerNumber);
|
||||||
|
}
|
||||||
|
|
||||||
private class ColorMenu extends JPanel {
|
private class ColorMenu extends JPanel {
|
||||||
ColorMenu() {
|
ColorMenu() {
|
||||||
setLayout(new GridLayout(4, 4, 1, 1));
|
setLayout(new GridLayout(4, 4, 1, 1));
|
||||||
|
@ -301,76 +347,11 @@ class SettingsPanel extends JPanel implements ISettingsPanel {
|
||||||
@Override
|
@Override
|
||||||
public void mouseClicked(MouseEvent e) {
|
public void mouseClicked(MouseEvent e) {
|
||||||
menu.setVisible(false);
|
menu.setVisible(false);
|
||||||
setColor(c);
|
changeColor(c);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public IEvent getAddPlayerEvent() {
|
|
||||||
// TODO Auto-generated method stub
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public IEvent1<Integer> getRemovePlayerEvent() {
|
|
||||||
// TODO Auto-generated method stub
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public IEvent2<Integer, Color> getChangePlayerColorEvent() {
|
|
||||||
// TODO Auto-generated method stub
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public IEvent2<Integer, String> getChangePlayerNameEvent() {
|
|
||||||
// TODO Auto-generated method stub
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public IEvent1<Integer> getChangeInitialMeldThresholdEvent() {
|
|
||||||
// TODO Auto-generated method stub
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setError(SettingsError error) {
|
|
||||||
// TODO Auto-generated method stub
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void enableStartGameButton(boolean enable) {
|
|
||||||
// TODO Auto-generated method stub
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void enableAddPlayerButton(boolean enable) {
|
|
||||||
// TODO Auto-generated method stub
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void enableRemovePlayerButtons(boolean enable) {
|
|
||||||
// TODO Auto-generated method stub
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public IEvent getStartGameEvent() {
|
|
||||||
return startGameEvent;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setGameSettings(GameSettings gameSettings) {
|
|
||||||
// TODO Auto-generated method stub
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
Reference in a new issue