/*
* This software is Copyright 2005,2006,2007,2008 Langdale Consultants.
* Langdale Consultants can be contacted at: http://www.langdale.com.au
*/
package au.com.langdale.ui.builder;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.IEditorSite;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.forms.widgets.FormToolkit;
import org.eclipse.ui.forms.widgets.ScrolledForm;
import org.eclipse.ui.part.EditorPart;
import au.com.langdale.ui.plumbing.ICanRefresh;
import au.com.langdale.ui.plumbing.Observer;
/**
* An eclipse editor that is provided with an <code>Assembly</code> and event plumbing.
*/
public abstract class FurnishedEditor extends EditorPart implements Observer, ICanRefresh {
private boolean dirty;
public FurnishedEditor() {
super();
}
public FurnishedEditor(String name) {
super();
setPartName(name);
}
@Override
public void init(IEditorSite site, IEditorInput input) throws PartInitException {
setSite(site);
setInput(input);
}
@Override
public void doSave(IProgressMonitor monitor) {
if( dirty) {
dirty = false;
firePropertyChange(PROP_DIRTY);
}
}
@Override
public void doSaveAs() {
// not used
}
@Override
public boolean isDirty() {
return dirty;
}
@Override
public boolean isSaveAsAllowed() {
return false;
}
@Override
public final void createPartControl(Composite parent) {
content = createContent();
content.realise(parent, content.define());
content.addBindings();
content.doRefresh();
ScrolledForm form = content.getForm();
if( form != null && form.getText().length() == 0)
form.setText(getTitle());
}
@Override
public void setFocus() {
// TODO Auto-generated method stub
}
public void markDirty() {
if( ! dirty ) {
dirty = true;
firePropertyChange(PROP_DIRTY);
}
}
public void markValid() {}
public void markInvalid(String message) {}
public void doRefresh() {
if( content != null)
content.doRefresh();
}
protected abstract class Content extends Assembly {
public Content(FormToolkit toolkit, boolean trackDirtyState) {
super(toolkit, trackDirtyState? FurnishedEditor.this: null, true);
}
public Content(FormToolkit toolkit) {
this(toolkit, true);
}
protected abstract Template define();
protected void addBindings() {}
}
private Content content;
protected abstract Content createContent();
}