package cryodex.modules.xwing.wizard.merge; 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.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Set; import java.util.TreeSet; 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.CryodexController; import cryodex.Language; import cryodex.modules.Tournament; import cryodex.modules.xwing.XWingComparator; import cryodex.modules.xwing.XWingPlayer; import cryodex.modules.xwing.XWingTournament; import cryodex.modules.xwing.wizard.Page; import cryodex.modules.xwing.wizard.XWingWizard; import cryodex.modules.xwing.wizard.common.AdditionalOptionsPage; import cryodex.widget.ComponentUtils; import cryodex.widget.SpringUtilities; public class MergeTournamentSelectionPage implements Page { private JPanel pagePanel = null; private final Map<XWingTournament, JCheckBox> checkBoxMap = new HashMap<XWingTournament, JCheckBox>(); private JRadioButton all; private JRadioButton manual; private JTextField manualInput; @Override public JPanel getPanel() { XWingWizard.getInstance().setButtonVisibility(true, true, false); XWingWizard.getInstance().setMinimumSize(new Dimension(450, 500)); if (pagePanel == null) { pagePanel = new JPanel(new BorderLayout()); JLabel header = new JLabel("<HTML><H3>" + Language.select_tournaments + "</H3></HTML>"); JPanel listPanel = new JPanel(new SpringLayout()); for (Tournament t : CryodexController.getAllTournaments()) { JCheckBox cb = new JCheckBox(t.getName()); if (t instanceof XWingTournament) { checkBoxMap.put((XWingTournament) t, cb); } listPanel.add(cb); } SpringUtilities.makeCompactGrid(listPanel, listPanel.getComponentCount(), 1, 0, 0, 0, 0); JLabel playersFromLabel = new JLabel("<HTML><H3>" + Language.how_many_players_from_each_event + "</H3></HTML>"); ButtonGroup pf = new ButtonGroup(); all = new JRadioButton(Language.all_players); manual = new JRadioButton(Language.let_me_pick + ":"); manualInput = new JTextField(3); manualInput.setEnabled(false); ActionListener playersFromListener = new ActionListener() { @Override public void actionPerformed(ActionEvent arg0) { manualInput.setEnabled(manual.isSelected()); } }; all.addActionListener(playersFromListener); manual.addActionListener(playersFromListener); pf.add(all); pf.add(manual); all.setSelected(true); JPanel manualPanel = ComponentUtils.addToHorizontalBorderLayout(manual, ComponentUtils.addToFlowLayout(manualInput, FlowLayout.LEFT), null); JPanel howManyPlayersPanel = ComponentUtils.addToVerticalBorderLayout(playersFromLabel,all, manualPanel); pagePanel.add(ComponentUtils.addToFlowLayout(header, FlowLayout.LEFT), BorderLayout.NORTH); pagePanel.add(ComponentUtils.addToFlowLayout(listPanel, FlowLayout.LEFT), BorderLayout.CENTER); pagePanel.add(ComponentUtils.addToFlowLayout(howManyPlayersPanel, FlowLayout.CENTER), BorderLayout.SOUTH); } return ComponentUtils.addToFlowLayout(pagePanel, FlowLayout.CENTER); } @Override public void onNext() { XWingWizard.getInstance().getWizardOptions().setMerge(true); List<XWingTournament> tournamentList = new ArrayList<XWingTournament>(); Set<XWingPlayer> playerList = new TreeSet<XWingPlayer>(); Integer playerCount = null; if (manual.isSelected()) { playerCount = Integer.parseInt(manualInput.getText()); } for (XWingTournament t : checkBoxMap.keySet()) { if (checkBoxMap.get(t).isSelected()) { tournamentList.add(t); List<XWingPlayer> thisTournamentPlayers = new ArrayList<XWingPlayer>(); thisTournamentPlayers.addAll(t.getXWingPlayers()); if (playerCount == null || thisTournamentPlayers.size() <= playerCount) { playerList.addAll(thisTournamentPlayers); } else { Collections.sort(thisTournamentPlayers, new XWingComparator(t, XWingComparator.rankingCompare)); playerList.addAll(thisTournamentPlayers.subList(0, playerCount)); } } } List<XWingPlayer> addingList = new ArrayList<XWingPlayer>(); addingList.addAll(playerList); XWingWizard.getInstance().getWizardOptions().setPlayerList(addingList); XWingWizard.getInstance().getWizardOptions().setSelectedTournaments(tournamentList); XWingWizard.getInstance().setCurrentPage(new AdditionalOptionsPage()); } @Override public void onPrevious() { XWingWizard.getInstance().goToPrevious(); } @Override public void onFinish() { // Do nothing } }