Swing/SWT Integration (Albireo)

The project has been created. Please visit the project page.

Introduction

The Swing/SWT Integration (Albireo) project is a proposed project under the Eclipse Technology Project.

This proposal is in the Project Proposal Phase (as defined in the Eclipse Development Process document) and is written to declare its intent and scope. This proposal is written to solicit additional participation and input from the Eclipse community. You are invited to comment on and/or join the project. Please send all feedback to the http://www.eclipse.org/newsportal/thread.php?group=eclipse.technology.albireo newsgroup.

Background

Many adopters of the Eclipse Rich Client Platform (RCP) have a history of developing applications for the AWT and Swing user interface toolkits. These developers often have a rich library of Swing components that have been created over time for use in their applications. These Swing components provide high business value in their specific application domains and have no existing SWT equivalent.It is impractical to expect that such users will be able to convert their Swing component libraries to SWT in their entirety as they begin to adopt the RCP. The component libraries may be very large, and they may not be controlled by the group interested in using the RCP.

So, in order to eliminate the RCP "barriers of entry" and to provide the ability to incrementally convert Swing component libraries to SWT, these users need a way to include their existing Swing components in their SWT-based RCP applications. The inclusion may take the form of:

  • embedding AWT/Swing components in an SWT composite
  • embedding SWT composites in an AWT frame
  • opening a modal Swing dialog from an SWT component
  • opening a modal SWT/JFace dialog from an AWT/Swing component

Since Eclipse 3.0, SWT has provided basic support for integrating SWT with AWT/Swing in the form of the SWT_AWT bridge. The bridge provides the critical infrastructure necessary to integrate the two toolkits, but it takes a very minimalistic approach. The recent Eclipse Corner article on Swing/SWT Integration details a number of additional steps that all applications must take in order to create production-quality integrated applications. These steps include:

  • setting the proper platform look and feel
  • avoiding excessive flicker
  • arranging proper tab traversal among components from both toolkits
  • making dialogs modal across both toolkits
  • handling keystroke contention between the toolkits
  • working around bugs that have amplified effects when the two toolkits are mixed

Without this extra work, the initial "out-of-the-box" experience with the SWT_AWT bridge can be very disappointing to developers. They see Swing components which look unpolished and out of place in the RCP environment. It's easy to conclude that Swing/SWT integration is not truly possible for production-quality applications. In fact, the Official Eclipse 3.0 FAQs book reinforces this concern by claiming the SWT_AWT bridge alone is production-quality only on Windows. Even for those that are aware of the techniques to improve integration, the extra code is tricky to implement and maintain. It requires expertise that is not necessarily available to application developers.

Description

The Albireo project will build on the SWT_AWT bridge to provide more complete Swing/SWT integration. It will include the capabilities in the example code from the Swing/SWT Integration article, and it will improve upon these capabilities to support
  • easier operation in multiple event thread environments
  • more complete multi-platform support (including reduced flicker on Linux/GTK)
  • management of SWT popups on AWT/Swing components
  • integration of cursors between the two toolkits
  • solutions to focus problems on Windows
  • integration of size (layout) management between the two toolkits.

... and hopefully much more. The end result will be a better "out-of-the-box" experience and more credibility for the entire notion of Swing/SWT integration. The additional credibility extends both to developers considering integration and to end users who have concerns about applications that mix the two toolkits.

It will be necessary to implement some portion of this project in platform-specific code. We plan to support at least these platforms:

  • Windows
  • Linux/GTK
  • X11/Motif
  • Mac OS X 10.4

Relationship with other Eclipse Projects

Albireo will be built on top of the SWT component of the Eclipse Platform (especially the SWT_AWT bridge). It may also require JFace from the Platform UI component in order to provide integration at higher levels (such as actions).

Similar to the Nebula project, Albireo will provide custom SWT widgets. Unlike the emulated widgets in the Nebula project, these widgets will need to be partially implemented in a platform-specific way.

Organization

We propose this project as a sub-project the Eclipse Technology Project. Early on, there will be need for the experimentation that an incubation status would allow. As the project matures, it might make sense to consider a merge somewhere into the Eclipse Platform, but only if:
  • there is sufficient interest
  • there is a high-quality implementation for all of the necessary platforms

Proposed initial committers

  • Bruno Haible - ILOG S.A.
  • Gordon Hirsch - SAS Institute, Inc.

Interested parties

The following companies have expressed interest in this project. Key contacts listed.

  • Genuitec, Inc. - Todd Williams (todd@genuitec.com)
  • Instantiations, Inc. - Eric Clayberg (clayberg@instantiations.com)

Code Contributions

SAS Institute, Inc. contributed its Swing/SWT integration code as part of the Eclipse Swing/SWT Integration article. This code would form part of the initial code contribution.

ILOG S.A. will contribute its Swing/SWT integration code to the effort (tentative).