/**
* (c) 2000-2011 Carlos G�mez Rodr�guez, todos los derechos reservados / all rights reserved.
* Licencia en license.txt / License in license.txt
* File created: 06/11/2011 16:49:20
*/
package eu.irreality.age.server;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.BorderFactory;
import javax.swing.DefaultListModel;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextField;
import javax.swing.JTextPane;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import eu.irreality.age.GameInfo;
import eu.irreality.age.PartidaEntry;
import eu.irreality.age.i18n.UIMessages;
class AddGameWindow extends JDialog
{
private DefaultListModel gamesVector = new DefaultListModel();
private JList gamesList = new JList ( gamesVector );
private JTextPane gameInfoArea = new JTextPane();
private JTextField gameNameTextField = new JTextField( UIMessages.getInstance().getMessage("server.addgame.game") );
private JTextField maxPlayersTextField = new JTextField("9999");
//maybe login-pass thingies? password requirement?
private JCheckBox passwordRequiredBox = new JCheckBox ( UIMessages.getInstance().getMessage("server.addgame.label.password") );
private JTextField passwordTextField = new JTextField ( "alohomora" );
private JCheckBox cbAge = new JCheckBox("AGE");
private JCheckBox cbTelnet = new JCheckBox("Telnet");
private JCheckBox cbIrc = new JCheckBox("IRC");
private JButton botonAceptar = new JButton( UIMessages.getInstance().getMessage("button.ok") );
private JButton botonCancelar = new JButton( UIMessages.getInstance().getMessage("button.can") );
private ServerConfigurationWindow madre;
private GameInfo informacionJuego;
private void updateGameInfoArea()
{
gameInfoArea.setText( informacionJuego.toLongString() );
//gameNameTextField.setText("Partida de " + gamesList.getSelectedValue().toString() );
gameNameTextField.setText( UIMessages.getInstance().getMessage("server.addgame.gameinfo","$game",gamesList.getSelectedValue().toString()) );
}
public AddGameWindow ( final ServerConfigurationWindow madre )
{
super ( madre , true );
this.madre = madre;
setTitle( UIMessages.getInstance().getMessage("server.addgame.title") );
setSize ( 600 , 400 );
//get game info list
GameInfo[] gi = GameInfo.getListOfGames();
for ( int i = 0 ; i < gi.length ; i++ )
gamesVector.addElement ( gi[i] );
getContentPane().setLayout ( new BorderLayout() );
JPanel panelPrincipal = new JPanel ( new GridLayout(3,1) );
JPanel subPan1 = new JPanel(); //parecido a un GameChoosingPanel
gamesList.addListSelectionListener ( new ListSelectionListener()
{
public void valueChanged ( ListSelectionEvent evt )
{
informacionJuego = (GameInfo)gamesList.getSelectedValue();
updateGameInfoArea();
}
} );
gamesList.setSelectedIndex(0);
subPan1.setLayout ( new GridLayout ( 1 , 2 ) );
/*
JPanel p1 = new JPanel( new BorderLayout( ));
p1.setSize ( 300 , 200 );
subPan1.add ( p1 );
p1.add ( new JScrollPane ( gamesList , JScrollPane.VERTICAL_SCROLLBAR_ALWAYS , JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED ) , BorderLayout.CENTER );
JPanel p2 = new JPanel( new BorderLayout ( ) );
p2.setSize ( 300 , 200 );
subPan1.add ( p2 );
p2.add ( new JScrollPane ( gameInfoArea , JScrollPane.VERTICAL_SCROLLBAR_ALWAYS , JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED ) , BorderLayout.CENTER );
*/
//JScrollPane jsp1 = new JScrollPane ( gamesList , JScrollPane.VERTICAL_SCROLLBAR_ALWAYS , JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED );
//JScrollPane jsp2 = new JScrollPane ( gameInfoArea , JScrollPane.VERTICAL_SCROLLBAR_ALWAYS , JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED );
//jsp1.setMaximumSize ( new Dimension ( 2 , 2 ) );
//gamesList.setSize(2,2);
//subPan1.add ( jsp1 );
//JPanel panInfAr = new JPanel ( new BorderLayout() );
//panInfAr.add ( gameInfoArea , BorderLayout.CENTER );
//subPan1.add ( new JScrollPane ( panInfAr ) );
//gameInfoArea.setSize(2,2);
//subPan1.add ( jsp2 );
//subPan1.add ( gameInfoArea );
subPan1.add ( new JScrollPane ( gamesList , JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED , JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED ) );
JPanel ctl = new JPanel ( new BorderLayout() );
gamesList.setBackground ( Color.black );
gamesList.setForeground ( Color.white );
gameInfoArea.setBackground ( Color.black );
gameInfoArea.setForeground ( Color.white );
//ctl.setSize(200,200);
//ctl.add ( gameInfoArea );
//ctl.setSize(200,200);
//subPan1.add(ctl);
subPan1.add ( new JScrollPane ( gameInfoArea , JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED , JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED ) );
JPanel subPan2 = new JPanel ( new GridLayout ( 3 , 1 ) );
JPanel subPan21 = new JPanel();
subPan21.add ( new JLabel( UIMessages.getInstance().getMessage("server.addgame.label.gamename") ) );
subPan21.add ( gameNameTextField );
JPanel subPan22 = new JPanel();
subPan22.add ( new JLabel( UIMessages.getInstance().getMessage("server.addgame.label.maxplayers") ) );
subPan22.add ( maxPlayersTextField );
JPanel subPan23 = new JPanel();
subPan23.add ( passwordRequiredBox );
subPan23.add ( passwordTextField );
subPan2.add ( subPan21 );
subPan2.add ( subPan22 );
subPan2.add ( subPan23 );
JPanel subPan3 = new JPanel();
subPan3.setLayout ( new GridLayout( 2 , 1 ) );
JPanel subPan31 = new JPanel();
subPan3.setBorder ( BorderFactory.createTitledBorder( UIMessages.getInstance().getMessage("server.addgame.protocols") ) );
subPan31.add ( cbAge );
subPan31.add ( cbTelnet );
subPan31.add ( cbIrc );
//JTextPane jtp = new JTextPane();
//jtp.setText("(n�tese que, para que se sirva la partida, es necesario seleccionar AGE, telnet y/o IRC tambi�n en la ventana de configuraci�n de servidor, junto con un puerto cuando corresponda)");
//subPan24.add ( jtp );
subPan3.add ( subPan31 );
subPan3.add ( new JLabel( UIMessages.getInstance().getMessage("server.addgame.onlyactive") , JLabel.CENTER ) );
//subPan2.add ( subPan24 );
panelPrincipal.add ( subPan1 );
panelPrincipal.add ( subPan2 );
panelPrincipal.add ( subPan3 );
JPanel panelBotones = new JPanel ( new GridLayout ( 1 , 4 ) );
panelBotones.add ( new JPanel() );
panelBotones.add ( new JPanel() );
panelBotones.add ( botonAceptar );
panelBotones.add ( botonCancelar );
panelPrincipal.setBorder ( BorderFactory.createEtchedBorder() );
getContentPane().add(panelPrincipal , BorderLayout.CENTER );
getContentPane().add(panelBotones , BorderLayout.SOUTH );
//pack();
botonCancelar.addActionListener
(
new ActionListener()
{
public void actionPerformed ( ActionEvent evt )
{
dispose();
}
}
);
botonAceptar.addActionListener
(
new ActionListener()
{
public void actionPerformed ( ActionEvent evt )
{
PartidaEntry pe = getEntrada();
madre.addPartidaEntry ( pe );
dispose();
}
}
);
}
boolean editMode = false;
//for editing
public AddGameWindow ( final ServerConfigurationWindow madre , final PartidaEntry aEditar )
{
super ( madre , true );
this.madre = madre;
editMode = true;
setTitle( UIMessages.getInstance().getMessage("server.addgame.title") );
setSize ( 600 , 400 );
//get game info list
GameInfo[] gi = GameInfo.getListOfGames();
for ( int i = 0 ; i < gi.length ; i++ )
gamesVector.addElement ( gi[i] );
getContentPane().setLayout ( new BorderLayout() );
JPanel panelPrincipal = new JPanel ( new GridLayout(3,1) );
JPanel subPan1 = new JPanel(); //parecido a un GameChoosingPanel
gamesList.addListSelectionListener ( new ListSelectionListener()
{
public void valueChanged ( ListSelectionEvent evt )
{
informacionJuego = (GameInfo)gamesList.getSelectedValue();
updateGameInfoArea();
}
} );
//choose selected index
int i;
for ( i = 0 ; i < gamesVector.size() ; i++ )
{
System.out.println("Infos for index " + i + ": ");
System.out.println( "" + ((GameInfo)gamesVector.get(i)) );
System.out.println( "" + (aEditar.getGameInfo()) );
if ( ((GameInfo)gamesVector.get(i)).equals(aEditar.getGameInfo()) )
break;
}
if ( i < gamesVector.size() )
gamesList.setSelectedIndex(i);
else
gamesList.setSelectedIndex(0);
subPan1.setLayout ( new GridLayout ( 1 , 2 ) );
subPan1.add ( new JScrollPane ( gamesList , JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED , JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED ) );
JPanel ctl = new JPanel ( new BorderLayout() );
gamesList.setBackground ( Color.black );
gamesList.setForeground ( Color.white );
gameInfoArea.setBackground ( Color.black );
gameInfoArea.setForeground ( Color.white );
//ctl.setSize(200,200);
//ctl.add ( gameInfoArea );
//ctl.setSize(200,200);
//subPan1.add(ctl);
subPan1.add ( new JScrollPane ( gameInfoArea , JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED , JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED ) );
JPanel subPan2 = new JPanel ( new GridLayout ( 3 , 1 ) );
JPanel subPan21 = new JPanel();
subPan21.add ( new JLabel( UIMessages.getInstance().getMessage("server.addgame.label.gamename") ) );
gameNameTextField.setText(aEditar.getName());
subPan21.add ( gameNameTextField );
JPanel subPan22 = new JPanel();
subPan22.add ( new JLabel( UIMessages.getInstance().getMessage("server.addgame.label.maxplayers") ) );
maxPlayersTextField.setText(String.valueOf(aEditar.getMaxPlayers()));
subPan22.add ( maxPlayersTextField );
JPanel subPan23 = new JPanel();
subPan23.add ( passwordRequiredBox );
passwordTextField.setText(String.valueOf(aEditar.getPassword()));
subPan23.add ( passwordTextField );
subPan2.add ( subPan21 );
subPan2.add ( subPan22 );
subPan2.add ( subPan23 );
JPanel subPan3 = new JPanel();
subPan3.setLayout ( new GridLayout( 2 , 1 ) );
JPanel subPan31 = new JPanel();
subPan3.setBorder ( BorderFactory.createTitledBorder("Servir por:") );
cbAge.setSelected(aEditar.sirveAge());
cbTelnet.setSelected(aEditar.sirveTelnet());
cbIrc.setSelected(aEditar.sirveIrc());
subPan31.add ( cbAge );
subPan31.add ( cbTelnet );
subPan31.add ( cbIrc );
//JTextPane jtp = new JTextPane();
//jtp.setText("(n�tese que, para que se sirva la partida, es necesario seleccionar AGE, telnet y/o IRC tambi�n en la ventana de configuraci�n de servidor, junto con un puerto cuando corresponda)");
//subPan24.add ( jtp );
subPan3.add ( subPan31 );
subPan3.add ( new JLabel( UIMessages.getInstance().getMessage("server.addgame.onlyactive") , JLabel.CENTER ) );
//subPan2.add ( subPan24 );
panelPrincipal.add ( subPan1 );
panelPrincipal.add ( subPan2 );
panelPrincipal.add ( subPan3 );
JPanel panelBotones = new JPanel ( new GridLayout ( 1 , 4 ) );
panelBotones.add ( new JPanel() );
panelBotones.add ( new JPanel() );
panelBotones.add ( botonAceptar );
panelBotones.add ( botonCancelar );
panelPrincipal.setBorder ( BorderFactory.createEtchedBorder() );
getContentPane().add(panelPrincipal , BorderLayout.CENTER );
getContentPane().add(panelBotones , BorderLayout.SOUTH );
//pack();
botonCancelar.addActionListener
(
new ActionListener()
{
public void actionPerformed ( ActionEvent evt )
{
if ( editMode ) //cancelled edit: re-add it
madre.addPartidaEntry ( aEditar );
dispose();
}
}
);
botonAceptar.addActionListener
(
new ActionListener()
{
public void actionPerformed ( ActionEvent evt )
{
PartidaEntry pe = getEntrada();
madre.addPartidaEntry ( pe );
dispose();
}
}
);
}
public PartidaEntry getEntrada()
{
try
{
return new PartidaEntry ( (GameInfo) gamesList.getSelectedValue() , gameNameTextField.getText() , maxPlayersTextField.getText() , passwordRequiredBox.isSelected()?passwordTextField.getText():null , cbAge.isSelected() , cbTelnet.isSelected() , cbIrc.isSelected() );
}
catch ( NumberFormatException nfe )
{
//defaultear el maxplayers a 9999
return new PartidaEntry ( (GameInfo) gamesList.getSelectedValue() , gameNameTextField.getText() , 9999 , passwordRequiredBox.isSelected()?passwordTextField.getText():null , cbAge.isSelected() , cbTelnet.isSelected() , cbIrc.isSelected() );
}
}
}