/*******************************************************************************
 * 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 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();
}
