eclipse.dk - eclipse rcp under the hood
DESCRIPTION
Denne event er en kombination af en tutorial day og en live demonstration af en "full featured" Eclipse RCP applikation hvor udviklingen kommenteres on-the-fly. Medbring din laptop og prøv selv hvordan man forholdsvis let kan starte en Eclipse RCP applikation. Det er meget vigtigt at du allerede har Eclipse 3.6 installeret på maskinen.Følgende emner vil blive demonstreret / omtalt Eclipse RCP Arkitektur Konfiguration (OSGi console, plugin.xml, manifest.mf...) Packaging Extension Points UI / SWT / JFace Editors / Views Building and TestingTRANSCRIPT
PR0031 - 2010-11-01
Redistribution and other use of this material requires written permission from The RCP Company.
Eclipse RCP Under the Hood
Denne event er en kombination af en tutorial day og en live demonstration af en "full featured" Eclipse RCP applikation hvor udviklingen kommenteres on-the-fly.
Medbring din laptop og prøv selv hvordan man forholdsvis let kan starte en Eclipse RCP applikation. Det er meget vigtigt at du allerede har Eclipse 3.6 installeret på maskinen.
Følgende emner vil blive demonstreret / omtalt
Eclipse RCP ArkitekturKonfiguration (OSGi console, plugin.xml, manifest.mf...)PackagingExtension PointsUI / SWT / JFaceEditors / ViewsBuilding and Testing
PR0029 - 2010-05-31
2
About Me
Tonny Madsen, Founder and Owner of The RCP Company
20 years of experience in system development in major companies 9 years experience as the Systems Architect of an 20+ MLoC project 8 years of experience with Eclipse and Eclipse RCP
Solutions Member of the Eclipse Foundation Chairman of Eclipse.dk Extern Lecturer at IT-University on Model Driven Development and
Domain Specific Languages Regular speaker at EclipseCon, Eclipse Summit, etc
L0001 - 2008-11-27
3
Eclipse Architecture
Goals for the Eclipse architecture Be able to host any number of 3rd party applications Scalability in terms of size and complexity of hosted applications Alignment with native UI look-n-feel
Flexible architecture, structured around Plug-ins – the basic unit of functionality Extension points – the defined interfaces between plug-ins
This architecture allows for Implementation of 3rd party applications on top of the basic platform (Eclipse
RCP) Additional tools to be integrated in the platform Integrated tools to be further extended
L0001 - 2008-11-27
4
EclipsePlatform
Res
ourc
es
Wor
ksp
ace
Hel
p
Upd
ate
Tea
m
Web
Ser
ver
File
syst
ems
Apa
che
Sea
rch
Nav
igat
or
Intr
o
Tex
t E
dito
rs
Eclipse Architectural Components
JDT
CV
S
WT
P
Da
tato
ols
VE
BIR
T
Myl
yn
PD
E
Eclipse RCP
Run-time/OSGi
SWT
JFace
WorkbenchP
refe
renc
es
Jobs
ICU
Com
man
ds
Reg
istr
y
CD
T
L0001 - 2008-11-27
5
The Basic RCP Components
In the Eclipse, everything is a plug-in including the run-time platform itself It is a small kernel that represents the base of the platform Built on top of OSGi
All subsystems built on the run-time platform follows the rules of plug-ins: They are plug-ins themselves
RCP includes: Component Management Resources Management Preferences Workbench (include SWT and JFace)
RCP does not include the following: Update Help This can be included from the Eclipse platform
Eclipse RCP
Run-time/OSGi
SWT
JFace
WorkbenchP
refe
renc
es
Jobs
ICU
Com
man
ds
Reg
istr
y
L0001 - 2008-11-27
6
ApplicationPlatform
Com
m.
Log
ging
Hel
p
Upd
ate
Aut
h.
Aud
itin
g
Apa
che
Intr
o
Your Typical RCP Application
Ba
se
Ad
d-o
n
Ad
d-o
n
Ad
d-o
n
Ad
d-o
n
De
bu
g T
oo
ls
Da
ta M
od
el
Eclipse RCP
Run-time/OSGi
SWT
JFace
WorkbenchP
refe
renc
es
Jobs
ICU
Com
man
ds
Reg
istr
y
Ad
d-o
n
L0001 - 2008-11-27
7
Organizing the Platform
The software of an Eclipse system is based on the following terms: Plug-ins – a plug-in is the basic unit of software Fragments – a fragment is an add-on to an existing plug-in with additional
functionality Features – a feature is a number of plug-ins that is distributed and updated as a
whole Applications – an application is a Java class that implements a specific interface
and is declared as such in the plug-in Products – a product is a set of features or plug-ins along with the appropriate
branding
L0001 - 2008-11-27
8
Extension Points
Describe additional functionality that could be integrated with the platform External tools extend the platform to bring specific functionality Java Development Tooling (JDT) and Plug-in Development Environment (PDE) are
external tools integrated with the platform Extension points are used to
Add an implementation for a generic feature Extend the workbench Extend common object factory
Advantages: Allows for late load and startup of plug-ins Provides a common “registry” for most extensions like views, perspectives, commands,
etc Disadvantages:
Makes it harder to understand flow of control ID Hell!
Extension points may have corresponding API interface Describes what should be provided in the extension
L0001 - 2008-11-27
9
Eclipse RCP
Run-time/OSGi
SWT
JFace
Workbench
Pre
fere
nces
Jobs
ICU
Com
man
ds
Reg
istr
y
The Role of Run-Time/OSGi
Dynamic module system for Java Solves many of the problems of big applications
Late activation of code Multiple versions of the same library
Eclipse is the reference implementation!
L0001 - 2008-11-27
10
Eclipse RCP
Run-time/OSGi
SWT
JFace
Workbench
Pre
fere
nces
Jobs
ICU
Com
man
ds
Reg
istr
y
Workbench
Represents the desktop development environment
It contains set of tools for resource management
It provides common way of navigating through the resources
Multiple workbenches can be opened at the same time in individual windows
L0018 - 2008-11-10
11
Eclipse User Interface Layers
4 Layers: The Eclipse Workbench
Overall look-n-feel JFace
Architecture-independent models SWT
Platform independent API yet rather close to the metal Native widgets
Platform dependent: Windows, Linux, Mac, Unix The “Eclipse User Interface Guidelines” governs the look-n-feel of the workbench
and JFace Consequently (nearly) all Eclipse RCP based applications look the same!
Use the SWT Bible “The Definitive Guide to SWT and JFace” by Robert Harris and Rob Warner
Eclipse RCP
Run-time/OSGi
SWT
JFace
Workbench
Pre
fere
nces
Jobs
ICU
Com
man
ds
Reg
istr
y
L0018 - 2008-11-10
12
SWT and the Native Widgets
SWT is short for ”The Standard Widget Toolkit” SWT is a sub-project of the Eclipse project SWT has a common API on all target platforms – the implementation is different
Base plug-in org.eclipse.swt contains only MANIFEST.MF plus some configuration files
A set of platform specific fragments implements all of SWT org.eclipse.swt.win32.win32.x86 for 32-bit Windows on x86 (not Vista look-n-
feel) org.eclipse.swt.wpf.win32.x86 for Wista look-n-feel for 32-bit Windows on
x86 SWT is a thin layer on top of the native widgets
Windows Mac Motif GTK
SWT can easily be used stand-alone
L0018 - 2008-11-10
13
SWT on Different Platforms
L0018 - 2008-11-10
14
Working with SWT
SWT API is not as regular as Swing The SWT site contains a large repository of “SWT Snippets” that demonstrates most
of the abilities of SWT
To find leaks with graphical resources use sleak
It is possible to integrate SWT and Swing to a very large degree Though expect problems with shortcuts and focus management
L0018 - 2008-11-10
15
SWT Widgets
Basic Button, Combo, Composite, Group, Label, Link, List, Menu, ProgressBar, Shell, Slider, Scale, Spinner, TabFolder, Table, Text, ToolBar, and Tree
Advanced Browser, Canvas, CBanner, CCombo, CLabel, CoolBar, CTabFolder, DateTime, ExpandBar, GLCanvas, Sash, SashForm, ScrolledComposite, StyledText, SWT_AWT, TableCursor, and Tray
Other Sources – e.g. Nebula, Sourceforge.net FormattedText, Gallery, Grid, and many more
The C... versions of Label, Combo and TabFolder are emulated and should normally be avoided if possible
L0018 - 2008-11-10
16
SWT Widgets
L0018 - 2008-11-10
17
The Basic Widget Hierarchy
Widget
Control Menu Item
Button Label Composite List MenuItem TableItem TabItem
Canvas Combo Form OleSiteClient Table, …
L0018 - 2008-11-10
18
The Basic Widget Hierarchy
Widget Top-level abstract super class for all widgets Support for
arbitrary associated data general event management disposal management
Control Top-level abstract super class for controls Support for
foreground, background border content menu focus management layout management – layout, location and size
Composite Control that can contain other controls Support for layout management
A Composite must have a layout manager, or the child widgets will not be shown!
L0018 - 2008-11-10
19
Using SWT Widgets
Common constructor form – e.g. new Text(parent, SWT.PASSWORD) The parent The style argument specifies the basic sub-function of the widget
Use Text controls for data values event when read-only, as this makes it possible to select and copy the value
L0018 - 2008-11-10
20
Using SWT Styles
Second argument of all widget constructions – e.g. new Text(parent, SWT.PASSWORD)
The most use styles are SWT.NONE – no style needed SWT.LEAD, SWT.CENTER, and SWT.TRAIL - the alignment of text in labels, menus
and buttons SWT.ARROW, SWT.CHECK, SWT.PUSH, SWT.RADIO, and SWT.TOGGLE - the sub-type of
a button SWT.PASSWORD - Text is used for password entry SWT.V_SCROLL, SWT.H_SCROLL, and SWT.NO_SCROLL – Table or Tree has vertical,
horizontal or no scroll bar (3.4 and later)
Some special considerations regarding styles Some style arguments cannot be changed once specified in the constructor (e.g. SWT.CHECK for a Button), whereas others can (e.g. SWT.LEAD for Label)
Some style arguments have different meaning for different widgets –e.g. SWT.MULTI for Table and Text
L0018 - 2008-11-10
21
Managing Composites (Composite)
Children are added to a composite during the construction of the children new Text(composite, SWT.BORDER)
Children are retrieved using comp.getChildren()
Children are removed using child.dispose()
Children can be moved in the parent using child.moveAbove(otherChild) child.moveBelow(otherChild)
When a composite is changed, remember to re-layout comp.layout()
Setting the background of children of a composite: comp.setBackgroundMode(SWT.INHERIT_DEFAULT)
L0018 - 2008-11-10
22
SWT Layout Managers
The positioning and sizing of controls in a Composite (and subclasses) is performed using layout managers
SWT includes a rather complete set of standard layout managers FillLayout and RowLayout: layout is a single row or column GridLayout: layout in a grid with size constrains FormLayout: layout in canvas with size and edge-to-edge constrains Most GUI designer can handle these
A new layout manager can be created fairly easily created computeSize: computes the “natural” size of the Composite layout: lays out the controls of the Composite
public abstract class Layout {protected abstract Point computeSize(Composite composite, int wHint, int hHint, boolean flushCache);protected abstract void layout(Composite composite, boolean flushCache);
}
L0018 - 2008-11-10
23
Using the Grid Layout (GridLayout)
Grid Layout is the most used layout manager in Eclipse It works by adding the child widgets to the cells in a grid
Widgets are added in sequence When using a Grid Layout, the parent uses the GridLayout and all children use
GridData
final Composite composite = new Composite(parent, SWT.NONE);final GridLayout gridLayout = new GridLayout(3, false);composite.setLayout(gridLayout);
label = new Label(composite, SWT.NONE);label.setText("Label");
text = new Text(composite, SWT.BORDER);text.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 2, 1));// …
L0018 - 2008-11-10
24
Using the Grid Layout (GridLayout)
The GridLayout class has two arguments numColumns – the number of columns in the grid (defaults to 1) makeColumnsEqualWidth – whether all columns in the grid have equal width
(defaults to false)
L0018 - 2008-11-10
25
Using the Grid Data (GridData)
GridData specifies how a child widget is laid out in the parent grid A GridData holds the following primary information
Grab Excess Space (horizontal and vertical) – describes whether the grid column or row should expand to grad any excess space (defaults to no grab)
Span (horizontal and vertical) – describes the number of cells the widget should span (defaults to 1,1)
Alignment (horizontal and vertical) – placement of widget within the cells – one of SWT.BEGINNING, SWT.CENTER, SWT.END or SWT.FILL (defaults to BEGINNING, BEGINNING)
A GridData also contains information about indentation, minimum size and size hints Don’t use the two-argument constructor!
1,1 2,12,2
C,C F,C
E,E
Horizontal grabNo grab
L0018 - 2008-11-10
26
Layout Managers for Tables and Trees
Tables and Trees have a layout the determine how columns are sized TableLayout
Will only resize the columns the first time! Applied to the Table or Tree
TableColumnLayout Applied to the Composite of the Table or Tree
Column constrains saved as layout.setColumnData(column, constraint) Both layout manager are based on the same column constraint objects:
ColumnPixelData – makes a column a specific width in pixels ColumnWeightData – makes a column a specific percentage of the summed
width
L0018 - 2008-11-10
27
SWT Events
SWT events and listeners exist in two versions: A simple very light-weight version
One event format and listener interface A type-safe version
Multiple event formats and listener interfaces tailored to the specific use The difference is illustrated in the following example
filter.addListener(SWT.KeyDown, new Listener() {public void handleEvent(Event event) {
if (event.type == SWT.KeyDown) {//...
}}
});
filter.addKeyListener(new KeyAdapter() {@Overridepublic void keyPressed(KeyEvent e) {
//...}
});
L0018 - 2008-11-10
28
SWT Events
Key KeyDown, KeyUp, HardKeyDown, HardKeyUp
Mouse MouseDown, MouseUp, MouseMove, MouseEnter, MouseExit, MouseDoubleClick, MouseHover, MouseWheel
Control Paint, Move, Resize, Dispose
Selection Selection, DefaultSelection
Focus FocusIn, FocusOut
Tree and Table Expand, Collapse, EraseItem, MeasureItem, PaintItem
Shell Iconify, Deiconify, Close, Activate, Deactivate
Menu Show, Hide, Arm, MenuDetect
Basic Controls Modify, Verify, SetData, Settings
Drag-n-Drop DragDetect
Misc Help
L0018 - 2008-11-10
29
Lab Exercise
Create a view with the following look using simple SWT controls GridLayout, GridData Label, Text, Button …addSelectionListener(…)
Another extra lab for the fast ones: add “stuff” to the lab to only allow “a” and “b” in the text field and to only allow more “a” than “b”! Use a Verify listener
public class View extends ViewPart {public void createPartControl(Composite parent) {
Composite top = new Composite(parent, SWT.NONE);// Add something here…
}
public void setFocus() {}
}
GridLayout with 2 columns
Label TextFILL aligned + grab
Buttonspans two columns, RIGHT alignedSelectionListener that prints current text of Text control
L0018 - 2008-11-10
30
Forms UI
A newer addition of the look-n-feel of the Eclipse workbench is the Forms UI in org.eclipse.ui.forms.
Provide a Web browser like look-n-feel to forms
PDE is a good example of the increasing use of this new technology
Have some of the same problems as seen in ordinary Web applications: extensive use of the mouse! Normally not welcome in office applications
L0018 - 2008-11-10
31
More Information
“Eclipse User Interface Guidelines: Version 2.1” http://www.eclipse.org/resources/resource.php?id=162
The Look-n-Feel guidelines for Eclipse – heavily influenced by the corresponding Microsoft Windows Look-n-Feel guidelines
SWT home http://www.eclipse.org/swt/
SWT versus Swing http://www.developer.com/java/other/article.php/2179061
“Using SwingRCP (instead of SWT) in RCP” http://www.eclipsezone.com/eclipse/forums/t104467.rhtml
A discussion of different ways to integrate Eclipse RCP and Swing “The Definitive Guide to SWT and JFace” by Robert Harris and Rob Warner (ISBN:
978-1590593257) As it says – “The Definitive Guide…” – and needed due to the pure javadoc of
SWT “SWT Snippet” Repository
http://www.eclipse.org/swt/snippets/ A large repository of sample code for most uses of SWT!
L0018 - 2008-11-10
32
More Information
“Plug a Swing-based development tool into Eclipse” http://www-128.ibm.com/developerworks/opensource/library/osswing/
“Eclipse Forms: Rich UI for the Rich Client” http://www.eclipse.org/resources/resource.php?id=140
“Custom Drawing Table and Tree Items” http://www.eclipse.org/resources/resource.php?id=122
“Using Images in the Eclipse UI” http://www.eclipse.org/resources/resource.php?id=236
“Rich clients with the SWT and JFace” http://www.javaworld.com/javaworld/jw-04-2004/jw-0426- swtjface.html?page=2
“SWT: The Standard Widget Toolkit” http://www.eclipse.org/resources/resource.php?id=241
“Understanding Layouts in SWT” http://www.eclipse.org/resources/resource.php?id=242
A good overview of the different basic layouts in Eclipse.
L0018 - 2008-11-10
33
More Information
“Drag and Drop in the Eclipse UI” http://www.eclipse.org/resources/resource.php?id=202
“Adding Drag and Drop to an SWT Application” http://www.eclipse.org/resources/resource.php?id=200
“Eclipse Data Binding Test Drive” (webinar) http://www.eclipse.org/resources/resource.php?id=299
“Swing/SWT Integration” http://www.eclipse.org/resources/resource.php?id=381
“Eclipse Forms: Rich UI for the Rich Client” http://www.eclipse.org/articles/Article-Forms/article.html
The Forms UI explained with some good examples