blob: a7f7ee157de91bc18b4595d6b5556447a572e488 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2000, 2004 IBM Corporation and others.
* 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://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.jface.wizard;
import java.util.ArrayList;
import java.util.List;
/**
* An abstract implementation of a wizard page that manages a
* set of embedded wizards.
* <p>
* A wizard selection page should present a list of wizard nodes
* corresponding to other wizards. When the end user selects one of
* them from the list, the first page of the selected wizard becomes
* the next page. The only new methods introduced by this class are
* <code>getSelectedNode</code> and <code>setSelectedNode</code>.
* Otherwise, the subclass contract is the same as <code>WizardPage</code>.
* </p>
*/
public abstract class WizardSelectionPage extends WizardPage {
/**
* The selected node; <code>null</code> if none.
*/
private IWizardNode selectedNode = null;
/**
* List of wizard nodes that have cropped up in the past
* (element type: <code>IWizardNode</code>).
*/
private List selectedWizardNodes = new ArrayList();
/**
* Creates a new wizard selection page with the given name, and
* with no title or image.
*
* @param pageName the name of the page
*/
protected WizardSelectionPage(String pageName) {
super(pageName);
// Cannot finish from this page
setPageComplete(false);
}
/**
* Adds the given wizard node to the list of selected nodes if
* it is not already in the list.
*
* @param node the wizard node, or <code>null</code>
*/
private void addSelectedNode(IWizardNode node) {
if (node == null)
return;
if (selectedWizardNodes.contains(node))
return;
selectedWizardNodes.add(node);
}
/**
* The <code>WizardSelectionPage</code> implementation of
* this <code>IWizardPage</code> method returns <code>true</code>
* if there is a selected node.
*/
public boolean canFlipToNextPage() {
return selectedNode != null;
}
/**
* The <code>WizardSelectionPage</code> implementation of an <code>IDialogPage</code>
* method disposes of all nested wizards. Subclasses may extend.
*/
public void dispose() {
super.dispose();
// notify nested wizards
for (int i = 0; i < selectedWizardNodes.size(); i++) {
((IWizardNode) selectedWizardNodes.get(i)).dispose();
}
}
/**
* The <code>WizardSelectionPage</code> implementation of
* this <code>IWizardPage</code> method returns the first page
* of the currently selected wizard if there is one.
*/
public IWizardPage getNextPage() {
if (selectedNode == null)
return null;
boolean isCreated = selectedNode.isContentCreated();
IWizard wizard = selectedNode.getWizard();
if (wizard == null) {
setSelectedNode(null);
return null;
}
if (!isCreated)
// Allow the wizard to create its pages
wizard.addPages();
return wizard.getStartingPage();
}
/**
* Returns the currently selected wizard node within this page.
*
* @return the wizard node, or <code>null</code> if no node is selected
*/
public IWizardNode getSelectedNode() {
return selectedNode;
}
/**
* Sets or clears the currently selected wizard node within this page.
*
* @param node the wizard node, or <code>null</code> to clear
*/
protected void setSelectedNode(IWizardNode node) {
addSelectedNode(node);
selectedNode = node;
if (isCurrentPage())
getContainer().updateButtons();
}
}