Az előadás letöltése folymat van. Kérjük, várjon

Az előadás letöltése folymat van. Kérjük, várjon

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

Hasonló előadás


Az előadások a következő témára: "Budapest University of Technology and Economics Fault-tolerant Systems Research Group Nyílt Fejlesztőrendszerek Graphical Editing Framework."— Előadás másolata:

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

2 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

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

4 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

5 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

6 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

7 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.

8 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

9 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(); } }

10 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ó

11 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

12 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 1 36 45 2 1 2 3 4 5 6

13 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!!!

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

15 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

16 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

17 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

18 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

19 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

20 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 20 Draw2D saját elem public class Example3 extends Figure { @Override 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()); } }

21 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

22 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

23 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 23 1. 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

24 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 )

25 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); }...

26 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

27 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

28 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 {... @Override protected IFigure createFigure() { // Saját Figure létrehozása ElemFigure fig = new ElemFigure(); return fig; }... }

29 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

30 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 {... @Override 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!

31 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

32 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 róla... @Override public IFigure getContentPane() { return ((MyFigure) getFigure()).getGyerekekHelye(); }...

33 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

34 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

35 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!

36 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

37 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ő

38 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

39 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

40 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

41 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()

42 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

43 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

44 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

45 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

46 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

47 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

48 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()

49 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

50 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ű

51 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

52 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

53 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

54 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

55 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()

56 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

57 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)

58 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(); }...

59 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”

60 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

61 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

62 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); } }

63 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ó

64 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

65 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

66 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!

67 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()

68 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!

69 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

70 Budapest University of Technology and Economics Fault-tolerant Systems Research Group 70 További információk  www.eclipse.org/gef www.eclipse.org/gef −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


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

Hasonló előadás


Google Hirdetések