Jump to: navigation, search

Difference between revisions of "Rap10M4 News"

(RAP 1.0 M4 - New and Noteworthy)
Line 62: Line 62:
|-valign="top" align="left"
|-valign="top" align="left"
|width="20%"|'''SWT.CHECK for Table'''
|width="20%"|'''Table enhancements'''
The <code>SWT.CHECK</code> style flag is now understood by the <code>Table</code> widget, along with the necessary methods and events to control and get notified about the checked and grayed state of <code>TableItem</code>s.
The <code>SWT.CHECK</code> style flag is now understood by the <code>Table</code> widget, along with the necessary methods and events to control and get notified about the checked and grayed state of <code>TableItem</code>s.
Multi-selection can now be enabled by passing the <code>SWT.MULTI</code> style flag to the constructor. <code>setSelection(*)</code>, <code>getSelection(*)</code>, <code>select(*)</code> and <code>deselect(*)</code> will respect this flag and allow you to query and manipulate the current selection.
Except for <code>setMovable()</code> (controls whether columns can be reordered) the <code>TableColumn</code> API is now complete.

Revision as of 07:14, 8 June 2007

| RAP wiki home | RAP project home |

RAP 1.0 M4 - New and Noteworthy

Here are some of the more noteworthy things available in milestone build M4 (June 08, 2007) which is soon available for download.


API Documentation

The RWT-API classes now provide Java-Doc comments. These comments are adapted from the SWT library since RWT implements a subset of SWT. The revision of the comments is not completed yet and there may be also some anticipations of implementation details that ment to be available in the 1.0 release. If you find inconsistencies in the docs, please report them to us so that we can resolve them.

Untyped Events

RWT now supports untyped events. Note that this implementation exists for reuse of JFace and Workbench code only. If you write application code we recommend to use the typed events furthermore. Note also that there is still some work to do and that not all of the untyped event fields already provide meaningful values. In particular the doit flag does not work.

FontData, Resource, Device

There are new API-classes in RWT available. Those where needed to ease the takeover of the JFace resource package. The classes are org.eclipse.swt.graphics.FontData, org.eclipse.swt.graphics.Resource and org.eclipse.swt.graphics.Device. Note that the API of org.eclipse.swt.graphics.Font has changed, the field accessors have moved to FontData:

  FontData data = font.getFontData()[ 0 ];
  item.setFont( Font.getFont( data.getName(), 
                              SWT.BOLD ) );
Apartment Threading

