blob: ddc63887dd4a7f60964973a77ec6d25a156dcbd4 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2001, 2006 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.views.properties.tabbed;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.IWorkbenchPart;
/**
* Represents a section of properties for a given input.
* <p>
* The lifecycle of an ISection is as follows:
* <ul>
* <li><code>ISection.createControls()</code></li>
* <li><code>ISection.setInput()</code></li>
* <li><code>ISection.aboutToBeShown()</code></li>
* <li><code>ISection.refresh()</code></li>
* <li><code>ISection.aboutToBeHidden()</code></li>
* <li><code>ISection.dispose()</code></li>
* </ul>
* </p>
* <p>
* Implementors of this class should be aware that a section instance might be
* reused for different input objects (as long as they are valid section
* inputs). It means that <code>ISection.setInput</code> can be called at any
* time between <code>ISection.createControls</code> and
* <code>ISection.dispose</code>.
* </p>
* <p>
* When an input change event occurs, such as a tab selection or a workbench
* selection change, an ISection is sent:
* <ul>
* <li><code>ISection.setInput()</code></li>
* <li><code>ISection.refresh()</code></li>
* </ul>
* </p>
* <p>
* When an part activation event occurs, such as the contributor part activation
* event, an ISection is sent:
* <ul>
* <li><code>ISection.setInput()</code></li>
* <li><code>ISection.aboutToBeShown()</code></li>
* <li><code>ISection.refresh()</code></li>
* <li><code>ISection.setInput()</code></li>
* <li><code>ISection.refresh()</code></li>
* </ul>
* This is because both a tab selection event and an input selection event have
* occurred.
* </p>
* <p>
* This interface should not be extended or implemented. New section instances
* should be created using <code>AbstractPropertySection</code>.
* </p>
* @see org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetPage
*
* @author Anthony Hunter
*/
public interface ISection {
/**
* Creates the controls for the section.
* <p>
* Clients should take advantage of the widget factory provided by the
* framework to achieve a common look between property sections.
* </p>
* @see org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetPage#getWidgetFactory()
*
* @param parent
* the parent composite for the section.
* @param tabbedPropertySheetPage
* the tabbed property sheet page.
*/
public abstract void createControls(Composite parent,
TabbedPropertySheetPage tabbedPropertySheetPage);
/**
* Notifies the section that the workbench selection has changed.
* @param part The active workench part.
* @param selection The active selection in the workbench part.
*/
public abstract void setInput(IWorkbenchPart part, ISelection selection);
/**
* Notifies the section that its controls are about to be shown. It is
* expected that sections enable domain related functions in this method,
* most commonly add listeners.
* <p>
* Since the controls are not visible, the section should wait for the
* refresh() before updating the section controls.
* </p>
*/
public abstract void aboutToBeShown();
/**
* Notifies the section that its controls are about to be hidden. It is
* expected that sections disable domain related functions in this method,
* most commonly remove listeners.
*/
public abstract void aboutToBeHidden();
/**
* Dispose this section.
*/
public abstract void dispose();
/**
* Returns the minimum height needed by this section. A return value of
* <code>SWT.DEFAULT</code> indicates that no minimum height is defined.
*
* @return the minimum height needed by this section.
*/
public abstract int getMinimumHeight();
/**
* Determine whether this section would like extra height space in case
* there is some left. Normally this is true when the section is the last to
* be displayed on a tab or is the only section on a tab.
* @return <code>true</code> if this section would like extra height space.
*/
public abstract boolean shouldUseExtraSpace();
/**
* Refresh the contents of the controls displayed in this section.
*/
public abstract void refresh();
}