blob: 322aa97823e49991909b2fafc54a327fb924ccd0 [file] [log] [blame]
<div>
<h2>New Minimum Requirements</h2>
<h3>Browser Versions</h3>
<p>
The RAP 3.0 web client will support the following browsers:
</p>
<ul>
<li>Internet Explorer 9 and later</li>
<li>Google Chrome 29 and later</li>
<li>Firefox 23 and later</li>
<li>Safari 6 and later</li>
<li>Microsoft Edge 1.0 and later</li>
<li>Opera 15 and later</li>
<li>iOs 6 and later (Safari)</li>
<li>Android 4 and later (stock browser
(<a href="http://wiki.eclipse.org/RAP/Mobile_Browser">limited)</a> and Chrome)</li>
</ul>
<p>
Dropping support for older browsers allowed us to remove thousands of lines of
JavaScript code and to take more advantage of modern HTML5/CSS3 features.
RAP also used to enable the so-called quirksmode in HTML in order to avoid glitches in old
IE versions. With the end of support for antique browsers, RAP now uses the HTML5
<code>&lt;!DOCTYPE html&gt;</code> declaration that enables standard mode in all browsers.
</p>
<p>
RAP <em>may</em> continue to work in some of the older browser, but not in Internet Explorer 8.
For Windows Vista, IE9 can be manually installed.
For Windows 7, IE10 is installed with Service Pack 1 and IE11 can be installed manually.
Windows 8 has IE10 as it's default browser, which is upgraded to IE11 with Windows 8.1.
If you still target Windows XP, you have to use either Firefox or Google Chrome.
</p>
<h3>Move to Java 7</h3>
<p>
As many other Eclipse projects, we decided to raise the minimal execution environment to Java 7.
Since Jetty 9 and even some parts of Equinox now depend on Java 7, it became almost impossible
to run and test RAP with Java 5.
Moving to Java 7 makes our life easier and allows us to make use of some new features.
With modern JREs being available even for embedded platforms, so we think that we won't
exclude anyone by this move.
</p>
<p>
The Bundle-RequiredExecutionEnvironment (BREE) of all bundles has been updated to <em>JavaSE-1.7</em>.
</p>
<h2>Application Development</h2>
<h3>Removed Deprecated API</h3>
<p>
Deprecated API has been removed in RAP 3.0. We provide
<a href="./migration-guide">migration guide</a> to help you find the proper replacements.
</p>
<h3>New Client Service to Access Startup Parameters</h3>
<p>
In RAP 2.x, you could access URL parameters by calling
</p>
<pre lang="java">RWT.getRequest().getParameter(name); // OLD</pre>
<p>
The problem with this approach was that it only worked in the first request.
Moreover, <code>RWT.getRequest()</code> returns the actual XHR request, not the request that
returned the HTML page. That's why using this method in application code is not recommended.
</p>
<p>
Now there is a client service named <code>StartupParameters</code> that provides access to those
startup parameters. Since this service interface is also implemented by <code>AbstractEntryPoint</code>,
you can access the methods <code>getParameter()</code>, <code>getParameterNames()</code>,
and <code>getParameterValues()</code> directly in your entrypoint:
</p>
<pre lang="java">
public class MyEntryPoint extends AbstractEntryPoint {
@Override
protected void createContents(Composite parent) {
String foo = getParameter("foo");
...
</pre>
<h3>New API for Unit Test</h3>
<p>
When you test your UI components, you have to simulate the environment that RAP UI code
normally runs in (including the UI thread, a UISession, ApplicationContext etc.)
To do so, we provide the bundle <em>org.eclipse.rap.rwt.testfixture</em>.
However, we always claimed that the classes therein were not part the public RAP API.
</p>
<p>
From now on, we provide public API for unit tests in the form of a JUnit Rule.
Instead of calling <code>Fixture.setUp()</code> and <code>Fixture.tearDown()</code>,
you now only need to include the following line in your test cases.
This will simulate a new test context for every test method.
There's also no need to fake the <em>PROCESS_ACTION</em> phase anymore.
</p>
<pre lang="java">
&#064;Rule
public TestContext context = new TestContext();
</pre>
<p>
The class <code>Fixture</code> and all its companions have been moved to the internal package
<em>org.eclipse.rap.rwt.testfixture.internal</em>.
</p>
<h2>Incubator Projects Migrated to RAP Core</h2>
<h3>Nebula Grid</h3>
<p>
The RAP port of the <a href="http://eclipse.org/nebula/widgets/grid/grid.php">Nebula Grid</a>
(including <em>GridViewer</em>) has been moved from the
<a href="http://eclipse.org/rap/incubator/">RAP Incubator</a> to the RAP repository.
It supports a subset of the API from the Grid found in the
<a href="http://eclipse.org/nebula/">Nebula Release</a>, now also including
<em>setAutoHeight</em>. The Nebula Grid also works with RAP specific features such as
<em>RWT.MARKUP_ENABLED</em> and <a href="../2.2/">Row Templates</a>.
</p>
<p>
The Grid is included in the RAP target
platform and can be used simply by importing the <em>org.eclipse.nebula.widgets.grid</em>
package, making it single-sourcing capable. The Nebula Grid ports for RAP 2.x versions will
remain in the Incubator.
</p>
<ul>
<li><b>Why the Grid instead of the NatTable?</b><br/>
The Nebula Grid API is by it's nature much better suited for the RAP architecture than
the NatTable. The Grid is also closer to the SWT Table and Tree, allowing us to use the
same mature JavaScript code for all three widgets.
</li>
</ul>
<h3>FileDialog</h3>
<p>
The file dialog and file upload components have been moved from the
<a href="http://eclipse.org/rap/incubator/">RAP Incubator</a> to the RAP repository.
<em>FileDialog</em> supports SWT single-sourcing and can upload multiple files with a clean user interface.
It now also support file drag and drop.
</p>
<p>
The <em>FileDialog</em> is located in the <em>org.eclipse.rap.filedialog</em> bundle in the RAP target platform.
Older versions of the dialog and upload components for RAP 2.x versions will remain in the Incubator.
</p>
<h2>Widget Set</h2>
<h3>Re-Parenting Support</h3>
<p>
The method <code>Control.setParent()</code> is now fully implemented and will move a control
from one parent to another. To indicate that the re-parenting was successful, the method will
return <code>true</code>. We implemented re-parenting in order to better support the E4 UI.
</p>
<p>
Be aware you must not try to replace the parent of a control that is attached to another widget
using a <code>setControl()</code> method (e.g. a CoolItem, an ExpandItem, or a ScrolledComposite).
Those cases are neither supported by SWT nor by RAP.
</p>
<h3>Badge support</h3>
<p>
TabItem, <em>PUSH</em> Button and <em>PUSH</em> ToolItem now support badges.
</p>
<img class="framed" alt="Badges on TabItems" src="./images/badges.png"/>
<p>
Those badges can be set using a data key:
</p>
<pre lang="java">tabItem.setData( RWT.BADGE, "23" );</pre>
<p>
In TabItem and Button, the badge is overlaying the widget's border and part of the padding/margin areas.
The top padding + border + margin need provide enough space to display the badge, or it will be cut off.
For ToolItem, the badge is placed within the padding area, overlaying part of the content if necessary.
</p>
<img class="framed" alt="Badges on Button" src="./images/badges_push.png"/>
<h3>Support for GC clipping</h3>
<p>
Several clipping methods have been implemented:
</p>
<ul>
<li><code>GC.setClipping( Path )</code></li>
<li><code>GC.setClipping( Rectangle )</code></li>
<li><code>GC.setClipping( int, int, int, int )</code></li>
</ul>
<p>
The implementation utilizes the native HTML canvas clipping capabilities. Once a region is
clipped, all future drawing operations will be limited to the clipped region.
</p>
<p>
<img class="framed" title="Clipping" src="images/gc-clipping.png" />
</p>
<h3>Markup support for Button and Tree/Table ToolTips</h3>
<p>
The <em>Button</em> widget now supports <em>RWT.MARKUP_ENABLED</em>, allowing you to
use an HTML subset in it's text. Also, Tree and Table now fully support
<em>RWT.TOOLTIP_MARKUP_ENABLED</em>. This was previously not the case if
the tooltip text was provided by a <em>ColumnViewer</em>.
</p>
<h3>SWT.RIGHT support for ToolBar</h3>
<p>
In SWT, the text of a ToolItem is placed below the icon by default. If the parent ToolBar is
created with the <code>SWT.RIGHT</code> flag, the text is to the right of the icon.
</p>
<p>
Until now RAP behaved as though <code>SWT.RIGHT</code> was always set on the ToolBar, so it was
not possible to have the text below the icon. Now RAP behaves as SWT does. If your
application has a ToolBar without <code>SWT.RIGHT</code>, text and icon will no longer be
side by side, but on top of each other.
</p>
<h3>SWT.IMAGE_DISABLE and SWT.IMAGE_GRAY support for Images</h3>
<p>
It's now possible to create disabled and grayed images at runtime, using the SWT constants <code>IMAGE_DISABLE</code> and <code>IMAGE_GRAY</code>.
</p>
<pre lang="java">
Image disabled = new Image( display, srcImage, SWT.IMAGE_DISABLE );
Image grayed = new Image( display, srcImage, SWT.IMAGE_GRAY );
</pre>
<h2>Theming</h2>
<h3>Different borders for different edges</h3>
<p>
Until now every edge of a widget in RAP had to have the same border width, style and color.
Now every widget that supports the <em>border</em> shorthand property also supports the
four properties <em>border-left</em>, <em>border-right</em>, <em>border-bottom</em> and
<em>border-top</em>. This enables a number of new design choices, like visually merging
neighbouring widgets.
</p>
<p>
<img class="framed" alt="Merged buttons" src="./images/border.jpg"/><br/>
</p>
<p>
In this case a <em>RowLayout</em> was used with <em>spacing</em> set to 0 and the following
<a href="http://eclipse.org/rap/developers-guide/devguide.php?topic=theming.html#variants">
custom variants</a>:
</p>
<pre lang="css">
Button[PUSH].left {
border-radius: 2px 0px 0px 2px;
border-right: none;
}
Button[PUSH].middle {
border-radius: 0px;
border-left: none;
border-right: none;
}
Button[PUSH].right {
border-radius: 0px 2px 2px 0px;
border-left: none;
}
</pre>
<p>
The <em>Control.getBorderWidth()</em> method will from now on return the biggest width of the
widgets four edges.
</p>
<h3>Hidden Focus Frame</h3>
<p>
The focus frame (represented in the theming by <em>Button-FocusIndicator</em>,
<em>Combo-FocusIndicator</em> and <em>FileUpload-FocusIndicator</em>) will no longer be
visible if the widget is focused by the mouse. Like in MS Windows, it will only be visible when
focused using the keyboard.
</p>
<h3>Modernized Scroll Bars</h3>
<p>
In the default theme the Scroll Bars now have a more modern look and feel.
They are invisible until they are &quot;activated&quot; by the user, which is when the
indicators fade-in to a semi-transparent state.
</p>
<img class="framed" alt="Scrollbars" src="images/scrollbar2.png"/>
<p>
This is achieved with a number of new theming options. The up/down and left/right buttons of scroll bars can now be
hidden by setting the <em>background-image</em> property of <em>ScrollBar-UpButton</em> and
<em>ScrollBar-DownButton</em> to <em>none</em>.The <em>opacity</em> property let's you
make the entire Scroll Bar (semi) transparent, with the content below visible. In addition, the
new <em>active</em> state is used to indicate that the scrollable area is hovered with the mouse,
or that the user is scrolling using the keyboard.
</p>
<p>
<b>If you don't like the new look and feel, don't worry.</b> The business theme makes no changes to
the Scroll Bars, and by making a <a href="/rap/developers-guide/devguide.php?topic=theming.html#primer">theme-contribution</a>
you can easily adjust the opacity for the active and non-active states to be different values
(e.g. &quot;1&quot; for both) and/or change the Scroll Bar background from &quot;transparent&quot; back to
a solid color.
</p>
<h3>TabItem theming enhancements</h3>
<p>
The TabItem has several new theming properties:
</p>
<ul>
<li><em>border</em></li>
<li><em>color</em></li>
<li><em>background-position</em></li>
<li><em>background-repeat</em></li>
<li><em>margin</em></li>
</ul>
<p>
Since <em>border</em> now also allows styling the different edges of the widget, the following
properties have been removed:
</p>
<ul>
<li><em>border-top-color</em></li>
<li><em>border-bottom-color</em></li>
</ul>
<p>
There is also a new state on <em>TabItem</em> that the item is a child of <em>TabFolder</em>
with the <em>SWT.BOTTOM</em> style flag:
</p>
<ul>
<li><em>bottom</em></li>
</ul>
<h3>ToolBar theming enhancements</h3>
<p>
<code>:first</code> and <code>:last</code> states have been added for ToolItem CSS element. This
allows first and last visible ToolItem to have distinct stylings, like different borders. The
ToolBar itself now also supports the <code>[VERTICAL]</code> and <code>[FLAT]</code> selectors.
</p>
<img class="framed" alt="ToolBars with various style flag combinations" src="./images/toolbars.png"/>
<p>
Exploiting some of the new theming features, the <em>ToolBar</em> has a new default look combining all
items to a single visual element. Single items are still distinguishable when hovered with the mouse. The previous
look is also still available, simply by setting the <em>SWT.FLAT</em> style flag.
This flag is used by default in workbench applications, so these will still look the same. The business theme
is also not affected by this change.
</p>
<h3>Scale theming enhancements</h3>
<p>
The Scale widget theming has been enhanced with the following CSS properties and states:
</p>
<ul>
<li><code>background-image</code> property for Scale and Scale-Thumb</li>
<li><code>HORIZONTAL</code>/<code>VERTICAL</code> selectors for Scale and Scale-Thumb</li>
<li><code>hover</code> state for Scale-Thumb</li>
</ul>
<h3>New Element “Widget-Badge”</h3>
<p>
To adjust the look of badges (see above), the <em>Widget-Badge</em> element
can be used. It currently supports the properties <em>font</em>, <em>color</em>,
<em>background-color</em>, <em>border</em> and <em>border-radius</em>.
</p>
<h3>New property <q>text-overflow</q></h3>
<img class="framed" alt="Table items with ellipsis" src="./images/ellipsis.png"/>
<p>
<em>Table</em> and <em>Tree</em> items (and columns as well) now support the property
<em>text-overflow</em>. When set to <em>ellipsis</em>, texts that don't fit into their cell will
end with “…” instead of being cut off.
The default RAP theme already has this setting.
For custom themes, the default value is <em>clip</em>.
</p>
<h3>New "even" state on Combo Items</h3>
<p>
The <em>Combo-List</em> now has an <em>even</em> state, allowing the <em>Combo</em> drop-down
to have alternating background colors.
</p>
<h3>Changes in ProgressBar</h3>
<p>
The ProgressBar has been partially rewritten to use CSS3 properties instead of vector graphics.
As a result, the indicator is now layouted more precisely when the bar is nearly empty or nearly
full, but as a side-effect the <em>ProgressBar-Indicator</em> theming no longer supports the
<em>border</em> property. It was not used by any of the themes included in RAP, so it won't change
how the bar looks by default.
</p>
<h2>RAP Tools</h2>
<h3>Launch RWT application from an ApplicationConfiguration</h3>
<p>
The RWT Launcher now allows you to run an RWT application from its
<em>ApplicationConfiguration</em>. You can do this by specifying the
<em>ApplicationConfiguration</em> class in the launcher main tab, from the file/project context
menu or directly from the editor.
</p>
<img class="framed" alt="RWT Launcher" src="./images/rwt_launcher_app_config.png"/>
</div>