Budapest University of Technology and Economics Fault-tolerant Systems Research Group Nyílt Fejlesztőrendszerek Graphical Editing Framework.

Slides:



Advertisements
Hasonló előadás
C# nyelvi áttekintő A „Programozás C# nyelven (Illés Zoltán)”
Advertisements


A kétdimenziós tömbök Páll Boglárka. Ismétlés: Az egydimenziós tömbök  Meghatározás: A tömb egy olyan összetett adatszerkezet amely több rögzített számú,
Kétharmad, háromnegyed, négyötöd: mindenki olvas újságot
II. Grafikus felhasználói interfész
1. foreach( fejlesztő in Lurdyház ) { fejlesztő.Agy. Delete If( delegate ( Content c ) { return c.ContainsAny( „Win32 / User32.dll”, „GDI”,„GDI+”,„WindowsForms”,
3 5 6 Application Services Deployment Services Databinding USER INTERFACE SERVICES XAML Accessibility Property System Input & Eventing BASE SERVICES.
MATEMATIKA Év eleji felmérés 3. évfolyam
Messages Szöveg A A B B C C A A B B C C A A B B C C Endpoint.
2 3.NET Framework 3.0 Visual Studio Extensions for WF Visual Studio Extensions for WCF/WPF CTP ASP.NET AJAX 1.0 Ajax Toolkit.NET Framework 3.5 Visual.
Elektromos mennyiségek mérése
Az új történelem érettségiről és eredményeiről augusztus Kaposi József.
Budapest University of Technology and Economics Fault-tolerant Systems Research Group Nyílt fejlesztőrendszerek Felhasználói felületek Balogh András.
Budapest University of Technology and Economics Fault-tolerant Systems Research Group Nyílt Fejlesztőrendszerek Plugin fejlesztés.
Budapest University of Technology and Economics Fault-tolerant Systems Research Group Nyílt Fejlesztőrendszerek Domain specifikus nyelvek Eclipse Modeling.
Budapest University of Technology and Economics Fault-tolerant Systems Research Group BIRT, Szerveroldali Eclipse, TPTP, Subversive Balogh András.
Az IBM SPSS Statistics programrendszer Gazdaságinformatikus MsC.
Utófeszített vasbeton lemez statikai számítása Részletes számítás
Basics A few things one must know. Slides Insert a title slide Put a title on it.
© Kozsik Tamás Beágyazott osztályok A blokkstrukturáltság támogatása –Eddig: egymásba ágyazható blokk utasítások Osztálydefiníciók is egymásba.
TRANZIENS ADATTÁROLÁS State objektum Egy alkalmazásszintű gyűjtemény (Dictionary), mely Tombstone esetén megőrzi tartalmát a memóriában kulcs/érték párokként.
A tételek eljuttatása az iskolákba
VÁLOGATÁS ISKOLÁNK ÉLETÉBŐL KÉPEKBEN.
1. IS2PRI2 02/96 B.Könyv SIKER A KÖNYVELÉSHEZ. 2. IS2PRI2 02/96 Mi a B.Könyv KönyvelésMérlegEredményAdóAnalitikaForintDevizaKönyvelésMérlegEredményAdóAnalitikaForintDeviza.
Delegátumok C#-ban Krizsán Zoltán iit 1.0.
Oracle multimédia Kiss Attila Információs Rendszerek Tanszék
Kutyafajták Retrieverek Készítette: Bak Barna József
Sárgarépa piaca hasonlóságelemzéssel Gazdaság- és Társadalomtudományi kar Gazdasági és vidékfejlesztési agrármérnök I. évfolyam Fekete AlexanderKozma Richárd.
NOVÁK TAMÁS Nemzetközi Gazdaságtan
VFP xBase adatkezelés - munkaterületek - DML - DDL - navigáció - eljárások, függvények - vezérlési szerkezetek - változók - képernyő IO - mintaprogram.
DRAGON BALL GT dbzgtlink féle változat! Illesztett, ráégetett, sárga felirattal! Japan és Angol Navigáláshoz használd a bal oldali léptető elemeket ! Verzio.
PHP VI Adatbázisok, MySQL
PHP V Osztályok, Objektumok. Osztály class Person { var $name; // tulajdonság, változó function getName() { // metódus, tagfüggvény return $this->name;
„MICROSOFT IT ÜZLETI INTELLIGENCIA MEGOLDÁS BEMUTATÓ” Avagy az IT adat vizualizációs lehetőségi egyéb szervezeti egységek felé („ablak” a nagyvilágra)
Windows Server 2008 { PowerShell }
szakmérnök hallgatók számára
Tervminták megvalósítása B formális nyelven Papp Olga Vadász Péter Témavezető: Fóthi Ákos egyetemi tanár.
Tervminták megvalósítása B formális nyelven Papp Olga Vadász Péter.
Gábor Dénes Főiskola (IAI)Programozási technológia (Java) - III. / 1 13.Állományok, bejegyzések 14.Folyamok 15.Közvetlen hozzáférésű állomány.
Logikai szita Izsó Tímea 9.B.
Budapest University of Technology and Economics Fault-tolerant Systems Research Group Nyílt Fejlesztőrendszerek JFace.
Budapest University of Technology and Economics Fault-tolerant Systems Research Group Nyílt Fejlesztőrendszerek SWT haladó komponensek.
Nyílt fejlesztőrendszerek Graphical Editing Framework.
Budapest University of Technology and Economics Fault-tolerant Systems Research Group Nyílt Fejlesztőrendszerek JFace.
2007. május 22. Debrecen Digitalizálás és elektronikus hozzáférés 1 DEA: a Debreceni Egyetem elektronikus Archívuma Karácsony Gyöngyi DE Egyetemi és Nemzeti.
7. Házi feladat megoldása
Könyvtár, csomag és alprogramokVHDL Könyvtár, csomag és alprogram n Library és use n Package n Alprogramok –Procedure –Function –Resolution function Egy.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
DirectX9 empty project Szécsi László. Project létrehozása Microsoft DirectX SDK (August 2008) telepítése Start Menu \ Microsoft DirectX SDK (August 2008)\
V. labor Thread, animáció. Animáció A figurák a lépés kijelölése után nem rögtön az új helyen teremnek, hanem egyenes vonal mentén mozognak a cél felé.
SzgLab 3. Java. I. labor Alapok, OOP váz, megjelenítés konzolon.
II. labor Lépések kezelése. Új metódus a Square osztályba public static int letterToFileIndex(char letter) throws NumberFormatException { int i = 0; for.
III. labor AWT, eseménykezelés Applet. Új class: ButtonView import java.awt.*; import java.awt.event.*; import java.util.LinkedList; public class ButtonView.
User interface Szécsi László. Egg projectben DXUTgui.cpp – CDXUTDialogResourceManager::CDXUTDialogReso urceManager() m_SpriteBufferBytes11 = 0; ezt kihagyták,
Domain names and DNS Félegyházi Márk Laboratory of Cryptography and System Security (CrySyS) Budapest University of Technology and Economics Department.
50).6-os szint végponti fejtési üreg bejárata
A klinikai transzfúziós tevékenység Ápolás szakmai ellenőrzése
SPSS Predictive Applications Cseh Zoltán Budapest április 20.
Budapest University of Technology and Economics Fault-tolerant Systems Research Group Eclipse alapú technológiák JFace Balogh András.
HTTP kommunikáció Androidon HttpClient-en keresztűl HttpPost/HttpGet objektum használatával HttpClient execute metódusának meghívása.
QualcoDuna interkalibráció Talaj- és levegövizsgálati körmérések évi értékelése (2007.) Dr. Biliczkiné Gaál Piroska VITUKI Kht. Minőségbiztosítási és Ellenőrzési.
© 2013, LogMeIn, Inc. | The Capability Cloud TM Git használata Visual Studio-ból.
SpecificationWebStandardEnterpriseDatacenterItaniumFoundation X64 Sockets44864  1 IA64 Sockets  64  X64 RAM32 GB 2 TB  8 GB IA64 RAM 
1. Melyik jármű haladhat tovább elsőként az ábrán látható forgalmi helyzetben? a) A "V" jelű villamos. b) Az "M" jelű munkagép. c) Az "R" jelű rendőrségi.
Topográfiai gyakorlatok Magyarország
> aspnet_regiis -i 8 9 TIPP: Az „Alap” telepítés gyors, nem kérdez, de később korlátozhat.
A KÖVETKEZŐKBEN SZÁMOZOTT KÉRDÉSEKET VAGY KÉPEKET LÁT SZÁMOZOTT KÉPLETEKKEL. ÍRJA A SZÁMOZOTT KÉRDÉSRE ADOTT VÁLASZT, VAGY A SZÁMOZOTT KÉPLET NEVÉT A VÁLASZÍV.
1 Az igazság ideát van? Montskó Éva, mtv. 2 Célcsoport Az alábbi célcsoportokra vonatkozóan mutatjuk be az adatokat: 4-12 évesek,1.
Programozás III SWING. SWING ALKALMAZÁSOK (ISM.) Swing felületű, eseményvezérelt alkalmazás létrehozása: 1.JFrame alapú osztály létrehozása Szerepe: vezérlés.
Szövegszerkesztési alapfogalmak
Előadás másolata:

Budapest University of Technology and Economics Fault-tolerant Systems Research Group Nyílt Fejlesztőrendszerek Graphical Editing Framework

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 2 GEF célja  Grafikus szerkesztőprogramok  Integráció az Eclipse környezetbe  Tetszőleges modell megjelenítése  Magas absztrakciós szint

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 3 Példa

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 4 GEF felépítése  Interakció (MVC)  Modell  nézet leképzés  Eclipse integráció  Megjelenítés  Elemek elrendezése  Nagyítás  Natív (SWT) réteg

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 5 MVC séma  Modell – Nézet – Vezérlő  Adatok tárolása és megjelenítése külön  Modell: adatok tárolása  Nézet: grafikus megjelenítés  Vezérlő: felhasználói interakció  Elterjedt: JSF, Swing, JFace, MFC

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 6 MVC a gyakorlatban MODEL L NÉZE T Felhasználó 1. felhasználói akció Vezérlő 2. modell módosítás 3. visszajelzés 4. nézet frissítése 5. modell lekérdezése 6. megjelenítés

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 7 MVC részei a GEF-ben I.  Modell: tetszőleges −EMF, Java osztályok, adatbázis −Hierarchikus felépítés (gyökeres fa) −Támogatnia kell az értesítéseket ●Jelentés a vezérlőnek, ha módosítás történt ●1 modell  több nézet esetén fontos ●Pl. EMF Notification Framework −Üzleti modell: struktúra, adatok −Nézeti modell: megjelenítési információk ●Pl. pozíció, méret.

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 8 Egyszerű modell public class ElsoModel { private String name; private Rectangle bounds; public String getName() { return name; } public String getName() { return name; } public void setName(String n) { name = n; } public void setName(String n) { name = n; } public Rectangle getBounds() { return bounds; } public Rectangle getBounds() { return bounds; } public void setBounds(Rectangle r) { bounds = r; } } public void setBounds(Rectangle r) { bounds = r; } } Üzleti modell Nézeti modell

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 9 Egyszerű értesítés public interface MyModelListener { public void modelChanged(); } public class ElsoModel {... private List listeners; public ElsoModel() { listeners = new Vector (); } public void addListener(MyModelListener list) { listeners.add(list); } public void removeListener(MyModelListener list) { listeners.remove(list); } private void fireListeners() { for (MyModelListener list : listeners) list.modelChanged(); } }

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 10 Push vs. pull értesítés  Pull: Csak annyit küld, hogy változás történt −Gyors, erőforráskímélő −Minden változó attribútumot vizsgálni kell  Push: Pontosan megmondjuk, hogy mi változott (pl. új X pozíció = 172) −El kell küldeni magát a változást is, lassú −Könnyen feldolgozható

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 11 MVC részei a GEF-ben II.  Nézet: Draw2D osztályok −SWT-re épülő grafikus könyvtár −Egyszerű elemek (címke, téglalap, nyíl) −Hierarchikus megjelenítés −Alap építőelem: Figure −GEF nézet = Draw2D Figure példány −Bármely SWT alkalmazásban használható ●Saját üzenetkezelése is van

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 12 Draw2D hierarchia  Minden gyerek csak a szülőjén belül  Gyerekek balról jobbra  Pontosan 1 gyökérelem

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 13 Draw2D LayoutManager  Gyerekek elrendezése szülőn belül  Több beépített, lehet saját is  Constraint: Egy gyerek elhelyezésével kapcsolatos kényszer −SWT-nél ez volt a LayoutData −Szülő pozíció és méret + LayoutManager + Constraint  Gyerek pozíció és méret −Szülőben kell megadni, nem a gyerekben!!!

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 14 Draw2D LayoutManagerek Top BorderLayoutFlowLayout Bottom Left Right Center ToolbarLayout XYLayout 12,8,20,10 30,20,27, Constraint

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 15 Draw2D alapelemek  Egyszerű elemek −Label, Button, CheckBox, Image  Geometriai alakzatok −RectangleFigure, Ellipse, Triangle  Panel: általános konténer elem  ScrollPane: görgethető tartalmú elem

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 16 Draw2D alapelemek public class Pelda1 extends Figure { public Pelda1() { setOpaque(true); setBackgroundColor(ColorConstants.white); setLayoutManager(new ToolbarLayout()); add(new Label("Label!")); add(new CheckBox("CheckBox!")); add(new Button("Button!")); add(new RectangleFigure()); add(new Ellipse()); add(new RoundedRectangle()); add(new Triangle()); for (int i = 3; i <= 6; i++) ((Figure) getChildren().get(i)).setPreferredSize(-1, 40); } } Alapból minden átlátszó Minden elemnek lehet egy preferrált mérete, LayoutManagerek figyelembe vehetik

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 17 Draw2D keretek  Minden Figurehöz rendelhető keret  TitleBarBorder: dialógusablak jelleg  LineBorder: egyszerű vonal  MarginBorder: üres hely  Keretek egymásba ágyazhatók −CompoundBorder  Megosztható Figureök között

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 18 Draw2D keretek public class Example2 extends Figure { public Example2() { setOpaque(true); setBackgroundColor(ColorConstants.white); setLayoutManager(new XYLayout()); TitleBarBorder tb = new TitleBarBorder("TitleBarBorder"); tb.setTextColor(ColorConstants.white); setBorder(new CompoundBorder(new LineBorder(1), tb)); Label lbl = new Label("Címke"); lbl.setBorder(new CompoundBorder( new LineBorder(1), new CompoundBorder( new MarginBorder(2, 10, 20, 30), new LineBorder(ColorConstants.blue, 5)))); add(lbl); setConstraint(lbl, new Rectangle(20, 20, 120, 70)); } } Constraint megadása a szülőben

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 19 Draw2D egyéb elemek  Nyilak: lásd később  Beépített elemek kombinációja nem mindig elégséges  saját elemek −paintFigure() felülírása kell −Tetszőleges SWT rajzoló kód lehet

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 20 Draw2D saját elem public class Example3 extends Figure protected void paintFigure(Graphics graphics) { Rectangle r = getBounds(); PaletteData pd = new PaletteData(0xff0000, 0xff00, 0xff); pd.redShift = -16; pd.greenShift = -8; pd.blueShift = 0; pd.isDirect = true; ImageData id = new ImageData(r.width, r.height, 24, pd); for (int u = 0; u < r.width; u++) for (int v = 0; v < r.height; v++) { int rc = ((int) ((Math.sin(u * 9.0 / r.width) + Math.cos(v * 7.0 / r.height)) * 256.0)) % 256; id.setPixel(u, v, rc << 16); } Image img = new Image(Display.getCurrent(), id); graphics.drawImage(img, r.getTopLeft()); } }

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 21 MVC részei a GEF-ben III.  Vezérlő: EditPart osztályok −GEF „lelke” −Kapcsolat a modell és a nézet között −1 Figure  1 EditPart −1 modell elem  több EditPart is lehet ●Minden nézethez egy példány −Felhasználói akciók kezelése

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 22 GEF szerkesztő lépései  Kezdeti nézet felépítése −Modell bejárása, nézet elkészítése −Szerkesztési „szabályok” meghatározása  Felhasználói akciók −Üzenetek értelmezése a szerkesztési „szabályok” alapján −Modell módosítása −Nézetek frissítése

