package vooga.rts.networking.client.clientgui;
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.List;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import vooga.rts.networking.NetworkBundle;
import vooga.rts.networking.communications.LobbyInfo;
/**
* Represents the View for creating a new lobby. This is a panel that gives the user the option of
* choosing the server name, map name (choices passed in), and maximum number of players (also
* passed in).
*
* @author David Winegar
*/
public class CreateLobbyView extends JPanel {
private static final int DEFAULT_TEXT_FIELD_SIZE = 20;
private static final long serialVersionUID = -5215687034662203967L;
private JTextField myServerField;
// Java 6 does not allow paramaterized JComboBoxes :(
private JComboBox myMapComboBox;
private JComboBox myMaxPlayersComboBox;
private List<Integer> myMaxPlayerArray;
private List<String> myMapChoices;
/**
* Creates the lobby view.
*
* @param maps map names
* @param maxPlayerArray maximum players corresponding to map names
*/
public CreateLobbyView (List<String> maps, List<Integer> maxPlayerArray) {
setLayout(new BorderLayout(0, 0));
myMaxPlayerArray = maxPlayerArray;
myMapChoices = maps;
add(createPanel(), BorderLayout.CENTER);
}
/**
* Creates the panel.
*/
private JPanel createPanel () {
JPanel innerPanel = new JPanel();
innerPanel.add(new JLabel(NetworkBundle.getString("ServerName")));
myServerField = new JTextField(DEFAULT_TEXT_FIELD_SIZE);
innerPanel.add(myServerField);
// Creates the map combo box
innerPanel.add(new JLabel(NetworkBundle.getString("Map")));
DefaultComboBoxModel mapModel = new DefaultComboBoxModel(myMapChoices.toArray());
myMapComboBox = new JComboBox(mapModel);
innerPanel.add(myMapComboBox);
// Add an action listener to get the choices for number of players
myMapComboBox.addActionListener(new ActionListener() {
@Override
public void actionPerformed (ActionEvent arg0) {
String choice = (String) myMapComboBox.getSelectedItem();
Integer maxPlayers = myMaxPlayerArray.get(myMapChoices.indexOf(choice));
Integer[] maxPlayerChoices = new Integer[maxPlayers];
for (int b = 1; b <= maxPlayers; b++) {
maxPlayerChoices[b - 1] = b;
}
myMaxPlayersComboBox.removeAllItems();
for (int i = 0; i < maxPlayerChoices.length; i++) {
myMaxPlayersComboBox.insertItemAt(maxPlayerChoices[i], i);
}
}
});
// Add max players label and combobox
innerPanel.add(new JLabel(NetworkBundle.getString("MaxPlayers")));
myMaxPlayersComboBox = new JComboBox();
innerPanel.add(myMaxPlayersComboBox);
return innerPanel;
}
/**
* Returns whether the server name, map, and number are chosen.
*
* @return true if ready to get lobby info
*/
public boolean allItemsChosen () {
return myMaxPlayersComboBox.getSelectedIndex() != -1 &&
myMapComboBox.getSelectedIndex() != -1 &&
!myServerField.getText().equals("");
}
/**
* Returns the lobbyInfo used to create a new server as long as everything has been chosen.
*
* @return lobbyInfo
*/
public LobbyInfo getLobbyInfo () {
return new LobbyInfo(myServerField.getText(),
(String) myMapComboBox.getSelectedItem(),
(Integer) myMaxPlayersComboBox.getSelectedItem(), 0);
}
}