/*******************************************************************************
 * Copyright (c) 2000, 2003 IBM Corporation and others.
 * All rights reserved. This program and the accompanying materials 
 * are made available under the terms of the Common Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/cpl-v10.html
 * 
 * Contributors:
 *     IBM Corporation - initial API and implementation
 *******************************************************************************/
package org.eclipse.jface.wizard;

import org.eclipse.swt.graphics.Point;

/**
 * A wizard node acts a placeholder for a real wizard in a wizard 
 * selection page. It is done in such a way that the actual creation
 * of a wizard can be deferred until the wizard is really needed.
 * <p>
 * When a wizard node comes into existence, its wizard may or may
 * not have been created yet; <code>isContentCreated</code> can
 * be used to determine which. A node may be asked for its wizard
 * using <code>getWizard</code>, which will force it to be created
 * if required. Once the client is done with a wizard node, its
 * <code>dispose</code>method must be called to free up the wizard;
 * once disposes, the node should no longer be used.
 * </p>
 * <p>
 * This interface should be implemented by clients wishing to
 * support this kind of wizard placeholder in a wizard selection page.
 * </p>
 *
 * @see WizardSelectionPage
 */
public interface IWizardNode {
/**
 * Disposes the wizard managed by this node. Does nothing
 * if the wizard has not been created.
 * <p>
 * This is the last message that should ever be sent to this node.
 * </p>
 */
public void dispose();
/**
 * Returns the extent of the wizard for this node.
 * <p>
 * If the content has not yet been created, calling this method
 * does not trigger the creation of the wizard. This allows
 * this node to suggest an extent in advance of actually creating 
 * the wizard.
 * </p>
 *
 * @return the extent, or <code>(-1, -1)</code> extent is not known
 */
public Point getExtent();
/**
 * Returns the wizard this node stands for.
 * <p>
 * If the content has not been created beforehand, calling this
 * method triggers the creation of the wizard and caches it so that
 * the identical wizard object is returned on subsequent calls.
 * </p>
 *
 * @return the wizard
 */ 
public IWizard getWizard();
/**
 * Returns whether a wizard has been created for this node.
 *
 * @return <code>true</code> if a wizard has been created,
 *   and <code>false</code> otherwise
 */
public boolean isContentCreated();
}
