package cryodex.modules.xwing.wizard.common;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.List;
import javax.swing.ButtonGroup;
import javax.swing.JCheckBox;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JTextField;
import javax.swing.SpringLayout;
import cryodex.Language;
import cryodex.modules.xwing.XWingTournament.InitialSeedingEnum;
import cryodex.modules.xwing.wizard.Page;
import cryodex.modules.xwing.wizard.WizardOptions;
import cryodex.modules.xwing.wizard.WizardUtils;
import cryodex.modules.xwing.wizard.WizardUtils.SplitOptions;
import cryodex.modules.xwing.wizard.XWingWizard;
import cryodex.widget.ComponentUtils;
import cryodex.widget.SpringUtilities;
public class AdditionalOptionsPage implements Page {
private JRadioButton randomRB;
private JRadioButton byGroupRB;
private JRadioButton byRankingRB;
private JCheckBox nonSwiss;
private JRadioButton singleElimination;
private JRadioButton roundRobin;
private JTextField customPointsTF;
private JRadioButton standardRB;
private JRadioButton escalationRB;
private JRadioButton epicRB;
private JRadioButton customRB;
private JRadioButton splitRandomRB;
private JRadioButton splitByGroupRB;
private JRadioButton splitByRanking;
private JPanel pagePanel;
@Override
public JPanel getPanel() {
XWingWizard.getInstance().setButtonVisibility(true, null, true);
XWingWizard.getInstance().setMinimumSize(new Dimension(450, 500));
WizardOptions wizardOptions = XWingWizard.getInstance().getWizardOptions();
if (pagePanel == null) {
JPanel initialPairingPanel = new JPanel(new BorderLayout());
JLabel header = new JLabel("<HTML><H3>" + Language.first_round_pairing + "</H3></HTML>");
initialPairingPanel.add(ComponentUtils.addToFlowLayout(header, FlowLayout.LEFT), BorderLayout.NORTH);
JPanel tournamentTypesPanel = new JPanel(new SpringLayout());
ButtonGroup bg = new ButtonGroup();
// Another radiobutton-group for Single Elim or Round Robin
ButtonGroup bg2 = new ButtonGroup();
randomRB = new JRadioButton(Language.random);
byGroupRB = new JRadioButton(Language.seperate_by_group_name);
byRankingRB = new JRadioButton(Language.by_ranking);
nonSwiss = new JCheckBox("Non-Swiss alternatives");
singleElimination = new JRadioButton("<HTML>" + Language.start_as_single_elimination + "</HTML>");
roundRobin = new JRadioButton("<HTML>Start event as Round Robin</HTML>");
bg.add(randomRB);
bg.add(byGroupRB);
bg.add(byRankingRB);
// Adding buttons to buttongroup nr 2
bg2.add(singleElimination);
bg2.add(roundRobin);
randomRB.setSelected(true);
tournamentTypesPanel.add(randomRB);
tournamentTypesPanel.add(byGroupRB);
if (wizardOptions.getSelectedTournaments() != null && wizardOptions.getSelectedTournaments().isEmpty() == false) {
tournamentTypesPanel.add(byRankingRB);
}
tournamentTypesPanel.add(nonSwiss);
tournamentTypesPanel.add(singleElimination);
tournamentTypesPanel.add(roundRobin);
roundRobin.setEnabled(false);
singleElimination.setEnabled(false);
SpringUtilities.makeCompactGrid(tournamentTypesPanel, tournamentTypesPanel.getComponentCount(), 1, 0, 0, 0, 0);
initialPairingPanel.add(ComponentUtils.addToFlowLayout(tournamentTypesPanel, FlowLayout.LEFT), BorderLayout.CENTER);
JPanel centerPanel = new JPanel(new BorderLayout());
JLabel pointHeader = new JLabel("<HTML><H3>" + Language.choose_point_type + "</H3></HTML>");
centerPanel.add(ComponentUtils.addToFlowLayout(pointHeader, FlowLayout.LEFT), BorderLayout.NORTH);
JPanel pointsPanel = new JPanel(new SpringLayout());
ButtonGroup pointsBG = new ButtonGroup();
standardRB = new JRadioButton(Language.standard_points);
escalationRB = new JRadioButton(Language.escalation_points);
epicRB = new JRadioButton(Language.epic_points);
customRB = new JRadioButton(Language.custom_points);
final JLabel customPointsInfo = new JLabel(Language.comma_separated);
ActionListener customListener = new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
if (customRB.isSelected()) {
customPointsTF.setEnabled(true);
} else {
customPointsTF.setEnabled(false);
}
// Enable/Disable parts of UI
if (nonSwiss.isSelected()) {
singleElimination.setEnabled(true);
roundRobin.setEnabled(true);
if (roundRobin.isSelected()) {
byGroupRB.setEnabled(false);
randomRB.setEnabled(false);
} else {
byGroupRB.setEnabled(true);
randomRB.setEnabled(true);
}
} else {
singleElimination.setEnabled(false);
singleElimination.setSelected(false);
roundRobin.setEnabled(false);
roundRobin.setSelected(false);
byGroupRB.setEnabled(true);
randomRB.setEnabled(true);
}
}
};
standardRB.addActionListener(customListener);
escalationRB.addActionListener(customListener);
epicRB.addActionListener(customListener);
customRB.addActionListener(customListener);
nonSwiss.addActionListener(customListener);
roundRobin.addActionListener(customListener);
singleElimination.addActionListener(customListener);
customPointsTF = new JTextField();
customPointsTF.setColumns(12);
customPointsTF.setEnabled(false);
pointsBG.add(standardRB);
pointsBG.add(escalationRB);
pointsBG.add(epicRB);
pointsBG.add(customRB);
standardRB.setSelected(true);
pointsPanel.add(standardRB);
pointsPanel.add(escalationRB);
pointsPanel.add(epicRB);
pointsPanel.add(customRB);
pointsPanel.add(customPointsInfo);
pointsPanel.add(
ComponentUtils.addToHorizontalBorderLayout(null, ComponentUtils.addToFlowLayout(customPointsTF, FlowLayout.LEFT), new JPanel()));
SpringUtilities.makeCompactGrid(pointsPanel, 6, 1, 0, 0, 0, 0);
centerPanel.add(ComponentUtils.addToFlowLayout(pointsPanel, FlowLayout.LEFT), BorderLayout.CENTER);
JPanel splitOptionsPanel = new JPanel(new BorderLayout());
JLabel splitOptionsHeader = new JLabel("<HTML><H3>" + Language.how_to_split_tournament + "</H3></HTML>");
splitOptionsPanel.add(ComponentUtils.addToFlowLayout(splitOptionsHeader, FlowLayout.LEFT), BorderLayout.NORTH);
JPanel splitOptionsSubPanel = new JPanel(new SpringLayout());
ButtonGroup splitOptionsBG = new ButtonGroup();
splitRandomRB = new JRadioButton(Language.random);
splitByGroupRB = new JRadioButton(Language.separate_by_group_name);
splitByRanking = new JRadioButton(Language.split_by_ranking);
splitOptionsBG.add(splitRandomRB);
splitOptionsBG.add(splitByGroupRB);
splitOptionsBG.add(splitByRanking);
splitOptionsSubPanel.add(splitRandomRB);
splitOptionsSubPanel.add(splitByGroupRB);
if (wizardOptions.getSelectedTournaments() != null && wizardOptions.getSelectedTournaments().isEmpty() == false) {
splitOptionsSubPanel.add(splitByRanking);
XWingWizard.getInstance().setMinimumSize(new Dimension(450, 550));
}
SpringUtilities.makeCompactGrid(splitOptionsSubPanel, splitOptionsSubPanel.getComponentCount(), 1, 0, 0, 0, 0);
splitOptionsPanel.add(ComponentUtils.addToFlowLayout(splitOptionsSubPanel, FlowLayout.LEFT), BorderLayout.CENTER);
pagePanel = new JPanel(new FlowLayout());
pagePanel.add(ComponentUtils.addToVerticalBorderLayout(initialPairingPanel, centerPanel,
wizardOptions.getSplit() > 1 ? splitOptionsPanel : null));
}
return pagePanel;
}
@Override
public void onNext() {
// Do nothing
}
@Override
public void onPrevious() {
XWingWizard.getInstance().goToPrevious();
}
@Override
public void onFinish() {
WizardOptions wizardOptions = XWingWizard.getInstance().getWizardOptions();
if (standardRB.isSelected()) {
wizardOptions.setPoints(100);
} else if (escalationRB.isSelected()) {
List<Integer> points = new ArrayList<Integer>();
points.add(60);
points.add(90);
points.add(120);
points.add(150);
wizardOptions.setPoints(points);
} else if (epicRB.isSelected()) {
wizardOptions.setPoints(300);
} else if (customRB.isSelected()) {
try {
Integer points = Integer.parseInt(customPointsTF.getText());
wizardOptions.setPoints(points);
} catch (Exception e) {
String[] rounds = customPointsTF.getText().split(",");
List<Integer> points = new ArrayList<Integer>();
for (String s : rounds) {
points.add(Integer.parseInt(s.trim()));
}
wizardOptions.setPoints(points);
}
}
if (randomRB.isSelected()) {
wizardOptions.setInitialSeedingEnum(InitialSeedingEnum.RANDOM);
} else if (byGroupRB.isSelected()) {
wizardOptions.setInitialSeedingEnum(InitialSeedingEnum.BY_GROUP);
} else if (byRankingRB.isSelected()) {
wizardOptions.setInitialSeedingEnum(InitialSeedingEnum.IN_ORDER);
}
if (nonSwiss.isSelected()) {
if (singleElimination.isSelected()) {
wizardOptions.setSingleElimination(true);
} else if (roundRobin.isSelected()) {
wizardOptions.setRoundRobin(true);
}
}
if (wizardOptions.getSplit() > 1) {
SplitOptions splitOption = null;
if (splitByGroupRB.isSelected()) {
splitOption = SplitOptions.GROUP;
} else if (splitByRanking.isSelected()) {
splitOption = SplitOptions.RANKING;
} else if (splitRandomRB.isSelected()) {
splitOption = SplitOptions.RANDOM;
}
WizardUtils.createSplitTournament(splitOption);
} else {
WizardUtils.createTournament();
}
}
}