org.eclipse.jface.wizard.WizardSelectionPage Maven / Gradle / Ivy
The newest version!
/*******************************************************************************
* Copyright (c) 2000, 2015 IBM Corporation and others.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* 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.
*
* 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
* getSelectedNode
and setSelectedNode
.
* Otherwise, the subclass contract is the same as WizardPage
.
*
*/
public abstract class WizardSelectionPage extends WizardPage {
/**
* The selected node; null
if none.
*/
private IWizardNode selectedNode = null;
/**
* List of wizard nodes that have cropped up in the past
* (element type: IWizardNode
).
*/
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 null
*/
private void addSelectedNode(IWizardNode node) {
if (node == null) {
return;
}
if (selectedWizardNodes.contains(node)) {
return;
}
selectedWizardNodes.add(node);
}
/**
* The WizardSelectionPage
implementation of
* this IWizardPage
method returns true
* if there is a selected node.
*/
@Override
public boolean canFlipToNextPage() {
return selectedNode != null;
}
/**
* The WizardSelectionPage
implementation of an IDialogPage
* method disposes of all nested wizards. Subclasses may extend.
*/
@Override
public void dispose() {
super.dispose();
// notify nested wizards
for (IWizardNode selectedWizardNode : selectedWizardNodes) {
selectedWizardNode.dispose();
}
}
/**
* The WizardSelectionPage
implementation of
* this IWizardPage
method returns the first page
* of the currently selected wizard if there is one.
*/
@Override
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 know its surrounding container
wizard.setContainer(getContainer());
// 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 null
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 null
to clear
*/
protected void setSelectedNode(IWizardNode node) {
addSelectedNode(node);
selectedNode = node;
if (isCurrentPage()) {
getContainer().updateButtons();
}
}
}