blob: c0e517830240e5c61ddf06710d299c5ffa32cf8c [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2000, 2005 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.ui.internal.ide.dialogs;
import org.eclipse.jface.wizard.IWizardPage;
import org.eclipse.jface.wizard.Wizard;
import org.eclipse.ui.internal.ide.IDEWorkbenchMessages;
import org.eclipse.ui.internal.ide.dialogs.MultiStepConfigureWizardPage.WizardStepContainer;
/**
* Standard workbench wizard to handle a multi-step page. The
* wizard is allowed any number of pages before the multi-step
* page is presented to the user.
* <p>
* Example:
* <pre>
* IWizard wizard = new MultiStepWizard();
* WizardDialog dialog = new MultiStepWizardDialog(shell, wizard);
* dialog.open();
* </pre>
* </p>
*/
public abstract class MultiStepWizard extends Wizard {
private MultiStepWizardDialog wizardDialog;
private MultiStepReviewWizardPage reviewPage;
private MultiStepConfigureWizardPage configPage;
/**
* Creates an empty wizard
*/
protected MultiStepWizard() {
super();
setNeedsProgressMonitor(true);
}
/**
* Adds any custom pages to the wizard before
* the multi-step review and configure pages are
* added.
*/
protected abstract void addCustomPages();
/* (non-Javadoc)
* Method declared on IWizard.
*/
public final void addPages() {
super.addPages();
addCustomPages();
reviewPage = new MultiStepReviewWizardPage(
"multiStepReviewWizardPage", this);//$NON-NLS-1$
reviewPage.setTitle(getReviewPageTitle());
reviewPage.setDescription(getReviewPageDescription());
this.addPage(reviewPage);
configPage = new MultiStepConfigureWizardPage(
"multiStepConfigureWizardPage");//$NON-NLS-1$
configPage.setTitle(getConfigurePageTitle());
configPage.setDescription(getConfigurePageDescription());
configPage.setWizardDialog(wizardDialog);
this.addPage(configPage);
}
/* (non-Javadoc)
* Method declared on IWizard.
*/
public boolean canFinish() {
if (getContainer().getCurrentPage() == reviewPage)
return canFinishOnReviewPage();
else if (isConfigureStepMode())
return getStepContainer().canWizardFinish();
else
return false;
}
/**
* Returns whether the wizard wants the Finish button
* enabled on the review page. Should only happen if
* there is only one step and that step does not require
* further interaction with the user. The Next button will
* be disabled and the instructions updated.
*/
protected abstract boolean canFinishOnReviewPage();
/* (non-Javadoc)
* Method declared on IWizard.
*/
public void dispose() {
super.dispose();
wizardDialog = null;
}
/**
* Returns the title for the multi-step configure
* page.
*/
protected abstract String getConfigurePageTitle();
/**
* Returns the description for the multi-step configure
* page.
*/
protected abstract String getConfigurePageDescription();
/**
* Returns the title for the multi-step review
* page.
*/
protected abstract String getReviewPageTitle();
/**
* Returns the label used on the finish button to
* to indicate finishing a step. Can be <code>null</code>
* if no special label is required.
* <p>
* The default implementation is to return the translated
* label "Finish Step".
* </p><p>
* On the last step, the finish button label is changed to
* be "Finish" and will no be changed.
* </p>
*/
protected String getFinishStepLabel(WizardStep[] steps) {
return IDEWorkbenchMessages.MultiStepWizard_finishLabel;
}
/* (non-Javadoc)
* Method declared on IWizard.
*/
public final IWizardPage getPreviousPage(IWizardPage page) {
if (page == configPage)
return null;
else
return super.getPreviousPage(page);
}
/**
* Returns the description for the multi-step review
* page.
*/
protected abstract String getReviewPageDescription();
/**
* Returns the container handler for the pages
* of the step's wizard.
*/
/* package */WizardStepContainer getStepContainer() {
return configPage.getStepContainer();
}
/**
* Handles the problem of a missing step wizard.
*
* @return <code>true</code> to retry, <code>false</code> to terminate
* multi step wizard dialog.
*/
/* package */abstract boolean handleMissingStepWizard(WizardStep step);
/**
* Returns whether the wizard is configuring steps
*/
/* package */boolean isConfigureStepMode() {
return getContainer().getCurrentPage() == configPage;
}
/* (non-Javadoc)
* Method declared on IWizard.
*/
public final boolean performCancel() {
if (isConfigureStepMode())
return getStepContainer().performCancel();
else
return true;
}
/* (non-Javadoc)
* Method declared on IWizard.
*/
public boolean performFinish() {
// Finish on review page is a shortcut to performing
// the steps.
if (getContainer().getCurrentPage() == reviewPage) {
getContainer().showPage(configPage);
return false;
}
// Does nothing as each step is responsible
// to complete its work when its wizard is
// done.
return true;
}
/**
* Returns the collection of steps for the wizard.
*/
public final WizardStep[] getSteps() {
if (reviewPage != null)
return reviewPage.getSteps();
else
return new WizardStep[0];
}
/**
* Sets the collection of steps for the wizard.
* Ignored if the multi-step review and configure
* pages are not yet created.
*/
public final void setSteps(WizardStep[] steps) {
if (reviewPage != null)
reviewPage.setSteps(steps);
if (configPage != null)
configPage.setSteps(steps);
}
/**
* Sets the multi-step wizard dialog processing this
* wizard.
*/
/* package */void setWizardDialog(MultiStepWizardDialog dialog) {
wizardDialog = dialog;
if (configPage != null)
configPage.setWizardDialog(wizardDialog);
}
}