blob: 438e51600c8d44155826e211a6c50935197910ce [file] [log] [blame]
/*******************************************************************************
* 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.ui.forms;
/**
* Classes that implement this interface can be added to the managed
* form and take part in the form life cycle. The part is initialize
* with the form and be asked to accept focus. The part can receive
* form input and can elect to do something according to it (for
* example, select an object that matches the input).
* <p>The form part has two 'out of sync' states in respect to
* the model(s) that feed the form: <b>dirty</b> and <b>stale</b>.
* When a part is dirty, it means that the user interacted with
* it and now its widgets contain state that is newer than the
* model. In order to sync up with the model, 'commit' needs to
* be called. In contrast, the model can change 'under' the form
* (as a result of some actions outside the form), resulting
* in data in the model being 'newer' than the content presented
* in the form. A 'stale' form part is brought in sync with the
* model by calling 'refresh'. The part is responsible to notify
* the form when one of these states change in the part. The
* form reserves the right to handle this notification in the
* most appropriate way for the situation (for example, if
* form is in a page of the multi-page editor, it may do
* nothing for stale parts if the page is currently not showing).
* <p>When form is disposed, each registered part is disposed
* as well.
* Parts are responsible for releasing any system resources
* they created and for removing themselves as listeners
* from all event providers.
* @see IManagedForm
* @since 3.0
*
*/
public interface IFormPart {
/**
* Initializes the part.
*
* @param form the managed form that manages the part
*/
void initialize(IManagedForm form);
/**
* Disposes the part allowing it to release allocated resources.
*/
void dispose();
/**
* Returns true if the part has been modified with respect to
* the data loaded from the model.
* @return true if the part has been modified with respect to
* the data loaded from the model
*/
boolean isDirty();
/**
* If part is displaying information loaded from a model, this method
* instructs it to commit the new (modified) data back into the model.
*
* @param onSave
* indicates if commit is called during 'save' operation or for
* some other reason (for example, if form is contained in a
* wizard or a multi-page editor and the user is about to leave
* the page).
*/
void commit(boolean onSave);
/**
* Notifies the part that an object has been set as overall form's input.
* The part can elect to react by revealing or selecting the object, or do
* nothing if not applicable.
* @return <code>true</code> if the part has selected and revealed
* the input object, <code>false</code> otherwise.
*/
boolean setFormInput(Object input);
/**
* Instructs form part to transfer focus to the widget that should has
* focus in that part. The method can do nothing (if it has no widgets
* capable of accepting focus).
*/
void setFocus();
/**
* Tests whether the form part is stale and needs refreshing.
* Parts can receive notification from models that will make
* their content stale, but may need to delay refreshing
* to improve performance (for example, there is no
* need to immediately refresh a part on a form that is
* current on a hidden page).
* <p>It is important to differentiate 'stale' and 'dirty'
* states. Part is 'dirty' if user interacted with
* its editable widgets and changed the values. In contrast,
* part is 'stale' when the data it presents in the widgets
* has been changed in the model without direct user
* interaction.
* @return <code>true</code> if the part needs refreshing,
* <code>false</code> otherwise.
*/
boolean isStale();
/**
* Refreshes the part completely from the information freshly
* obtained from the model. The method will not be called
* if the part is not stale. Otherwise, the part is
* responsible for clearing the 'stale' flag after refreshing
* itself.
*/
void refresh();
}