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