/*
* 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.ui.IEditorInput;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.IEditorSite;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.forms.widgets.FormToolkit;
import org.eclipse.ui.part.MultiPageEditorPart;
import au.com.langdale.ui.plumbing.ICanRefresh;
/**
* An eclipse multi page editor that is provided with event plumbing.
*/
public abstract class FurnishedMultiEditor extends MultiPageEditorPart implements ICanRefresh {
/**
* The shared form toolkit instance.
*/
private FormToolkit toolkit;
@Override
public void init(IEditorSite site, IEditorInput input) throws PartInitException {
super.init(site, input);
setPartName(input.getName());
toolkit = Assembly.createFormToolkit();
}
public void close() {
getSite().getPage().closeEditor(this, false);
}
public int addPage(IEditorPart editor) {
int ix;
try {
ix = super.addPage(editor, getEditorInput());
} catch (PartInitException e) {
throw new RuntimeException(e);
}
setPageText(ix, editor.getTitle());
return ix;
}
private boolean dirty;
@Override
public boolean isDirty() {
return dirty || super.isDirty();
}
protected void markDirty() {
if( ! dirty ) {
dirty = true;
firePropertyChange(PROP_DIRTY);
}
}
@Override
public void doSave(IProgressMonitor monitor) {
for(int ix = 0; ix < getPageCount(); ix++) {
IEditorPart page = getEditor(ix);
if( page != null)
page.doSave(monitor);
}
if( dirty) {
dirty = false;
firePropertyChange(PROP_DIRTY);
}
}
public void setActivePageByName(String name) {
for(int ix = 0; ix < getPageCount(); ix++) {
if(getPageText(ix).equalsIgnoreCase(name)) {
setActivePage(ix);
return;
}
}
}
public void doRefresh() {
int ix = getActivePage();
if( ix >= 0 ) {
doRefresh(ix);
}
}
private void doRefresh(int ix) {
IEditorPart page = getEditor(ix);
if( page instanceof ICanRefresh) {
ICanRefresh can = (ICanRefresh) page;
can.doRefresh();
}
}
@Override
protected void pageChange(int newPageIndex) {
super.pageChange(newPageIndex);
doRefresh(newPageIndex);
}
@Override
public void doSaveAs() {
// not supported
}
@Override
public boolean isSaveAsAllowed() {
return false;
}
public FormToolkit getToolkit() {
return toolkit;
}
}