/******************************************************************************* * Copyright (c) 2000, 2016 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 * Patrik Suzzi <psuzzi@gmail.com> - Bug 498814 *******************************************************************************/ 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) */ @Override 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. */ @Override 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. */ @Override 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> */ @Override public boolean setFormInput(Object input) { return false; } /** * Instructs the part to grab keyboard focus. */ @Override public void setFocus() { } /** * Refreshes the section after becoming stale (falling behind data in the * model). Subclasses must call 'super' when overriding this method. */ @Override 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() { if (dirty) { return; } 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. */ @Override 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. */ @Override 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(); } }