package fr.lyrgard.hexScape.gui.desktop.view.common.newGame; import java.awt.Component; import java.awt.EventQueue; import javax.swing.JButton; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JSpinner; import javax.swing.JTextField; import javax.swing.SpinnerNumberModel; import javax.swing.event.DocumentEvent; import javax.swing.event.DocumentListener; import org.apache.commons.lang.StringUtils; import com.google.common.eventbus.Subscribe; import fr.lyrgard.hexScape.bus.GuiMessageBus; import fr.lyrgard.hexScape.gui.desktop.action.ChooseMapAction; import fr.lyrgard.hexScape.gui.desktop.action.CreateNewGameAction; import fr.lyrgard.hexScape.message.MapLoadedMessage; import fr.lyrgard.hexScape.model.game.Game; import fr.lyrgard.hexScape.model.map.Map; import net.miginfocom.swing.MigLayout; public class NewGamePanel extends JPanel { private static final long serialVersionUID = 1619661196299179236L; private JTextField gameName; private JTextField mapNameLabel; private JButton newGame; private JSpinner playerNumber; private Map map; private Game game; public NewGamePanel(Component parent) { game = new Game(); this.setLayout(new MigLayout( "", // Layout Constraints "[right][left]", // Column constraints "[][][][]20[]" // Row constraints )); JLabel gameNameLabel = new JLabel("Game name :"); gameName = new JTextField(50); gameName.getDocument().addDocumentListener(new DocumentListener() { @Override public void removeUpdate(DocumentEvent e) { NewGamePanel.this.validateForm(); } @Override public void insertUpdate(DocumentEvent e) { NewGamePanel.this.validateForm(); } @Override public void changedUpdate(DocumentEvent e) { NewGamePanel.this.validateForm(); } }); JLabel playerNumberLabel = new JLabel("Number of players :"); SpinnerNumberModel numberModel = null; //if (multiplayer) { numberModel = new SpinnerNumberModel(1, 1, 4, 1); // } else { // numberModel = new SpinnerNumberModel(1, 1, 1, 1); // } playerNumber = new JSpinner(numberModel); //if (!multiplayer) { // playerNumber.setEnabled(false); //} JButton chooseMap = new JButton(new ChooseMapAction(null)); mapNameLabel = new JTextField(50); mapNameLabel.setEditable(false); newGame = new JButton(new CreateNewGameAction(game)); newGame.setEnabled(false); add(gameNameLabel); add(gameName, "wrap"); add(playerNumberLabel); add(playerNumber, "wrap"); add(chooseMap); add(mapNameLabel, "wrap"); add(newGame, "span 2, align center"); GuiMessageBus.register(this); } @Subscribe public void onMapLoaded(final MapLoadedMessage message) { EventQueue.invokeLater(new Runnable() { public void run() { Map map = message.getMap(); mapNameLabel.setText(map.getName()); NewGamePanel.this.map = map; NewGamePanel.this.validateForm(); } }); } private void validateForm() { EventQueue.invokeLater(new Runnable() { public void run() { if (StringUtils.isNotEmpty(mapNameLabel.getText()) && map != null ) { game.setName(gameName.getText()); game.setMap(map); game.setPlayerNumber(((SpinnerNumberModel)playerNumber.getModel()).getNumber().intValue()); NewGamePanel.this.newGame.setEnabled(true); } else { NewGamePanel.this.newGame.setEnabled(false); } } }); } }