/*******************************************************************************
* Copyright (c) 2001, 2010 Mathew A. Nelson and Robocode contributors
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://robocode.sourceforge.net/license/epl-v10.html
*
* Contributors:
* Mathew A. Nelson
* - Initial API and implementation
* Matthew Reeder
* - Added keyboard mnemonics to standard wizard buttons
* Flemming N. Larsen
* - Code cleanup
*******************************************************************************/
package net.sf.robocode.ui.dialog;
import javax.swing.*;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
/**
* @author Mathew A. Nelson (original)
* @author Matthew Reeder (contributor)
* @author Flemming N. Larsen (contributor)
*/
@SuppressWarnings("serial")
public class WizardController extends JPanel implements ChangeListener {
private final EventHandler eventHandler = new EventHandler();
private JButton backButton;
private JButton nextButton;
private JButton finishButton;
private JButton cancelButton;
private boolean focusOnEnabled;
class EventHandler implements ActionListener {
public void actionPerformed(ActionEvent e) {
if (e.getSource() == WizardController.this.getFinishButton()) {
finishButtonActionPerformed();
}
if (e.getSource() == WizardController.this.getCancelButton()) {
cancelButtonActionPerformed();
}
if (e.getSource() == WizardController.this.getNextButton()) {
nextButtonActionPerformed();
}
if (e.getSource() == WizardController.this.getBackButton()) {
backButtonActionPerformed();
}
}
}
private void backButtonActionPerformed() {
wizard.back();
}
private void cancelButtonActionPerformed() {
wizard.getWizardListener().cancelButtonActionPerformed();
}
private void finishButtonActionPerformed() {
wizard.getWizardListener().finishButtonActionPerformed();
}
/**
* Return the backButton
*
* @return JButton
*/
private JButton getBackButton() {
if (backButton == null) {
backButton = new JButton();
backButton.setText("Back");
backButton.setMnemonic('B');
backButton.addActionListener(eventHandler);
}
return backButton;
}
/**
* Return the cancelButton
*
* @return JButton
*/
private JButton getCancelButton() {
if (cancelButton == null) {
cancelButton = new JButton();
cancelButton.setText("Cancel");
cancelButton.setMnemonic('C');
cancelButton.addActionListener(eventHandler);
}
return cancelButton;
}
/**
* Return the finishButton
*
* @return JButton
*/
private JButton getFinishButton() {
if (finishButton == null) {
finishButton = new JButton();
finishButton.setText("Finish");
finishButton.setMnemonic('F');
finishButton.addActionListener(eventHandler);
}
return finishButton;
}
public void setFinishButtonText(String text) {
getFinishButton().setText(text);
}
public void setFinishButtonTextAndMnemonic(String text, char mnemonic, int mnemonicIndex) {
getFinishButton().setText(text);
getFinishButton().setMnemonic(mnemonic);
getFinishButton().setDisplayedMnemonicIndex(mnemonicIndex);
}
/**
* Return the nextButton
*
* @return JButton
*/
private JButton getNextButton() {
if (nextButton == null) {
nextButton = new JButton();
nextButton.setText("Next");
nextButton.setMnemonic('N');
nextButton.addActionListener(eventHandler);
}
return nextButton;
}
/**
* Initialize the class.
*/
private void initialize() {
add(getBackButton());
add(getNextButton());
add(new JLabel(" "));
add(getFinishButton());
add(getCancelButton());
}
private void nextButtonActionPerformed() {
wizard.next();
}
private void setBackButtonEnabled(boolean enabled) {
getBackButton().setEnabled(enabled);
}
public void setFinishButtonEnabled(boolean enabled) {
getFinishButton().setEnabled(enabled);
if (focusOnEnabled && enabled) {
getFinishButton().requestFocus();
}
}
private void setNextButtonEnabled(boolean enabled) {
getNextButton().setEnabled(enabled);
}
private Wizard wizard = null;
protected WizardController(Wizard wizard) {
super();
this.wizard = wizard;
initialize();
stateChanged(null);
}
public void stateChanged(ChangeEvent e) {
setBackButtonEnabled(wizard.isBackAvailable());
setNextButtonEnabled(wizard.isNextAvailable());
setFinishButtonEnabled(wizard.isReady());
}
/**
* Gets the focusOnEnabled.
*
* @return Returns a boolean
*/
public boolean getFocusOnEnabled() {
return focusOnEnabled;
}
/**
* Sets the focusOnEnabled.
*
* @param focusOnEnabled The focusOnEnabled to set
*/
public void setFocusOnEnabled(boolean focusOnEnabled) {
this.focusOnEnabled = focusOnEnabled;
}
}