RWT simulates the Apartment Threading model of SWT. Because of this Display now provides the methods getThread, syncExcec, asyncExcec and wake. To enable UI-updates that are triggered from asynchronous server threads call org.eclipse.swt.lifecycle.UICallBackUtil.activateUICallBack. Accessing widget methods from non UI-Threads throws a SWTException. If you want to enable UI-updates all the time you may implement the createUI method of IEntryPoint like this:

  public Display createUI() {
    UICallBackUtil.activateUICallBack( getClass().getName() );
    final Display result = PlatformUI.createDisplay();
    PlatformUI.createAndRunWorkbench( result, new DemoWorbenchAdvisor() );
    return result;
qooxdoo 0.7

We switched to version 0.7 of qooxdoo, the underlying JavaScript library of RAP. Even though this is hardly noticeable from the outside, keeping pace with the current development of qooxdoo allows us to benefit from improvements and bug fixes in this library. One such case is the upcoming theme management that builds on top of the reworked theming engine in qooxdoo.


RWT provides a ProgressBar control. It can be used to show the progress of background tasks. You may have a look at the org.eclipse.rap.demo.controls.ProgressBarTab class in the demo plug-in to see how to use it.


Table enhancements

The SWT.CHECK style flag is now understood by the Table widget, along with the necessary methods and events to control and get notified about the checked and grayed state of TableItems.

Multi-selection can now be enabled by passing the SWT.MULTI style flag to the constructor. setSelection(*), getSelection(*), select(*) and deselect(*) will respect this flag and allow you to query and manipulate the current selection.

Except for setMovable() (controls whether columns can be reordered) the TableColumn API is now complete.



Move to JFace 3.3

You're reading it right - JFace 3.3 is here! This time, we used the complete JFace 3.3 codebase and stripped down the things not working (at the moment). As we can't support everything out of the box, here is a short list of things you can now use in your RAP application besides the already known stuff.

  • Action and Contribution infrastructure
  • Dialogs
    • IconAndMessageDialog
    • TrayDialog
    • TitleAreaDialog
    • PopupDialog
    • ErrorDialog
    • MessageDialogWithToggle
    • StatusDialog
    • ProgressIndicator
    • ProgressMonitorDialog
  • Layouts
    • GridDataFactory
  • Resources
    • Color-, Font- and ImageRegistry
  • Viewers
    • ArrayContentProvider
    • DecoratingLabelProvider, ILabelDecorator, LabelDecorator (only text yet)
    • DoubleClickEvent (for Treeviewer)
    • ViewerFilter
  • Wizard framework

There are many more things in the JFace 3.3 codebase - just get it and play around with it. We're open for all bug reports regarding the (new) components.

Note that some of the components (like DoubleClickEvent, ViewerFilter or the Wizard framework) are now part of the demo application.

RAP JFace implementation related to the following packages is excluded:

  • Keys & Bindings
  • Celleditors,
  • Owner Drawing
  • Field Assists

Most of them will follow but there is a need for some new infrastructure first. At the moment, you'll find the Java files of the excluded components but they are commented out to avoid confusion using "Organize Imports" or "Open Type".


RAP Workbench

Support for opening/closing workbench parts

You have now several possibilities to open a new view without initially defining it in your perspective. On the one side, you can use WorkbenchPage#showView("your.view.id") to show the view. All necessary data gets loaded from the server automatically.

Another way is - like you know it from the Eclipse Workbench - to use the "Show View" menu. To implement it in your RAP application, use ContributionItemFactory.VIEWS_SHORTLIST.create(IWorkbenchWindow); to get a list of all view shortcuts of the current perspective which can be used in a MenuManager. But don't forget to add the commonly used views as shortcuts to your perspective (see IPageLayout#addShowViewShortcut("your.view.id")).

For all the views without a shortcut, there is a "Other..." item appended to the end of the list to display the so loved "Show View" dialog where you can browse all available views. HINT: Now you can also categorize your views - just define the category attribute in your view extension.


Move extension points to org.eclipse.ui namespace

To provide as much as possible reuse of RCP knowledge (and code) RAP provides now its workbench extension-points under the same namespace as the RCP workbench does. This is the second step of moving RAP to a subset of RCP regarding RCP-like functionality. Note that you must adjust your existing plugin.xml files like the example below:


Move package org.eclipse.ui.entrypoint to org.eclipse.ui.application

Due to the efforts of making RAP-APIs a subset to RCP-APIs the package org.eclipse.ui.entrypoint has been renamed to org.eclipse.ui.application despite the fact that there is no need for implementing IPlatformRunnable as application definition. Please use the organize import functionality of the Eclipse IDE to adjust your existing source code.

Reexport of UI plug-ins

The plug-in org.eclipse.rap.ui.workbench now reexports the basic UI plug-ins that are needed for RAP UI development. This is similar to RCP. The plug-in dependencies are org.eclipse.rap.w4t, org.eclipse.rap.rwt and org.eclipse.rap.jface.

Standalone Views

The implementation of org.eclipse.ui.IPageLayout has been pursued. It is possible to add standalone views as shown in the code snippet below. The resulting perspective layout with the standalone view on the left hand side can be seen in the screenshot.

public class Perspective implements IPerspectiveFactory {

  public void createInitialLayout(IPageLayout layout) {
    String editorArea = layout.getEditorArea();
    layout.addStandaloneView(NavigationView.ID,  false, IPageLayout.LEFT, 0.25f, editorArea);
    IFolderLayout folder = layout.createFolder("messages", IPageLayout.TOP, 0.5f, editorArea);
    folder.addPlaceholder(View.ID + ":*");


Dynamic part informations

You can now set specific part informations dynamically at runtime. This includes setPartName, setTitle and setTitleToolTip. Please use setPartName for setting the title of your view because setTitle is deprecated and only implemented for compatibility reasons. setContentDescription and setTitleImage are not yet available.

Minor usability improvement

It's now possible to maximize/restore view parts by double-clicking on their corresponding TabItem.

Multiple Views

We added a new method to open views multiple times. Requirement is that the view has the flag allowMultiple set to true. Just use the method showView(viewId, secondaryId, mode) of IWorkbenchPage to show additional instances of a view. Here is a little example:

  public void showAdditionalView(IWorkbenchWindow window) {
    try {
                            "two" ,
                            IWorkbenchPage.VIEW_ACTIVATE );
    } catch (PartInitException e) {



The IWorkbenchBrowserSupport and IWebBrowser interfaces along with a default implementation that meets the minimal requirements have been added to the workbench. This allows you to open URLs in a popup window.


The corresponding extension points org.eclipse.ui.browser.browsers and org.eclipse.ui.browserSupport as provided by RCP are not yet available.

Support for ISharedImages

There is now the possibility to get predefined images of the workbench by using the ISharedImages interface. The usage could look like this:

Views with local pulldown menus

To use the local pulldown menu of your view, simply add the actions to the MenuManager of your ViewSite.


In the end, this could look like this:


Switch to RCP 3.3

With the switch to the RCP 3.3 codebase, there are many improvements on the workbench API. Additionally we now have a fully documented API based on the original javadoc of the Eclipse workbench. Another very nice feature is the support of the command and handler framework (see Platform Command Framework )

Automatic view toolbar arrangement

If there is not enough space left in the TabFolder to show all the view actions, the toolbar is now automatically rearranged to use the full width of the folder.

Perspective extensions

The RAP workbench offers you a new extension point: perspectiveExtensions. With this, you can contribute new views or view shortcuts to existing perspectives across several plug-ins. The extension point makes it easy to contribute additional views from other plug-ins to a perspective defined in your core UI plug-in.

Statusline support

RAP now supports the StatusLine API. Note that the statusline is visible per default. To add e.g. actions to the statusline override the fillStatusLine of your ActionBarAdvisor:

  protected void fillStatusLine( final IStatusLineManager statusLine ) {
    statusLine.add( aboutAction );

To hide the statusline use:

  public void preWindowOpen() {
    IWorkbenchWindowConfigurer configurer = getWindowConfigurer();
    configurer.setShowStatusLine( false );

Platform UI Error Handling

To have an easy way to handle your exceptions during runtime, the Eclipse Platform introduced the Error Handling support. As this is an important part of every application, we now have this feature available in RAP. In order to let the workbench handle your exceptions, use something like the follow:

IStatus s = new Status(IStatus.ERROR, "org.demo", "This should not happen.", new NullPointerException());
StatusManager.getManager().handle(s, StatusManager.SHOW | StatusManager.LOG );

You can specify SHOW, LOG or both. With the SHOW style bit, a nice error dialog will pop up to inform the user about the exception.


The logfile of your application can be found in <working directory>/workspace/.metadata/.log where "working directory" is the directory you specified on the "Arguments" tab of your launch configuration.

Also see Platform UI Error Handling for more information on this topic.

Perspective Switcher

Setting setShowPerspectiveBar( true ); of your IWorkbenchWindowConfigurer will result in something like this:



The RAP workbench has now two new extension points: actionSets and actionSetPartAssociations.

While the first one should be very familiar to RCP developers, the second one provides an infrastructure to bind your action sets to specfic workbench parts. This means you can active / deactive specfic action sets only for specfic parts. See also the extension point description for action sets and the actionSetPartAssociations.

Additionally you can contribute new action sets to existing perspectives with the help of perspectiveExtensions.

Progress Support

The workbench now provides the progress API. Usage examples can be found in the demo plug-in at org.eclipse.rap.demo.actions.JobAction and org.eclipse.rap.demo.actions.JobActionWithDialog. You can find those actions in the RAP demo workbench in the Planning perspective.


When using the progress API you may enable the ProgressIndicator in your WindowAdvisor to show running tasks in the StatusLine:

 public void preWindowOpen() {
   IWorkbenchWindowConfigurer configurer = getWindowConfigurer();
   configurer.setShowProgressIndicator( true );

The standard progress view is also available, you can embed it into your application like this:

           icon= "icons/pview.gif"

Part Listener

You've now the possibility to attach an IPartListener or IPartListener2 to a workbench page to stay informed about all part-related activities like when they're opened, closed, (de)activated or when they become hidden/visible.

Just use IPartService#addPartListener(IPartListener) as the following examples shows it:

IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
window.getActivePage().addPartListener(new IPartListener2() {

	public void partActivated(IWorkbenchPartReference partRef) {
		String partId = partRef.getId());
		// do something useful


The above features are just the ones that are new since the previous milestone build. Summaries for earlier milestone builds:

New for RAP 1.0 milestone build M3 (April 27, 2007)
New for RAP 1.0 milestone build M2 (March 2, 2007)