Eclipse plug-ins, Rich Client Platform



Hasonló dokumentumok
Hová tűnt a sok kereszthivatkozás?

Grafikus felületek készítése 1.

Közösség, projektek, IDE

Széchenyi István Egyetem

Ficsor Lajos Általános Informatikai Tanszék Miskolci Egyetem

Budapes( Műszaki és Gazdaságtudományi Egyetem Méréstechnika és Információs Rendszerek Tanszék. Eclipse Rich AJAX Pla0orm

1. Gyakorlat: Telepítés: Windows Server 2008 R2 Enterprise, Core, Windows 7

A Java EE 5 plattform

Testreszabott alkalmazások fejlesztése Notes és Quickr környezetben

JNDI - alapok. Java Naming and Directory Interface

Komponens alapú fejlesztés

Cloud computing. Cloud computing. Dr. Bakonyi Péter.

Adatbányászat és Perszonalizáció architektúra

JAVA webes alkalmazások

Vizuális, eseményvezérelt programozás I.

10. Gyakorlat: Alkalmazások publikálása Remote Desktop Szervízen keresztül

Cloud computing Dr. Bakonyi Péter.

Teszt topológia E1/1 E1/0 SW1 E1/0 E1/0 SW3 SW2. Kuris Ferenc - [HUN] Cisco Blog -

T Á J É K O Z T A T Ó. A 1108INT számú nyomtatvány a webcímen a Letöltések Nyomtatványkitöltő programok fülön érhető el.

Grafikus felhasználói felületek. Abstract Window Toolkit, a java.awt és java.awt.event csomagok

Broadcast Service Widget

eseményvezérelt megoldások Vizuális programozás 5. előadás

Web-fejlesztés NGM_IN002_1

C++ fejlesztés az ECLIPSE környezetben

MVC Java EE Java EE Kliensek JavaBeanek Java EE komponensek Web-alkalmazások Fejlesztői környezet. Java Web technológiák

4. Gyakorlat: Csoportházirend beállítások

Bevezető. Servlet alapgondolatok

DCOM Áttekintés. Miskolci Egyetem Általános Informatikai Tanszék. Ficsor Lajos DCOM /1

Using the CW-Net in a user defined IP network

SAS Enterprise BI Server

Csatlakozás a BME eduroam hálózatához Setting up the BUTE eduroam network

Tartalom. Történeti áttekintés. Történeti áttekintés Architektúra DCOM vs CORBA. Szoftvertechnológia

Enterprise JavaBeans. Ficsor Lajos Általános Informatikai Tanszék Miskolci Egyetem. Az Enterprise JavaBeans

RIA Rich Internet Application

JavaScript Web AppBuilder használata

Enterprise JavaBeans 1.4 platform (EJB 2.0)

Az IBM WebSphere Multichannel Bank Transformation Toolkit V7.1 felgyorsítja a többcsatornás alkalmazásfejlesztést

Alkalmazásfejlesztés Eclipse RCP használatával

C#, OOP. Osztályok tervezése C#-ban

Web Services. (webszolgáltatások): egy osztott alkalmazásfejlesztési plattform

Mobil Informatikai Rendszerek

1. Ismerkedés a Hyper-V-vel, virtuális gépek telepítése és konfigurálása

Tartalom DCOM. Történeti áttekintés. Történeti áttekintés. Történeti áttekintés. Történeti áttekintés

Java VI. Egy kis kitérő: az UML. Osztály diagram. Általános Informatikai Tanszék Utolsó módosítás:

Szoftver-technológia II. Tervezési minták. Irodalom. Szoftver-technológia II.

Proxer 7 Manager szoftver felhasználói leírás

Viczián István IP Systems JUM XIX szeptember 18.

Java bevezet o Kab odi L aszl o Kab odi L aszl o Java bevezet o

Data Integrátorok a gyakorlatban Oracle DI vs. Pentaho DI Fekszi Csaba Ügyvezető Vinnai Péter Adattárház fejlesztő február 20.

Grafikus keretrendszer komponensalapú webalkalmazások fejlesztéséhez

2. gyakorlat: Tartományvezérlő, DNS, tartományba léptetés, ODJ, Core változat konfigurálása, RODC

Windows hálózati adminisztráció segédlet a gyakorlati órákhoz

Alap számológép alkalmazás

Java Server Pages - JSP. Web Technológiák. Java Server Pages - JSP. JSP lapok életciklusa

Ajax és Echo 2. Bokor Attila

Java I. A Java programozási nyelv

MVC. Model View Controller

Google Web Toolkit. Elek Márton. Drótposta kft.

Madarassy László, mérnök, BME - Mobil Innovációs Központ. lmadarassy@mik.bme.hu

USER MANUAL Guest user

Microsoft SQL Server telepítése

DOAS változások, összefoglaló

CORBA Áttekintés. Mi a CORBA? OMG and OMA. Ficsor Lajos. Miskolci Egyetem Általános Informatikai Tanszék

ANDROID ALKALMAZÁSFEJLESZTÉS

Adatbázis-kezelés ODBC driverrel

Új funkciók az RBP-ben október 1-től New functions in RBP from 1 October Tatár Balázs

Osztott Objektumarchitektúrák

THS710A, THS720A, THS730A & THS720P TekScope Reference

Adatbázis alapú rendszerek gyakorlat Adatbázis alapú alkalmazásfejlesztés Java, C# környezetben

Kommunikációs rendszerek teljesítőképesség-vizsgálata

Excel ODBC-ADO API. Tevékenységpontok: - DBMS telepítés. - ODBC driver telepítése. - DSN létrehozatala. -Excel-ben ADO bevonása

SOPHOS simple + secure. A dobozba rejtett biztonság UTM 9. Kókai Gábor - Sophos Advanced Engineer Balogh Viktor - Sophos Architect SOPHOS

WCF, Entity Framework, ASP.NET, WPF 1. WCF service-t (adatbázissal Entity Framework) 2. ASP.NET kliens 3. WPF kliens

Utolsó módosítás:

Elemi alkalmazások fejlesztése IV. Adatbázis-kezelés ActiveX vezérlıkkel - 1

Utolsó módosítás:

Mobil Informatikai Rendszerek

A J2EE fejlesztési si platform (application. model) 1.4 platform. Ficsor Lajos Általános Informatikai Tanszék Miskolci Egyetem

Flash és PHP kommunikáció. Web Konferencia 2007 Ferencz Tamás Jasmin Media Group Kft

CORBA bevezetés. Paller Gábor Internet és mobil rendszerek menedzselése

MDAC - Microsoft Data Access Components

Adatbázisok webalkalmazásokban

Osztott alkalmazások fejlesztési technológiái Áttekintés

Learn how to get started with Dropbox: Take your stuff anywhere. Send large files. Keep your files safe. Work on files together. Welcome to Dropbox!

Metamodellezés. Simon Balázs BME IIT, 2011.

Construction of a cube given with its centre and a sideline

CTools és Panels pluginok

Miért ASP.NET? Egyszerű webes alkalmazás fejlesztése. Történet ASP ASP.NET. Működés. Készítette: Simon Nándor

Komponensek együttműködése web-alkalmazás környezetben. Jónás Richárd Debreceni Egyetem T-Soft Mérnökiroda KFT

Java-ról Kotlinra. Ekler Péter AutSoft BME AUT. AutSoft

Overview. Service. Application Activity Activity 2 Activity 3. Fragment. Fragment. Fragment. Frag ment. Fragment. Broadcast Receiver

Oracle Containers for Java - j2ee alkalmazás szerver funkciók. Molnár Balázs Oracle Hungary

Debreceni Egyetem Informatikai Kar. Szolgáltatás-orientált programozás az Oracle-ben

Webes alkalmazások fejlesztése 8. előadás. Webszolgáltatások megvalósítása (ASP.NET WebAPI)

Bánsághi Anna 2015 Bánsághi Anna 1 of 31

Szolgáltatás Orientált Architektúra és több felhasználós adatbázis használata OKF keretein belül. Beke Dániel

Több app. Egy kódbázis

Operációs rendszerek. Az X Window rendszer

Adabáziselérés ODBC-n keresztül utasításokkal C#-ban

OOP és UML Áttekintés

Átírás:

Eclipse plug-ins, RCP Eclipse plug-ins, Rich Client Platform

Eclipse Mi az Eclipse? Java IDE, IDE Framework, tools framework, application framework, Open Source enabler, közösség, alapítvány, stb. Eclipse SDK: Platform (http://eclipse.org/platform), Java Development Tools (http://eclipse.org/jdt), Plug-in Development Environment (http://eclipse.org/pde) Eclipse Platform: önmagában is komponensek halmaza, de egy-egy részhalmaz felhasználásával tetszőleges alkalmazások fejleszthetőek. Egy ilyen részhalmaz pl. az Eclipse RCP (Rich Client Platform) Az Eclipse Platform nem csak fejlesztői környezetek kiépítésére alkalmazható, bármilyen alkalmazást ráépíthetünk (pénzügyi alkalmazások, automatizálás, egészségügy stb.). Az Eclipse RCP segítségével készített alkalmazások kiválóan együttműködnek különböző alkalmazás vagy adatbázis szerverekkel és más backend rendszerekkel. Az Eclipse Platform előnye: plug-in rendszer, integrációs pontok. A ráépített alkalmazások együttműködhetnek más Eclipse alapú alkalmazásokkal. Pl. Platform+JDT=Java IDE, Platform+CDT=C/C++ IDE

Eclipse Eclipse: komponensek halmaza IDE komponensek Rich Client Platform (RCP) Eclipse Rich Server Platform (RSP): Update, Equinox

Példa Eclipse modul telepítése Quantum DB http://quantum.sourceforge.net/update-site

Eclipse modulok telepítése http://quantum.sourceforge.net/update-site

Quantum DB http://quantum.sourceforge.net/update-site

Qunatum DB http://quantum.sourceforge.net/update-site

Qunatum DB http://quantum.sourceforge.net/update-site

Eclipse Plug-in Plug-in: az Eclipse platformon belüli legkisebb önállóan fejleszthető/kiadható egység Az egyszerű funkcionalitásokat egy plug-in implementálhatja, a bonyolultabb funkcionalitásokat több plug-in összessége Az Eclipse kernel-en (Platform Runtime) kívül gyakorlatilag mindenik funkcionalitást plug-inok implementálják Plug-inok összekapcsolása és együttműködése: plug-in manifest: mindenik plug-in kiterjesztési pontokat (extension point) deklarál. Más plug-inok ezeken a kiterjesztési pontokon keresztül kapcsolódhatnak (kiterjesztve az illető plug-int). Pl. workbench user preferences extension point) Plug-in manifest: manifest.mf (OSGi manifest a runtime függőségek deklarációja), plugin.xml (a kiterjesztési pontok és kiterjesztések XML alapú leírása)

OSGi Open Services Gateway initiative OSGi Alliance 1999-ben alapított nonprofit szervezet Szolgáltatás orientált, komponens alapú környezet fejlesztők számára, amely szoftverek életciklusának managementjére biztosít standardizált lehetőségeket (elsősorban Java fejlesztések alapjául szolgálhat) Komplex szoftverek jelenleg a fejlesztésben nagyobb hangsúly helyeződik létező modulok beépítésére, létező funkcionalitások integrálására szükséges a standardizálás OSGi technology dynamic module system for Java standard eljárás komplex applikációk fejlesztésére kisebb (újra felhasználható és az együttműködést támogató) modulok integrációjával OSGi Specifications Core: OSGi Framework standardizált környezet a bundle-nek (batyu) nevezett alkalmazások számára L0: Execution Environment (Java environment) L1: Modules (class loading policies) L2: Life Cycle Management (dinamikusan telepíthető, inditható, leállítható, uninstallálható batyuk) L3: Service Registry (dinamikus együttműködési model a bundle-ök részére)

OSGi Standard Services Framework services Permission admin batyuk jogainak adminisztrálása Package admin batyuk export-import függőségi listája Start level URL handler System services Log service a keretrendszer közös naplója Configuration admin service Device access service driverek azonosítása és az azokat implementáló batyuk letöltése User admin service felhasználói információkat tartalmazó adatbázis IO connector service Preferences service Component runtime Deployment admin Event admin Application admin Protocol services HTTP service szervlettek futtatásához UPnP (Universal Plug and Play) service DMT (Device Management Tree) service Miscellaneous services XML parser service Foreign Application Access

OSGi bundle Bundle (batyu) az OSGi alapegysége csomagolási formátumot definiál. A batyu Jáva kódot, statikus erőforrásokat (pl. képek) és leírófájlt (manifest) tartalmaz. Java kódot exportálhat és importálhat, ezt Java csomagonként (package) teszi (megvalósítja a megosztott könyvtár funkcionalitását) futási egységként funkcionálhat (ez nem kötelező). jogok köthetők hozzá életciklusának változásai eseményeket generálnak, amikre más batyuk feliratkozhatnak és követhetik őket. service-eket regisztrálhat. A service service-eket regisztrálhat. A service elválasztja egymástól az interfészt és az implementációt, pl. különböző XML elemzők regisztrálhatnak XML elemző service-eket és a service tulajdonságai alapján lehet kiválasztani a megfelelő service-t, majd a kiválasztás alapján meghívni a szolgáltatást.

OSGi bundle Aktivizáló osztály: public class HelloWorld_Activator implements org.osgi.framework.bundleactivator { public void start(bundlecontext bc) {... } public void stop( BundleContext bc ) {... } } A BundleContext metódusai: Manifest: Bundle-Name: Helloworld Bundle-Version: 1.1 Bundle-Description: Hello, world Bundle-Vendor: FreeWare A keretrendszer eseményeire lehet feliratkozni Service-eket lehet regisztrálni Service-ekhez lehet hozzáférni Új batyukat lehet installálni A már installált batyukat le lehet kérdezni ill. hozzájuk lehet férni Bundle-Copyright: 'Copyleft (c) 1999-2002.' Bundle-Activator: example.osg.helloworld.helloworld_activator Import-Package: org.osgi.service.cm Export-Package: example.osg.exported_package A batyu saját Bundle objektumát meg lehet szerezni. A Bundle objektumon keresztül a batyut el lehet indítani/le lehet állítani, az állapotát le lehet kérdezni, a verzióját frissíteni lehet vagy el lehet távolítani. Hozzá lehet férni a batyuhoz rendelt saját könyvtárhoz. Itt lehet a batyu által írt/olvasott fájlokat tárolni.

OSGi services Szolgáltatás alapú architektúra: a batyuk objektumokat regisztrálhatnak a szolgáltatáskatalógusban (service registry). A regisztrált objektum egy szolgáltatás interfészt kell implementáljon és az objektum ezen interfész nevén kell regisztrálva legyen. Példa: szolgáltatás interfész kódja: public interface ServiceIf { public String message(); public void setmessage( String message ); } A szolgáltatás objektum implementálja ezt az interfészt: public class ServiceObject implements ServiceIf { public String message() {... } public void setmessage( String message ) {... } }

OSGi services A batyu regisztrálja a szolgáltatást (tipikusan a start() metódusban) void start( BundleContext bc ) {... serviceobject = new ServiceObject(); servicedictionary = (Dictionary)new Hashtable(); myserviceregistration = bc.registerservice( } ServiceIf.class.getName(), // szolgáltatásinterfész neve (Object)serviceObject, // maga a szolgáltatásobjektum servicedictionary ); // a szolgáltatás tulajdonságai (most üres)... A szolgáltatást ki kell regisztrálni a katalógusból, ha már nem elérhető (tipikusan a stop() metódusban). myserviceregistration.unregister(); Ha valaki szolgáltatást akar használni, ismernie kell a szolgáltatásinterfész nevét. Ennek alapján a BundleContext két metódusával megszerezhető a szolgáltatás objektuma, amin aztán a szolgáltatás metódusai meghívhatók. BundleContext bc; // Elmenthetı pl. a start metódusban ServiceReference sr = bc.getservicereference( ServiceIf.class.getName() ); ServiceIf so = (ServiceIf)bc.getService( sr ); String s = so.message(); // Szolgáltatás hívása az interfészén keresztül

Equinox Az Eclipse OSGi R4 specifikáción alapuló komponens modellje Komponens == Bundle (batyu) == Plug-in Verzió számmal rendelkező (versioned) Deklaratívan definiált Dinamikus load/unload lehetőséget biztosít Dinamikus install/update lehetőséget biztosít Explicit módon definiál Függőségeket Runtime visibility Kölcsönhatások (kiterjesztési pontok, kiterjesztések) A komponensek interferenciák nélkül integrálhatóak, egymást nem akadályozzák, mivel az egymással nem összefüggő komponenseknek nincsen direkt hozzáférésük egymáshoz

Workbench Alapvető kiterjesztési pontok:

Példa plug-in készítése Hello world plug-in Hello World View az org.eclipse.ui.workbench plug-in definiálja a workbench API publikus interfészeit, ezek az org.eclipse.ui csomagban találhatóak Példánkban az IViewPart interfészt használjuk, és ennek default implementációját a ViewPart osztályt New project Plug-in project Templates Plug-in with a view View Features uncheck all of the boxes (no extra features needed)

HelloWorldView.java package com.example.helloworld; import org.eclipse.swt.widgets.composite; import org.eclipse.swt.widgets.label; import org.eclipse.swt.swt; import org.eclipse.ui.part.viewpart; public class HelloWorldView extends ViewPart { Label label; public HelloWorldView() { } public void createpartcontrol(composite parent) { label = new Label(parent, SWT.WRAP); label.settext("hello World"); } public void setfocus() { // set focus to my widget. //For a label, this doesn't make much sense, but for more complex //sets of widgets you would decide which one gets the focus. } }

HelloWorld manifest plugin.xml <?xml version="1.0" encoding="utf-8"?> <?eclipse version="3.0"?> <plugin> <extension point="org.eclipse.ui.views"> <category name="hello Category" id="com.example.helloworld"> </category> <view name="hello View" icon="icons/sample.gif" category="com.example.helloworld class="com.example.helloworld.helloworldview" id="com.example.helloworld.helloworldview"> </view> </extension> </plugin>

Rich Client A rich client egy alkalmazás ami az operációs rendszernek megfelelő GUI-t és ablakrendszert használja. Alapvető tulajdonságok: Nativ widgets (eszközök) Drag and drop Integration with the platform component model Stb. Standalone Rich Client: Rich user experience Platformfüggetlenség Komponens modell Integrált update mechanizmus Kiterjeszthetőség Two-tier (kétrészes) Rich Client közvetlen kapcsolat egy adatbázissal JDBC hozzáférés az adatbázishoz EMF (Ecipse Modelling Framework) hozzáférés XMI (XML Metadata Interchange) / XML (Extensible Markup Language) adatokhoz Stb.

Rich Client Three-tier Rich Client A business logika egy része távoli rendszeren tárolt Hozzáférés a távoli rendszerhez (web service vagy más mechanizmus) WSDL (Web Service Definition Language) alapú web szolgáltatások, IIOP (Internet Inter-Orb Protocoll), ECF (Eclipse Communication Framework) stb. Kombinált Rich Client Különböző adatforrások A távoli rendszeren tárolt adatok lokális cache-elése offline feldolgozásra

Rich Client or Thin Clients? Thin Client Alkalmi felhasználó, aki nem akar szoftvert installálni Online banking, auction browsing stb. Rich Client Tapasztalt felhasználó (power user), aki megbízható, sok funkcionalitással rendelkező (rich) alkalmazást, felhasználói felszínt szeretne Bank pénztáros, bank manager, stb. Eclipse alapú RC alkalmazás példa: Lotus Notes Hannover

Rich Client Platform A Rich Client Platform használatának előnyei: Általános szolgáltatások Native look and feel Window management Standardizált komponens modell (Equinox) Kiterjeszthetőség (kiterjesztési regiszter) Update manager Eszközök RC alkalmazások fejlesztéséhez A fejlesztő a core alkalmazásra koncentrálhat Nem kell feltalálni a kereket Könnyen megoldható teljesen független komponensek integrációja Különböző komponenseknek megfelelő view-ek megoszthatják a workspace-t A menüket több különböző komponens is feltöltheti Komponensek közötti drag and drop Stb. Az RCP alkalmazások a platformhoz kapcsolódó (plug-in) komponensekből állnak

Eclipse Platform Az Eclipse Platform UI a workbench köré épül, a workbench API alapja két eszköztár: SWT (Standard Widget Toolkit) a native ablakrendszerrel integrált grafikus widget (eszköz) halmaz, ami OS-független API-t biztosít JFace SWT-ben implementált UI eszköztár, ami egyszerűsíti az UI programozást

SWT Egy tipikus különálló (standalone) SWT alkalmazás struktúrája: Létrehoz egy Display objektumot (az SWT session) Létrehoz egy vagy több Shell objektumot (az alkalmazás központi ablaka(i)) A shell-en belül létrehozza a szükséges widget-eket Beállítja a widget-ek állapotát (méret stb.) és hozzájuk rendeli a szükséges esemény figyelőket Megnyitja a shell-t és elindítja az event figyelő ciklust, ami mindaddig fut, ameddig a shell-t be nem zárjuk, majd zárja a display-t public static void main (String [] args) { Display display = new Display (); Shell shell = new Shell (display); Label label = new Label (shell, SWT.CENTER); label.settext ("Hello_world"); label.setbounds (shell.getclientarea ()); shell.open (); while (!shell.isdisposed ()) { if (!display.readanddispatch ()) display.sleep (); } display.dispose (); } Composite widgets Style bits widget-ek tulajdonságai (ált. a konstruktor paraméterei), az SWT osztályban definiált konstansok (mindenik widget részére)

SWT - Controls Control widget, amit bárhol elhelyezhetünk a widget-ek parent/child hierarchiáján belül Az alapvető Control widget-ek az org.eclipse.swt.widgets csomag tartalmazza Widget Browser Button Canvas Caret Combo Composite CoolBar CoolItem ExpandBar ExpandItem Group Label Link List Purpose Control containing a native HTML renderer. Selectable control that issues notification when pressed and/or released. Composite control that provides a surface for drawing arbitrary graphics. Often used to implement custom controls. An i-beam that is typically used as the insertion point for text. Selectable control that allows the user to choose a string from a list of strings, or optionally type a new value into an editable text field. Control that is capable of containing other widgets. Composite control that allows users to dynamically reposition the cool items contained in the bar. Selectable user interface object that represents a dynamically positionable area of a cool bar. Composite control that groups pages that can be shown or hidden by the user with labeled headers. Selectable user interface object corresponding to a header for a page in an ExpandBar. Composite control that groups other widgets and surrounds them with an etched border and/or label. Non-selectable control that displays a string or an image. Selectable control that displays a text with links. Selectable control that allows the user to choose a string or strings from a list of strings.

SWT - Controls Widget Menu MenuItem ProgressBar Sash Scale ScrollBar Shell Slider Spinner TabFolder TabItem Table TableColumn TableItem Text ToolBar ToolItem Tree TreeColumn TreeItem Purpose User interface object that contains menu items. Selectable user interface object that represents an item in a menu. Non-selectable control that displays progress to the user, typically in the form of a bar graph. Used to allow users to resize child widgets by repositioning their dividing line. Selectable control that represents a range of numeric values. Used in a Composite that has V_SCROLL and/or H_SCROLL styles. Window that is managed by the OS window manager. Selectable control that represents a range of numeric values. Selectable control that allows the user to enter and modify numeric values. Composite control that groups pages that can be selected by the user using labeled tabs. Selectable user interface object corresponding to a tab for a page in a tab folder. Selectable control that displays a list of table items that can be selected by the user. Items are presented in rows that display multiple columns representing different aspects of the items. Selectable user interface object that represents a column in a table. Selectable user interface object that represents an item in a table. Editable control that allows the user to type text into it. Composite control that supports the layout of selectable tool bar items. Selectable user interface object that represents an item in a tool bar. Selectable control that displays a hierarchical list of tree items that can be selected by the user. Selectable user interface object that represents a column in a tree. Selectable user interface object that represents a hierarchy of tree items in a tree.

SWT - events Minden eseményhez tartozik egy osztály (XyzEvent) ami az illető eseményről tartalmaz információkat, egy megfelelő listener interface (XyzListener), és annak regisztrálásához szükséges metódus (addxyzlistener). Amennyiben a listener több metódust definiál egy adapter osztály (XyzAdapter) is hozzárendelődik. Az eseményekkel kapcsolatos interfészeket és osztályokat az org.eclipse.swt.events csomag tartalmazza Display display = new Display (); Shell shell = new Shell (display); Label label = new Label (shell, SWT.CENTER);... shell.addcontrollistener (new ControlAdapter () { public void controlresized (ControlEvent e) { label.setbounds (shell.getclientarea ()); } }); Untyped events: Shell shell = new Shell (); Listener listener = new Listener () { public void handleevent (Event e) { switch (e.type) { case SWT.Resize: System.out.println ("Resize received"); break; default: System.out.println ("Unknown event received"); } } }; shell.addlistener (SWT.Resize, listener);

SWT high level events Event Type Description Activate, Deactivate Generated when a Control is activated or deactivated. Arm A MenuItem is armed (highlighted and ready to be selected). Close A Shell is about to close as requested by the window manager. DefaultSelection The user selects an item by invoking a default selection action. (For ex Enter or double click) Dispose A widget is about to be disposed, either programmatically or by user. DragDetect The user has initiated a possible drag operation. EraseItem A TableItem or TreeItem is about to have its background drawn. Expand, Collapse An item in a Tree is expanded or collapsed. Help The user has requested help for a widget. Iconify, Deiconify A Shell has been minimized, maximized, or restored. MeasureItem The size of a custom drawn TableItem or TreeItem is being requested. MenuDetect The user has requested a context menu. Modify The widget's text has been modified. Move, Resize A control has changed position or has been resized, either programmatically or by user. PaintItem A TableItem or TreeItem is about to have its foreground drawn. Selection The user selects an item in the control. SetData Data needs to be set on a TableItem when using a virtual table. Settings An operating system property, such as a system font or color, has been changed. Show, Hide A control's visibility has changed. Traverse The user is trying to traverse out of the control using a keystroke. Verify A widget's text is about to be modified.

SWT low level events Event Type FocusIn, FocusOut KeyDown, KeyUp MouseDown, MouseUp, MouseDoubleClick MouseMove MouseEnter, MouseExit, MouseHover MouseWheel Paint A control has gained or lost focus. Description The user has pressed or released a keyboard key when the control has keyboard focus. The user has pressed, released, or double clicked the mouse over the control. The user has moved the mouse above the control. The mouse has entered, exited, or hovered over the control. The mouse wheel has been rotated. The control has been damaged and requires repainting.

SWT custom widgets Új speciális widge-ek létrehozása: Native implementáció Létező widget-ek kombinálása (a Composite widget felhasználásával) Tetszőleges kirajzolás (a Canvas vagy Composite widget-ek felhasználásával dispose event, paintlistener, redraw metódus) SWT grafika grafikus kontextus: GC (+ Font, FontData, Color, Image, ImageData, ImageLoader, PaletteData stb.) Az SWT kiterjesztések projekt Az SWT már hoz magával custom widget-eket, ezeket az org.eclipse.swt.custom csomag tartalmazza. CBanner CCombo Control Purpose CBanner is used in the workbench to layout the toolbar area and perspective switching toolbar. Similar to Combo, but is vertically resizable allowing it to fit inside table cells. CLabel CTabFolder CTabItem SashForm ScrolledComposite StyledText ViewForm Similar to Label, but supports shortening of text with an ellipsis. Similar to TabFolder, but supports additional configuration of the visual appearance of tabs Selectable user interface object corresponding to a tab for a page in a CTabFolder. Composite control that lays out its children in a row or column arrangement Composite control that scrolls its contents Editable control that allows the user to type text. ViewForm is used in the workbench to position and size a view's label/toolbar/menu local bar.

SWT - layouts Display display = new Display (); Shell shell = new Shell (display); Label label = new Label (shell, SWT.CENTER); shell.addcontrollistener (new ControlAdapter () { public void controlresized (ControlEvent e) { label.setbounds (shell.getclientarea ()); } }); Display display = new Display (); Shell shell = new Shell (display); Label label = new Label (shell, SWT.CENTER); shell.setlayout (new FillLayout ()); Standard SWT layout-ok: Layout FillLayout FormLayout GridLayout RowLayout Purpose Lays out controls in a single row or column, forcing them to be the same size. Using FormAttachments to optionally configure the left, top, right and bottom edges of each child. Positions the children by rows and columns. Places the children either in horizontal rows or vertical columns. Tetszőleges/speciális (custom) layout-ok implementálása: a computesize() és layout() metódusok implementálása

JFace Az SWT-re épülő UI eszköztár, ami komplexebb UI komponenseket és eszközöket tartalmaz, megkönnyítve az UI programozást: Viewers widget-ek feltöltése, rendezés, szűrés, update Actions and contributions user action definiálása Image and font registries UI erőforrások kezelés Dialogs and wizards - komplex felhasználói műveletek kezelése Field assist a felhasználó segítése a formok kitöltésénél (varázslók és dialog ablakok esetében) A workbench által deklarált kiterjesztési pontok nagy része a org.eclipse.jface csomag osztályait felhasználva implementált (de a workbench a JFace-től független)

JFace - Viewers Mindenikhez tartozik egy-egy megfelelő SWT widget gyakorlatilag a vieweek adapterek, amelyek implementálják a widget-ekkel kapcsolatos standard műveleteket ListViewer (SWT List), TreeViewer (SWT Tree), TableViewer (SWT Table, CellEditor, TextCellEditor, CheckboxCellEditor) és text viewer-ek (SWT StyledText) Lista orientált viewer-ek (list, table, tree): az elemeket egy ILabelProvider biztosítja, a felhasználó értesül az elemekkel kapcsolatos eseményekről (kijelölés, változás, stb.), szűrési (ViewerFilter) és rendezési (ViewerSorter) lehetőségek biztosítottak Viewer architektúra Bemeneti (input) elemek A tartalmat ContentProvider-ek szolgáltatják (IContentProvider, ILabelProvider) IColorProvider, IFontProvider, ILabelDecorator, stb. Workbench és viewer-ek: WorkbenchContentProvider, WorkbenchLabelProvider, IWorkbenchAdapter, IProject

JFace Actions and contributions: Az action osztályok lehetővé teszik felhasználói parancsok UI-tól független definiálását, a contribution osztályok feladata a parancsnak (action) megfelelő UI item-ek managelése Egy action (IAction) egy felhasználói parancsnak felel meg, implementálása az Action osztályból történő származtatással történhet (nem az interface közvetlen implementálásával) A felhasználói parancs megjelenésének pillanatában a megfelelő Action run() metódusa hívódik meg About action: public void run() { new AboutDialog(workbenchWindow.getShell()).open(); } Egy contribution (IContribution) egy Action UI rész Long running operations (org.eclipse.jface.operations) Workbench, Platform runtime: Platform runtime: IProgressService, IProgressMonitor JFace: IRunnableWithProgress, IProgressMonitor, IRunnableContext, stb. Field assist Decorated fields Content proposals... autoactivationcharacters = new char[] { '#', '(' }; keystroke = KeyStroke.getInstance("Ctrl+Space"); // assume that mytextcontrol has already been created in some way ContentProposalAdapter adapter = new ContentProposalAdapter( mytextcontrol, new TextContentAdapter(), new SimpleContentProposalProvider( new String [] {"ProposalOne", "ProposalTwo", "ProposalThree"}), keystroke, autoactivationcharacters);