package cryodex.modules.xwing.wizard;
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.JButton;
import javax.swing.JDialog;
import javax.swing.JPanel;
import cryodex.Language;
import cryodex.Main;
import cryodex.modules.xwing.wizard.common.MainPage;
public class XWingWizard extends JDialog {
private static final long serialVersionUID = 1L;
private static XWingWizard wizard;
public static XWingWizard getInstance() {
if (wizard == null) {
wizard = new XWingWizard();
wizard.setupWizard();
}
return wizard;
}
private WizardOptions wizardOptions = new WizardOptions();
private JPanel mainPanel = null;
private JPanel contentPanel = null;
private JPanel buttonPanel = null;
private JButton previousButton = null;
private JButton nextButton = null;
private JButton finishButton = null;
private JButton cancelButton = null;
private final List<Page> pages = new ArrayList<Page>();
private XWingWizard() {
super(Main.getInstance(), Language.tournament_wizard, true);
}
protected void setupWizard() {
this.add(getMainPanel());
setCurrentPage(new MainPage());
XWingWizard.this.pack();
this.setMinimumSize(new Dimension(450, 300));
}
@Override
public void setVisible(boolean b) {
super.setVisible(b);
if (b) {
wizardOptions = new WizardOptions();
setCurrentPage(new MainPage());
XWingWizard.this.pack();
this.setMinimumSize(new Dimension(450, 300));
}
}
public void setCurrentPage(Page page) {
pages.add(page);
getContentPanel().removeAll();
getContentPanel().add(page.getPanel(), BorderLayout.CENTER);
getContentPanel().validate();
getContentPanel().repaint();
}
private Page getCurrentPage() {
return pages.isEmpty() ? null : pages.get(pages.size() - 1);
}
private Page getPreviousPage() {
return pages.size() > 1 ? pages.get(pages.size() - 2) : null;
}
public void goToPrevious() {
if (getPreviousPage() != null) {
pages.remove(pages.get(pages.size() - 1));
getContentPanel().removeAll();
getContentPanel().add(pages.get(pages.size() - 1).getPanel(), BorderLayout.CENTER);
getContentPanel().validate();
getContentPanel().repaint();
} else {
XWingWizard.this.setVisible(false);
}
}
private JPanel getMainPanel() {
if (mainPanel == null) {
mainPanel = new JPanel(new BorderLayout());
mainPanel.add(getContentPanel(), BorderLayout.CENTER);
mainPanel.add(getButtonPanel(), BorderLayout.SOUTH);
}
return mainPanel;
}
private JPanel getContentPanel() {
if (contentPanel == null) {
contentPanel = new JPanel(new BorderLayout());
}
return contentPanel;
}
private JPanel getButtonPanel() {
if (buttonPanel == null) {
buttonPanel = new JPanel(new FlowLayout(FlowLayout.CENTER));
buttonPanel.add(getPreviousButton());
buttonPanel.add(getNextButton());
buttonPanel.add(getFinishButton());
buttonPanel.add(getCancelButton());
}
return buttonPanel;
}
public void setButtonVisibility(Boolean previous, Boolean next, Boolean finish) {
getPreviousButton().setVisible(previous == null ? false : previous);
getPreviousButton().setEnabled(previous != null);
getNextButton().setVisible(next == null ? false : next);
getNextButton().setEnabled(next != null);
getFinishButton().setVisible(finish == null ? false : finish);
getFinishButton().setEnabled(finish != null);
}
private JButton getPreviousButton() {
if (previousButton == null) {
previousButton = new JButton(Language.previous);
previousButton.setEnabled(false);
previousButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
getCurrentPage().onPrevious();
}
});
}
return previousButton;
}
private JButton getNextButton() {
if (nextButton == null) {
nextButton = new JButton(Language.next);
nextButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
getCurrentPage().onNext();
}
});
}
return nextButton;
}
private JButton getFinishButton() {
if (finishButton == null) {
finishButton = new JButton(Language.finish);
finishButton.setVisible(false);
finishButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
getCurrentPage().onFinish();
}
});
}
return finishButton;
}
private JButton getCancelButton() {
if (cancelButton == null) {
cancelButton = new JButton(Language.cancel);
cancelButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
XWingWizard.this.setVisible(false);
}
});
}
return cancelButton;
}
public WizardOptions getWizardOptions() {
return wizardOptions;
}
}