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