blob: e1919548ef97609fa77bf794844dd03896361b50 [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;
/**
* AbstractFormPart implements IFormPart interface and can be used as a
* convenient base class for concrete form parts. If a method contains
* code that must be called, look for instructions to call 'super'
* when overriding.
*
* @see org.eclipse.ui.forms.widgets.Section
* @since 3.0
*/
public abstract class AbstractFormPart implements IFormPart {
private IManagedForm managedForm;
private boolean dirty = false;
private boolean stale = true;
/**
* @see org.eclipse.ui.forms.IFormPart#initialize(org.eclipse.ui.forms.IManagedForm)
*/
public void initialize(IManagedForm form) {
this.managedForm = form;
}
/**
* Returns the form that manages this part.
*
* @return the managed form
*/
public IManagedForm getManagedForm() {
return managedForm;
}
/**
* Disposes the part. Subclasses should override to release any system
* resources.
*/
public void dispose() {
}
/**
* Commits the part. Subclasses should call 'super' when overriding.
*
* @param onSave
* <code>true</code> if the request to commit has arrived as a
* result of the 'save' action.
*/
public void commit(boolean onSave) {
dirty = false;
}
/**
* Sets the overall form input. Subclases may elect to override the method
* and adjust according to the form input.
*
* @param input
* the form input object
* @return <code>false</code>
*/
public boolean setFormInput(Object input) {
return false;
}
/**
* Instructs the part to grab keyboard focus.
*/
public void setFocus() {
}
/**
* Refreshes the section after becoming stale (falling behind data in the
* model). Subclasses must call 'super' when overriding this method.
*/
public void refresh() {
stale = false;
// since we have refreshed, any changes we had in the
// part are gone and we are not dirty
dirty = false;
}
/**
* Marks the part dirty. Subclasses should call this method as a result of
* user interaction with the widgets in the section.
*/
public void markDirty() {
dirty = true;
managedForm.dirtyStateChanged();
}
/**
* Tests whether the part is dirty i.e. its widgets have state that is
* newer than the data in the model.
*
* @return <code>true</code> if the part is dirty, <code>false</code>
* otherwise.
*/
public boolean isDirty() {
return dirty;
}
/**
* Tests whether the part is stale i.e. its widgets have state that is
* older than the data in the model.
*
* @return <code>true</code> if the part is stale, <code>false</code>
* otherwise.
*/
public boolean isStale() {
return stale;
}
/**
* Marks the part stale. Subclasses should call this method as a result of
* model notification that indicates that the content of the section is no
* longer in sync with the model.
*/
public void markStale() {
stale = true;
managedForm.staleStateChanged();
}
}