package games.strategy.engine.framework.startup.ui;
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Container;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import javax.swing.Action;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
import games.strategy.ui.IntTextField;
import games.strategy.ui.SwingAction;
/**
* UI for choosing client options.
*/
public class ClientOptions extends JDialog {
private static final long serialVersionUID = 8036055679545539809L;
private JTextField m_nameField;
private JTextField m_addressField;
private IntTextField m_portField;
private boolean m_okPressed;
/**
* Creates a new instance of ClientOptions.
*/
public ClientOptions(final Component parent, final String defaultName, final int defaultPort,
final String defaultAddress) {
super(JOptionPane.getFrameForComponent(parent), "Client options", true);
initComponents();
layoutComponents();
m_nameField.setText(defaultName);
m_portField.setValue(defaultPort);
m_addressField.setText(defaultAddress);
pack();
}
@Override
public String getName() {
// fixes crash by truncating names to 20 characters
final String s = m_nameField.getText().trim();
if (s.length() > 20) {
return s.substring(0, 20);
}
return s;
}
public String getAddress() {
return m_addressField.getText().trim();
}
public int getPort() {
return m_portField.getValue();
}
private void initComponents() {
m_nameField = new JTextField(10);
m_addressField = new JTextField(10);
m_portField = new IntTextField(0, Integer.MAX_VALUE);
m_portField.setColumns(7);
}
private void layoutComponents() {
final Container content = getContentPane();
content.setLayout(new BorderLayout());
final JPanel title = new JPanel();
title.add(new JLabel("Select client options"));
content.add(title, BorderLayout.NORTH);
final Insets labelSpacing = new Insets(3, 7, 0, 0);
final Insets fieldSpacing = new Insets(3, 5, 0, 7);
final GridBagConstraints labelConstraints = new GridBagConstraints();
labelConstraints.anchor = GridBagConstraints.EAST;
labelConstraints.gridx = 0;
labelConstraints.insets = labelSpacing;
final GridBagConstraints fieldConstraints = new GridBagConstraints();
fieldConstraints.anchor = GridBagConstraints.WEST;
fieldConstraints.gridx = 1;
fieldConstraints.insets = fieldSpacing;
final JPanel fields = new JPanel();
final GridBagLayout layout = new GridBagLayout();
fields.setLayout(layout);
final JLabel nameLabel = new JLabel("Name:");
final JLabel portLabel = new JLabel("Server Port:");
final JLabel addressLabel = new JLabel("Server Address:");
layout.setConstraints(portLabel, labelConstraints);
layout.setConstraints(nameLabel, labelConstraints);
layout.setConstraints(addressLabel, labelConstraints);
layout.setConstraints(m_portField, fieldConstraints);
layout.setConstraints(m_nameField, fieldConstraints);
layout.setConstraints(m_addressField, fieldConstraints);
fields.add(nameLabel);
fields.add(m_nameField);
fields.add(portLabel);
fields.add(m_portField);
fields.add(addressLabel);
fields.add(m_addressField);
content.add(fields, BorderLayout.CENTER);
final JPanel buttons = new JPanel();
buttons.add(new JButton(m_okAction));
buttons.add(new JButton(m_cancelAction));
content.add(buttons, BorderLayout.SOUTH);
}
public boolean getOKPressed() {
return m_okPressed;
}
private final Action m_okAction = SwingAction.of("Connect", e -> {
setVisible(false);
m_okPressed = true;
});
private final Action m_cancelAction = SwingAction.of("Cancel", e -> setVisible(false));
}