Budapest University of Technology and Economics Fault-tolerant Systems Research Group Kezdeti nézet felépítése  Modell alapján EditPartok létrehozása −EditPartFactory  Nézet Figureök példányosítása −GraphicalEditPart.createFigure() Modell gyökér EditPart hierarchia … … Gyerekek fig … Nézet

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 24 EditPartViewer  Egy EditPart hierarchia megjelenítéséért felelős  Elvben hasonló, mint a JFace viewerek  Fa- vagy grafikus nézet −TreeViewer: tipikusan Outline nézethez −GraphicalViewer: grafikus nézet ●ScrollingGraphicalViewer: éppen ez az aktuális javasolt megvalósítás (pár hónapja még nem is létezett ilyen osztály )

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 25 EditPartViewer II.  Három szükséges alkotóelem −EditDomain: GEF alkalmazás „állapota” −EditPartFactory: modell  EditPart leképzés −Gyökér modellelem... public void createPartControl(Composite parent) { ScrollingGraphicalViewer sgv = new ScrollingGraphicalViewer(); sgv.setEditDomain(new DefaultEditDomain(this)); sgv.setEditPartFactory(new MyEditPartFactory()); sgv.setContents(model_gyoker_elem); sgv.createControl(parent); }...

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 26 EditDomain  GEF állapot  Aktív eszköz (active tool) −Éppen használt szerkesztő funkció −Pl. kijelölés, új elem, törlés  CommandStack −Elvégzett módosítások listája −Undo / redo támogatáshoz  Használjuk mindig a DefaultEditDomain-t

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 27 EditPartFactory  Modell alapján EditPart generálása public class ElsoGEFEditPartFactory implements EditPartFactory { public EditPart createEditPart(EditPart context, Object model) { EditPart ep = null; if (model instanceof ElemModel) ep = new ElemEditPart(); else if (model instanceof SzuloModel) ep = new SzuloEditPart(); if (ep != null) ep.setModel(model); return ep; } } Szülő EditPart EditPart tud tárolni egy modell referenciát

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 28 Nézet legenerálása  EditPart feladata  Sajátunkat célszerű származtatni az AbstractGraphicalEditPart osztályból public class ElemEditPart extends AbstractGraphicalEditPart protected IFigure createFigure() { // Saját Figure létrehozása ElemFigure fig = new ElemFigure(); return fig; }... }

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 29 Modell bejárása  EditPartViewer tartalma −EditPartFactory −Modell gyökér eleme  Hogy jutunk el a modell többi részéhez? −EditParton keresztül −Mindenki megmondja a saját gyerekeit −Rekurzívan bejárható az egész modell ●Ne legyen benne tartalmazás kör

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 30 Modell bejárása  EditPart.getModelChildren() −Az EditParthoz tartozó modellelem gyerekeit kell visszaadni listaként ●Lista sorrendje számít  nézetek takarása public class SzuloEditPart extends AbstractGraphicalEditPart protected List getModelChildren() { // Saját modell lekérdezése SzuloModel szm = ((SzuloModel) getModel()); return szm.getChildren(); }... } EditPartból a saját modell elérése Modell-függő függvény, nem GEF!

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 31 Nézet felépítés összefoglalás Modell GraphicalViewer EditPartokFigureök EditPart Factory

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 32 Content Pane  X modellelem gyerekeinek a nézetei X nézetének a gyerekei − Összetett Figurek esetén nem jó  ContentPane: Figure ős X gyerekeinek  EditPartban adhatjuk meg −Saját Figureünkben gondoskodni kell public IFigure getContentPane() { return ((MyFigure) getFigure()).getGyerekekHelye(); }...

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 33 Szerkesztés szereplői I.  EditDomain: fogadja az eseményeket az SWT- től, és továbbítja az aktív Toolnak −Nem végez feldolgozást, csak összefogja egy modell összes nézetét  Tool: egy szerkesztési funkciót jelképez −Feldolgozza az SWT üzeneteket −Létrehoz egy (vagy több) Request-et

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 34 Szerkesztés szereplői II.  Request −GEF-szintű esemény −Pl. CreateRequest, DeleteRequest −Továbbítódik a cél EditParthoz  EditPolicy −EditParthoz tartozó „szerkesztési szabály” −Request  Command leképzés −1 EditPart  több EditPolicy lehet

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 35 Szerkesztés szereplői III.  Command −A modell módosítását végzi −Visszavonható (ha megírjuk )  CommandStack −Végrehajtott Commandok verme −Ez biztosítja az undo/redo lehetőségét −EditDomainenként pontosan egy darab −Mindig ezen keresztül módosítsunk!

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 36 Szerkesztés szereplői IV.  EditPart −A saját EditPolicyjai segítségével átalakítja a bejövő Requestet egy Commandá −Észleli a modell változását az értesítési mechanizmuson keresztül −Modellváltozás esetén frissíti a nézetet, illetve a struktúrát

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 37 Szerkesztés szereplői V.  Action −Nem GEF-specifikus (JFace) −Nem „grafikus” felhasználói akció ●Menüelemek, billentyűlenyomások, toolbar elemek −GEF biztosít néhány wrappert, amik lehetővé teszik a CommandStack egyszerű elérését −ActionRegistry: actionök listája ●Több helyen szereplő azonos actionökhöz  Nincs több (lényeges) szereplő

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 38 Szerkesztés folyamata Figure Modell CommandStackEditPolicy EditPart Tool SWTEditDomain 1.SWT üzenet 2.SWT üzenet 8.Frissítés 3.Request 4.Request 5.Command 6.Módosítás 7.Értesítés

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 39 Tool  Beépített Toolok −SelectionTool, CreationTool, MarqueeTool  Saját Tool is készíthető −TargetingTool: Ha van egy cél EditPart −AbstractTool: teljesen általános  Aktív tool módosítása −EditDomain.setActiveTool() −Eszköztár (Palette): lásd később

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 40 Request  ChangeBoundsRequest: átméretezés  CreationRequest: elem létrehozása  Minden Requesthez tartozik egy típus azonosító −RequestConstants osztályban −REQ_xxx konstansok −EditPolicyk ez alapján azonosítják

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 41 EditPolicy  Pontosan egy EditParthoz tartozik −getHost()-al lekérdezhető −1 EditPart  több EditPolicy lehet ●Azonosítás sztring kulcsokkal (EditPolicy.xxx)  Feladatai −Request  Command leképzés ●Command getCommand(Request) −Grafikus visszajelzés a felhasználónak ●show(Source/Target)Feedback()

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 42 EditPolicy II.  Beépített absztrakt ősosztályok −Némi előfeldolgozást végeznek a Requesten −ComponentEditPolicy: törlés −ContainerEditPolicy: létrehozás −LayoutEditPolicy: átméretezés −XYLayoutEditPolicy: átméretezés, ha az EditPart nézete XYLayoutot használ ●Biztosítja a grafikus visszajelzést

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 43 EditPolicy példa public class MyLayoutEditPolicy extends XYLayoutEditPolicy { protected Command createAddCommand(EditPart child, Object constraint) { return null; } protected Command createChangeConstraintCommand( EditPart child, Object constraint) { if (child.getModel() instanceof ElemModel && constraint instanceof Rectangle) return new MyResizeCommand(((ElemModel) child.getModel()), ((Rectangle) constraint)); return null; } protected Command getCreateCommand(CreateRequest request) { return null; } protected Command getDeleteDependantCommand(Request req) { return null; } } XYLayout szülő Átméretezés Saját Command

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 44 Command példa public class MyResizeCommand extends Command { ElemModel model; Rectangle newsize, oldsize; public MyResizeCommand(ElemModel m, Rectangle r) { model = m; newsize = r; } public boolean canExecute() { return (r.width >= 40 && r.height >= 40); } public void execute() { oldsize = model.getBounds(); model.setBounds(newsize); } public boolean canUndo() { return true; } public void undo() { model.setBounds(oldsize); } } Végrehajthatóság feltétele Modell függvény

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 45 EditPart részei  EditPolicyk telepítése −createEditPolicies(), installEditPolicy()  Modell figyelése −activate(), deactivate()  Nézet frissítése −refreshVisuals(): nem strukturális módosítás −refreshChildren(): gyerekek listája változik

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 46 EditPart példa I. public class SzuloEditPart extends AbstractGraphicalEditPart implements MyModelListener { protected IFigure createFigure() { return new SzuloView(); } protected void createEditPolicies() { installEditPolicy(EditPolicy.LAYOUT_ROLE, new MyLayoutEditPolicy()); } protected List getModelChildren() { return ((SzuloModel) getModel()).getChildren(); } protected void refreshVisuals() { ((SzuloView) getFigure()).setLabel( ((SzuloModel) getModel()).getName()); }... EditPolicy ID EditPolicy telepítése Nézet frissítése

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 47 EditPart példa II.... public void activate() { super.activate(); ((SzuloModel) getModel()).addListener(this); } public void deactivate() { ((SzuloModel) getModel()).removeListener(this); super.deactivate(); } public void modelChanged() { refreshVisuals(); refreshChildren(); } } Modellfigyelés kezdete Modellfigyelés vége Modell ezt hívja (vö. MyModelListener) Gyerekek frissítése

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 48 Mit kell nekünk megírni I.  Modell kód, értesítéssel −Generáltatható EMF-el (jövő hét)  Nézet osztályok  EditPart osztályok 1. −Modell megjelenítés ●createFigure(), refreshVisuals() −Modell változás figyelés ●activate(), deactivate()

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 49 Mit kell nekünk megírni II.  EditPartFactory (modell  EditPart)  Modell módosító Commandok  Saját EditPolicyk, amik a Commandokat használják −Milyen műveleteket engedünk meg  EditPart oszályok 2. −EditPolicyk hozzárendelése  Editor és tartozékai

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 50 Editor készítése  Feladatai −Létrehoz egy EditPartViewert −Kezeli a nem grafikus műveleteket ●Actionök (undo/redo is ezek közé tartozik) −Létrehozza a menü és toolbar bejegyzéseket ●ActionBarContributor (lásd labor)  Megoldás −Saját EditorPart, ezeket mi írjuk meg −GraphicalEditor használata ●Nem ajánlott, de egyszerű

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 51 GraphicalEditor  Ősosztály GEFes Eclipse editorokhoz −Létrehoz egy ScrollingGraphicalViewer-t −Létrehoz egy pár általános Actiont ●Undo, redo, törlés, nyomtatás, mentés ●Nem jeleníti meg őket sehol −Használjuk az editor készítése közben teszteléshez, kísérletezéshez, de a végső alkalmazásba inkább ne kerüljön

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 52 GraphicalEditor használata public class ElsoGEFEditor extends GraphicalEditor { public ElsoGEFEditor() { setEditDomain(new DefaultEditDomain(this)); } protected void configureGraphicalViewer() { getGraphicalViewer().setEditPartFactory( new ElsoGEFEditPartFactory()); } public void init(IEditorSite site, IEditorInput input) throws PartInitException { super.init(site, input); // Modell felépítése az input alapján } protected void initializeGraphicalViewer() { getGraphicalViewer().setContents(modell_gyoker); }... } EditDomain kell a konstruktorban! EditPartFactory megadása Megnyitott fájl feldolgozás (Eclipse) Modell gyökérelem megadása

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 53 Eszköztár (Palette)  Aktív eszköz váltása  Eszközök grafikus megjelenítése  Belül ez is egy külön GEF viewer  PaletteRoot: eszköztár gyökere  PaletteEntry: eszköztár bejegyzés −PaletteContainer: eszközök csoportja −ToolEntry: egy konkrét eszköz

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 54 Gyakori ToolEntryk  SelectionToolEntry: kijelölés eszköz  MarqueeToolEntry: csoportos kijelölés  CreationToolEntry: elem létrehozása −Nehézkes használni −Factory osztály, ez lekérdezhető a Requesten kereszül az EditPolicyban  azonosítás  Minden ToolEntryhez tartozik −Név, rövid leírás, kis/nagy ikon −Tool osztály, amit példányosít

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 55 GraphicalEditorWithPalette  Olyan GraphicalEditor, ami létrehozza saját magának az eszköztárat  Szintén nem javasolt használni  Eszköztárhoz csak egy függvényt kell megírnunk −getPaletteRoot()

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 56 GraphicalEditorWithPalette példa public class ElsoGEFEditor extends GraphicalEditorWithPalette { protected PaletteRoot getPaletteRoot() { PaletteRoot root = new PaletteRoot(); PaletteGroup sgrp = new PaletteGroup("Selection"); ToolEntry tool = new SelectionToolEntry(); selectionToolGroup.add(tool); root.setDefaultEntry(tool); tool = new MarqueeToolEntry(); selectionToolGroup.add(tool); root.add(selectionToolGroup); root.add(new PaletteSeparator()); root.add(new CreationToolEntry("New Place", "Creates a new Petri net place", new SimpleFactory(PetriPlace.class), MyPlugin.getImageDescriptor(„place.png”), MyPlugin.getImageDescriptor(„place.png”));... return root; }... } Új eszköztár Csoport Elválasztó vonal Factory a létrehozáshoz

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 57 Nyilak  Hasonlóak a normál objektumokhoz  Megjelenítés külön (felsőbb) rétegben −Nyíl mindig látszik, akkor is ha nem kéne  Van saját EditPartjuk −AbstractConnectionEditPartból származik −Saját EditPolicyk, Requestek,...  Irányítottak (modell szinten)

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 58 Nyíl modell  Szintén semmi megkötés  Célszerű ha tudja a saját forrását és célját  Forrás/cél objektumnak mindenképpen tudnia kell a nyilakról  Navigálás a nyilakhoz a forrás/cél EditPartban −getModel(Source|Target)Connections()... protected List getModelSourceConnections() { return ((ElemModel)getModel()).getForrasNyilak(); } protected List getModelTargetConnections() { return ((ElemModel)getModel()).getCelNyilak(); }...

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 59 Nyíl nézet  Draw2D PolylineConnection példány  Figure leszármazott  lehetnek gyerekei  GEF-ben nincs nyíl hierarchia −Mindegyik a teljes szerkesztőt kitöltheti  Speciális elemek −ConnectionAnchor: végpontok helye −ConnectionRouter: nyíl alakja −RotatableDecoration: végpontok „dísze”

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 60 ConnectionAnchor  Nyíl két Anchor között megy  Forrás/cél EditPartok biztosítják −NodeEditPart interfészen deklarált metódusok ●get(Source|Target)ConnectionAnchor()  Két megvalósítás −ChopboxAnchor: téglalap Figurehöz −EllipseAnchor: ellipszis Figurehöz  Egyéb esetben kell sajátot írni

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 61 ConnectionRouter  A két Anchor közötti közbenső pontokat számolja ki  ≈ LayoutManager, itt is lehet Constraint  Típusai −NullRouter: egyenes vonal −BendpointConnectionRouter: töréspontok −...  Jövő: görbe nyilak támogatása

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 62 Nyíl nézet példa public class NyilView extends PolylineConnection { private Label lbl; public NyilView1() { lbl = new Label(); lbl.setOpaque(true); lbl.setBorder(new LineBorder()); add(lbl, new ConnectionLocator(this, ConnectionLocator.MIDDLE)); PolygonDecoration decors = new PolygonDecoration(); decors.setTemplate(PolygonDecoration.TRIANGLE_TIP); setTargetDecoration(decors); setConnectionRouter(new BendpointConnectionRouter()); } public setTorespontok(List tplista) { setRoutingConstraint(tplista); } }

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 63 Nyíl megjelenítés problémák  Töréspontok elmásznak zoom esetén  Minden nyíl mindig látható

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 64 Nyíl EditPart  Ősosztály: AbstractConnectionEditPart −Mindent tud, amit a többi EditPart  Nyíl nézet létrehozása: createFigure() −Mindenképpen egy PolylineConnection kell  Forrás és cél EditPartok lekérdezhetők −getSource() és getTarget() függvények −Létrehozás közben nem feltétlenül elérhető!  Szerepelnie kell az EditPartFactoryban is

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 65 Nyíl szerkesztése  Speciális nyíl EditPolicyk −ConnectionEditPolicy: törlés −ConnectionEndpointEditPolicy: kijelölés ●Mindeképpen telepíteni kell a kijelöléshez −BendpointEditPolicy: töréspontok módosítása ●Csak akkor, ha BendpointConnectionRouter van

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 66 Nyíl létrehozás  GraphicalNodeEditPolicy −Nem a nyíl EditParthoz, hanem a forrás/cél elemek EditPartjához tartozik!  Két lépcsős létrehozás −1. getConnectionCreateCommand() ●Request  Command (ez nem hajtódik végre) −2. getConnectionCompleteCommand() ●Request + első Command  végső Command  Csak ez hajtódik végre!

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 67 Mit kell nekünk megírni III.  Nyíl modell kód, értesítéssel −Nyíl források/célok modelljében el kell tudni érni az onnan induló/oda érkező nyilakat!  Nyíl nézet osztályok  Nyíl EditPart osztályok −Modell megjelenítés ●createFigure(), refreshVisuals() −Modell változás figyelés ●activate(), deactivate()

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 68 Mit kell nekünk megírni IV.  Nyíl szerkesztő Commandok  Nyíl saját EditPolicyk −Törlés, töréspontok módosítása,...  Nyíl létrehozás EditPolicy −Forrás/cél EditParthoz tartozik −GraphicalNodeEditPolicy −Két lépcsős ●Cél EditParté az első lépés!

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 69 További funkciók  Modell tulajdonságok szerkesztése az Eclipse Properties nézetében  Szövegek (címkék) szerkesztése közvetlenül a rajzon (direct editing)  Nagyítási lehetőség  Különálló fa modellnézet  Rajzok nyomtatása (Draw2D segítségével)  Vonalzó, automatikus igazítás

Budapest University of Technology and Economics Fault-tolerant Systems Research Group 70 További információk  −Hivatalos GEF oldal  eclipsewiki.editme.com/GefDescription eclipsewiki.editme.com/GefDescription −felületes, de legalább angol leírás  www13.plala.or.jp/observe/#gef www13.plala.or.jp/observe/#gef −japán, de a forráskódok követhetők −2.x-es Eclipse/GEFhez, azóta kicsit változott