package gui;
import java.awt.FlowLayout;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
import models.Rules;
import rules.NextTurn;
import rules.NextTurn.NextTurnOption;
import utility.GuiUtility;
public class CustomPlayerPanel extends ChessPanel
{
public CustomPlayerPanel(VariantCreationPanel customSetupMenu, JFrame optionsFrame)
{
mWhiteRules = customSetupMenu.mWhiteRules;
mBlackRules = customSetupMenu.mBlackRules;
mFrame = optionsFrame;
mFrame.setVisible(true);
mFrame.add(this);
mFrame.setVisible(true);
mFrame.setSize(300, 200);
mFrame.setLocationRelativeTo(Driver.getInstance());
initGUIComponents(customSetupMenu);
}
private void initGUIComponents(final VariantCreationPanel customSetupMenu)
{
setLayout(new GridBagLayout());
GridBagConstraints constraints = new GridBagConstraints();
setBorder(BorderFactory.createLoweredBevelBorder());
JLabel playerOneTurnsLabel = GuiUtility.createJLabel(Messages.getString("CustomPlayerPanel.howManyWhite")); //$NON-NLS-1$
JLabel playerTwoTurnsLabel = GuiUtility.createJLabel(Messages.getString("CustomPlayerPanel.howManyBlack")); //$NON-NLS-1$
mPlayerOneTurnsField = new JTextField(4);
GuiUtility.requestFocus(mPlayerOneTurnsField);
mPlayerOneTurnsField.setText(Integer.toString(mWhiteRules.getNextTurn().getWhiteMoves()));
mPlayerOneTurnsField.setToolTipText(Messages.getString("CustomPlayerPanel.amountForFirstPlayer")); //$NON-NLS-1$
mPlayerTwoTurnsField = new JTextField(4);
mPlayerTwoTurnsField.setText(Integer.toString(mWhiteRules.getNextTurn().getBlackMoves()));
mPlayerTwoTurnsField.setToolTipText(Messages.getString("CustomPlayerPanel.amountForSecondPlayer")); //$NON-NLS-1$
mIncrementTurnsLabel = GuiUtility.createJLabel(Messages.getString("CustomPlayerPanel.increaseByHowMany")); //$NON-NLS-1$
mIncrementTurnsField = new JTextField(4);
mIncrementTurnsField.setText(Integer.toString(mWhiteRules.getNextTurn().getIncrement()));
mIncrementTurnsField.setToolTipText(Messages.getString("CustomPlayerPanel.amountOfIncrease")); //$NON-NLS-1$
JButton cancelButton = new JButton(Messages.getString("CustomPlayerPanel.cancel")); //$NON-NLS-1$
cancelButton.setToolTipText(Messages.getString("CustomPlayerPanel.pressToReturn")); //$NON-NLS-1$
GuiUtility.setupVariantCancelButton(cancelButton, this, mFrame);
JButton submitButton = new JButton(Messages.getString("CustomPlayerPanel.save")); //$NON-NLS-1$
submitButton.setToolTipText(Messages.getString("CustomPlayerPanel.pressToSave")); //$NON-NLS-1$
submitButton.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent event)
{
if (formIsComplete(mWhiteRules, mBlackRules))
{
customSetupMenu.setWhiteRules(mWhiteRules);
customSetupMenu.setBlackRules(mBlackRules);
CustomPlayerPanel.this.removeAll();
mFrame.setVisible(false);
}
}
});
JPanel buttonPanel = new JPanel();
buttonPanel.setLayout(new FlowLayout());
buttonPanel.setOpaque(false);
buttonPanel.add(submitButton);
buttonPanel.add(cancelButton);
constraints.insets = new Insets(3, 3, 3, 3);
constraints.gridx = 0;
constraints.gridy = 0;
add(playerOneTurnsLabel, constraints);
constraints.insets = new Insets(3, 3, 3, 3);
constraints.gridx = 2;
constraints.gridy = 0;
add(mPlayerOneTurnsField, constraints);
constraints.insets = new Insets(3, 3, 3, 3);
constraints.gridx = 0;
constraints.gridy = 1;
add(playerTwoTurnsLabel, constraints);
constraints.insets = new Insets(3, 3, 3, 3);
constraints.gridx = 2;
constraints.gridy = 1;
add(mPlayerTwoTurnsField, constraints);
constraints.insets = new Insets(3, 3, 3, 3);
constraints.gridx = 0;
constraints.gridy = 2;
add(mIncrementTurnsLabel, constraints);
constraints.insets = new Insets(3, 3, 3, 3);
constraints.gridx = 2;
constraints.gridy = 2;
add(mIncrementTurnsField, constraints);
constraints.gridwidth = 3;
constraints.gridx = 0;
constraints.gridy = 3;
add(buttonPanel, constraints);
}
private boolean formIsComplete(Rules whiteRules, Rules blackRules)
{
mWhiteRules = whiteRules;
mBlackRules = blackRules;
try
{
int whiteTurns = Integer.parseInt(mPlayerOneTurnsField.getText());
int blackTurns = Integer.parseInt(mPlayerTwoTurnsField.getText());
int increment = Integer.parseInt(mIncrementTurnsField.getText());
if (whiteTurns < 0)
{
JOptionPane
.showMessageDialog(
this,
Messages.getString("CustomPlayerPanel.whiteCannotBeNegative"), Messages.getString("CustomPlayerPanel.noNegatives"), //$NON-NLS-1$ //$NON-NLS-2$
JOptionPane.PLAIN_MESSAGE);
return false;
}
else if (blackTurns < 0)
{
JOptionPane
.showMessageDialog(
this,
Messages.getString("CustomPlayerPanel.blackCannotBeNegative"), Messages.getString("CustomPlayerPanel.noNegatives"), //$NON-NLS-1$ //$NON-NLS-2$
JOptionPane.PLAIN_MESSAGE);
return false;
}
else
{
NextTurn next;
if (whiteTurns == blackTurns)
{
if (increment > 0)
next = new NextTurn(NextTurnOption.INCREASING_TOGETHER, whiteTurns, blackTurns, increment);
else
next = new NextTurn(NextTurnOption.DIFFERENT_NUMBER_OF_TURNS, whiteTurns, blackTurns, increment);
}
else if (increment > 0)
next = new NextTurn(NextTurnOption.INCREASING_SEPARATELY, whiteTurns, blackTurns, increment);
else
next = new NextTurn(NextTurnOption.DIFFERENT_NUMBER_OF_TURNS, whiteTurns, blackTurns, increment);
mWhiteRules.setNextTurn(next);
mBlackRules.setNextTurn(next);
}
}
catch (Exception e)
{
JOptionPane
.showMessageDialog(
Driver.getInstance(),
Messages.getString("CustomPlayerPanel.enterValidTurnNumbers"), Messages.getString("CustomPlayerPanel.incompleteForm"), //$NON-NLS-1$ //$NON-NLS-2$
JOptionPane.PLAIN_MESSAGE);
return false;
}
return true;
}
private static final long serialVersionUID = -5035641594159934814L;
private Rules mWhiteRules;
private Rules mBlackRules;
private JTextField mPlayerOneTurnsField;
private JTextField mPlayerTwoTurnsField;
private JLabel mIncrementTurnsLabel;
private JTextField mIncrementTurnsField;
private JFrame mFrame;
}