/******************************************************************************* * 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 *******************************************************************************/ package net.sf.robocode.ui.dialog; import javax.swing.*; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; import java.awt.*; import java.awt.event.ContainerEvent; import java.awt.event.ContainerListener; /** * @author Mathew A. Nelson (original) */ @SuppressWarnings("serial") public class WizardTabbedPane extends JTabbedPane implements Wizard { private WizardController wizardController; private int currentIndex = 0; private final WizardListener listener; private final EventHandler eventHandler = new EventHandler(); public class EventHandler implements ContainerListener, ChangeListener { public void componentRemoved(ContainerEvent e) {} public void componentAdded(ContainerEvent e) { if (e.getChild() instanceof WizardPanel) { setWizardControllerOnPanel((WizardPanel) e.getChild()); getWizardController().stateChanged(new ChangeEvent(e.getChild())); } } public void stateChanged(javax.swing.event.ChangeEvent e) { currentIndex = getSelectedIndex(); getWizardController().stateChanged(e); } } public WizardTabbedPane(WizardListener listener) { this.listener = listener; initialize(); } public void back() { setSelectedIndex(currentIndex - 1); } public Component getCurrentPanel() { return getSelectedComponent(); } public WizardController getWizardController() { if (wizardController == null) { wizardController = new WizardController(this); } return wizardController; } public WizardListener getWizardListener() { return listener; } public void initialize() { addChangeListener(eventHandler); addContainerListener(eventHandler); } public boolean isBackAvailable() { return (currentIndex > 0); } public boolean isCurrentPanelReady() { Component c = getCurrentPanel(); return (!(c instanceof WizardPanel)) || ((WizardPanel) c).isReady(); } public boolean isNextAvailable() { return ((currentIndex < getComponentCount() - 1) && isCurrentPanelReady()); } public boolean isReady() { for (Component c : getComponents()) { if (c instanceof WizardPanel) { if (!((WizardPanel) c).isReady()) { return false; } } } return true; } public void next() { setSelectedIndex(currentIndex + 1); } public void setWizardControllerOnPanel(WizardPanel panel) { panel.setWizardController(getWizardController()); } }