blob: 95655bdb42006e2c67133a0531b2298f488cceca [file] [log] [blame]
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><HTML>
<HEAD>
<meta name="copyright" content="Copyright (c) IBM Corporation and others 2000, 2005. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
<LINK REL="STYLESHEET" HREF="../book.css" CHARSET="ISO-8859-1" TYPE="text/css">
<TITLE>
Multi-page form editors
</TITLE>
</HEAD>
<BODY BGCOLOR="#ffffff">
<H1>
Multi-page form editors</H1>
<p align="left">UI Forms provide a basic support for multi-page editors you can
build on.</p>
<p align="left">You should start building a UI Forms multi-page editor by
extending <code>FormEditor</code>:</p>
<blockquote>
<pre>public class SimpleFormEditor extends FormEditor {
public SimpleFormEditor() {
}
protected FormToolkit createToolkit(Display display) {
// Create a toolkit that shares colors between editors.
return new FormToolkit(ExamplesPlugin.getDefault().getFormColors(
display));
}
protected void addPages() {
try {
addPage(new FreeFormPage(this));
addPage(new SecondPage(this));
addPage(new ThirdPage(this));
addPage(new MasterDetailsPage(this));
addPage(new PageWithSubPages(this));
}
catch (PartInitException e) {
//
}
}
public void doSave(IProgressMonitor monitor) {
}
public void doSaveAs() {
}
public boolean isSaveAsAllowed() {
return false;
}</pre>
</blockquote>
<p>A very simple way to get started is to create pages and add them as above.
Each page need to implement <code>FormPage</code> and override <code>
createFormContent(IManagedForm managedForm)</code> method. Obviously there is a
managed form already created in the page, and you should create contents in the
enclosed form, and also register any form part that needs to be part of the
managed life cycle.</p>
<p>In addition to form pages, you can add one or more text editors as a raw
source alternative to the GUI pages. For this, you should call '<code>addPage(IEditorPart,
IEditorInput input)</code>' method in the superclass.</p>
<h2 align="left">Recommended practices for Eclipse Forms multi-page editors</h2>
<p align="left">There are many ways you can go about writing a form-based
multi-page editor. It mostly depends on the type of content you are editing and
proficiency of your users. There are two ways you can approach it:</p>
<ol>
<li>
<p align="left">If the typical users are using the editor infrequently, raw
source is hard to edit by hand or complex, your users are not very technical
etc., you should make COMPLETE pages that are fully capable of editing every
aspect of the content without the need to turn to the raw source. In this
approach, source page is there only for occasional validation, rather than
for regular work. In that respect, you can get away with a basic text
editor. PDE extension point schema editor falls into this group.</p></li>
<li>
<p align="left">If your users are more technical, have no problem editing
the file by hand but would appreciate some help from time to time, consider
providing a mixed experience - make a good source editor with all the
add-ons like incremental outline, context assist, syntax highlighting etc.
In turn, add complex value-add functionality in the form pages that are hard
to achieve from source. We have learned from experience that it is very hard
to convince seasoned users to switch from source editing if the value-add is
marginal or debatable. However, function that was only available in GUI
pages and was very high-quality was used readily.</p></li>
</ol>
<p align="left">Creating a high quality multi-page editor with mixed GUI and
source pages has its challenges. Accepting that users will switch pages
frequently requires a good model of the underlying content. The model should be
directly tied to the underlying document(s) so that it is in sync both when
users type in the text directly and when they change it structurally through the
GUI pages (don't forget the indirect changes caused by other workbench actions
while the editor is still up).</p>
</BODY>
</HTML>