Előadást letölteni
Az előadás letöltése folymat van. Kérjük, várjon
KiadtaÁdám Kerekes Megváltozta több, mint 10 éve
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
Hasonló előadás
© 2024 SlidePlayer.hu Inc.
All rights reserved.