blob: 746f07541e56968fefdcaad4592f859dd8b22356 [file] [log] [blame]
<div id="midcolumn">
<h3>Sapphire - develop UI without wiring individual widgets</h3>
<div id="introText">
<p>Little has changed in the way Java desktop UI is written since the original Java release.
Technologies have changed (AWT, Swing, SWT, etc.), but fundamentals remain the same. The developer
must choose which widgets to use, how to lay those widgets out, how to store the data being edited
and how to synchronize the model with the UI. Even the best developers fall into traps of having UI
components talk directly to other UI components rather than through the model. Inordinate amount of
time is spent debugging layout and data-binding issues.</p>
<p>Sapphire aims to raise UI writing to a higher level of abstraction. The core premise is that the
basic building block of UI should not be a widget (text box, label, button, etc.), but rather
a property editor. Unlike a widget, a property editor analyzes metadata associated with a given
property, renders the appropriate widgets to edit that property and wires up data binding. Data is
synchronized, validation is passed from the model to the UI, content assistance is made
available, etc.<p>
<p>This fundamentally changes the way developers interact with a UI framework. Instead of writing
UI by telling the system how to do something, the developer tells the system what they intend to
accomplish. When using Sapphire, the developer says "I want to edit LastName property of the
person object". When using widget toolkits like SWT, the developer says "create label, create
text box, lay them out like so, configure their settings, setup data binding and so on". By the
time the developer is done, it is hard to see the original goal in the code that's produced. This
results in UI that is inconsistent, brittle and difficult to maintain.</p>
<p><a href="images/screenshot-1.png"><img src="images/screenshot-1.png"/></a></p>
<div id="feature_1">
<h4>First, The Model</h4>
<p>Describe semantics of the data that UI will edit using Java annotations. Model implementation
classes are generated on the fly. More details in <a href="documentation/introduction">documentation</a>.</p>
<div id="feature_2">
<h4>XML Binding</h4>
<p>Use included XML binding facilities to describe how model should read and write data
from XML. Take advantage of integration with WTP XML edtior to create sophisticated multi-page
editors with live bi-directional synchronization between design and source views.</p>
<div id="feature_3">
<h4>Layer Models</h4>
<p>Combine information from multiple models into an integrated model. Bring together information
from many files.<br/><br/><br/><br/><br/><br/></p>
<div id="feature_4">
<h4>Next, The UI</h4>
<p>Describe how to present the model in UI in via a simple XML file and let Sapphire handle
the rest. Embed Sapphire UI anywhere you can create an SWT control. Editors, views, wizards,
dialogs, etc. all can benefit from Sapphire.<p>
<div id="feature_5">
<h4>Stuff to Forget About</h4>
<p>Start making a list of stuff that you can now forget about...</p>
<li>Creating and laying out widgets.</li>
<li>SWT listeners, events and how not to end up in an infinite loop.</li>
<li><a href="">JFace Data Binding</a></li>
<div id="feature_6">
<h4>Other UI Toolkits</h4>
<p>Currently only SWT presentation is available, but Sapphire UI definitions are not tied to
a particular toolkit. Other presentations such as Swing, HTML or Flash are possible in the future
either from this project directly or from adopters.<p>
<div id="rightcolumn">
<center><img src="" border="0" alt="Sapphire Logo"/></center>