Home

Diplom 2011

image

Contents

1. Add Terminatestate 4 Project View e Add State a T Cloc GC Add Conditionstate mg Add Transition em Abbildung 22 Add Transition im Men New e Add Transition Abbildung 23 Add Transition in der Toolbar Schliesslich kann die Transition gezeichnet werden Dazu wird am Source Element an der gew nschten Stelle die linke Maustaste gedr ckt Mit gedr ckter Maustaste wird die Transition zum Target Element gezogen Beim Loslassen der Maustaste wird die Transition erstellt BENUTZERHANDBUCH M Untitied state Chart Editor fie Eda teow lt r gt Mr gt D D PO Al e Select Add New State Chart Add Initialsate Add Terminatestate Add State Add Conditionstate Add Transition Add Region Remove Region Copy State Chart to Clipboard Project View 4 gt StateMachine_1 4 BA State 2 Region_3 4 State 3 m Region A StateMachine 1 Property Editor State Properties General Abbildung 24 Erstellen einer Transition Wichtig Beim Klicken und Loslassen muss sich die Maus innerhalb des Elements befinden 7 7 Transitionen Text verschieben Um den auf der Transition angezeigten Text zu verschieben klickt am diesen mit der linken Maustaste an und verschiebt ihn an die gewunschte Stelle Untitled State Chart Editor mme File Edit New Zi P F Project View 4 I gt StateMachine 1 d E State l Reg
2. QGraphicsScene mouseMoveEvent mouseEvent foreach QGraphicsItem item selectedItems update all connections involved while moving DiagramItem diagramItem dynamic_cast lt DiagramItem gt item if diagramItem foreach ConnectionItem c diagramItem gt connections c gt setGeometryChanged true mouseEvent gt accept Maustaste wird losgelassen Beim Loslassen der Maustaste muss f r jedes Element berpr ft werden ob sein Parent Item ge ndert hat Falls das Parent Item ge ndert hat muss das Element dem neuen Parent Item hinzugef gt und vorhandene Transitionen entfernt werden Dieser Vorgang ist hnlich jenem der beim Hinzuf gen von Elementen erkl rt wurde Die vollst ndige Implementierung des mouesReleaseEvent der Diagram Klasse ist elektronisch unter e Software SourceCode src Diagram zu finden Die Gr sse eines Zustands ndern Zum ndern der Gr sse des Zustands werden die Selection Corner verwendet Beim Erstellen der Selection Corner in der Diagramltem Klasse wird auf den Selection Corners ein SceneEventFilter installiert und in der Diagramltem Klasse der sceneEventFilter implementiert _corners 0 new SelectionCorner this SelectionCorner TopLeft _corners 0 gt installSceneEventFilter this IMPLEMENTIERUNG DES STATE CHART EDITORS ke Der sceneEventFilter wird dazu verwendet um Events eines anderen QGraphicsItem in einer Klasse zu verarbei
3. create root item tag element writer writeStartElement DiagramData create new element tag for each child foreach Diagram item model gt _list writer lt lt item writer writeEndElement writer writeEndDocument return writer QXmlStreamwWriter amp operator lt lt QXmlStreamWriter amp writer Diagram diagram writer writeStartElement Diagram writer writeAttribute uuid diagram gt _uuid toString create new element tag for each child foreach QGraphicsItem item diagram gt items DrawItem drawItem dynamic_cast lt DrawItem gt item if drawItem amp amp drawItem gt parentItem NULL writer lt lt drawltenm writer writeEndElement return writer Um schliesslich das gesamte Diagrammmodell in ein ODevice zu schreiben sind folgende Anweisungen n tig DiagramModel diagramModel DiagramModel instance QXmlStreamwWriter writer amp ioDevice writer lt lt diagramModel Die beiden Klassen DiagramModel und Diagram befinden sich elektronisch unter e Software SourceCode src Diagram Model e Software SourceCode include DiagramModel bzw e Software SourceCode src Diagram e Software SourceCode include Diagram Im Anhang 12 1 2 wird der Inhalt es IODevices erl utert seeesee eee ee eege eeee e eeeee see eege ee eee DIE ENTWICKLUNG DES DIAGRAMMMODELLS be Fa _ 4 4 2 Laden Zum Laden des Diagrammmodells aus
4. slot onltemDataChanged item Dataltem void friend operator writer QXmlStreamWriter amp item Dataltem QXmlStreamWriter A Diagramm 6 DataModel Klasse 3 3 2 Implementierung Dieser Abschnitt beschreibt kurz die Methoden des Modells welche von der Interfaceklasse QAbstractItemModel implementiert wurden und welche zus tzlich hinzugef gt worden sind Die vollst ndige Implementierung der Modell Klasse befindet sich elektronisch unter e Software SourceCode src DataModel e Software SourceCode include DataModel WIRTNENCHERLTRTIETEITELTTTETTEITETELTEETITETTELTETETTETTITETTEITETETTERTITETILTITITEITETETT Hes SOW WARS EE 17 80 se eeeeeceoeeo oe eceeeeeeeseeceee ee eege egeeeg ege ege ee eee ae 22892998 28 eee 2 982899 2 292922 822 229 Be ees DIE ENTWICKLUNG DES DATENMODELLS ke Der Konstruktor der ein neues Modell erstellt ist als private deklariert da es sich beim Modell um eine Singleton Klasse handelt DataModel QObject parent 0 Mit der statischen Methode instance kann die Instanz des Modells erhalten werden static DataModel instance Der Destruktor loscht das Root Element und somit samtliche Elemente Der Speicher wird dadurch wieder freigegeben virtual DataModel Die Funktion data erlaubt es die der role entsprechenden Daten des Elementes gegeben durch den index zu erhalten Qt DisplayRole und Qt DecorationRole sind m glich QVariant data con
5. e Zum Hinzuf gen Entfernen von eingehenden und ausgehenden Transition wird addConnection und removeConnection bzw deleteConnection verwendet e propertiesWidget erstellt ein Property Widget 2 3 Der Property Editor f r das Element e Der Typ eines Elements kann mit type ermittelt werden Implementierung In diesem Abschnitt werden s mtliche Methoden der Klasse beschrieben Wichtige Codesegmente sind direkt in diesem Abschnitt zu finden Der Programmcode der vollst ndigen Implementierung dieser Klasse ist elektronisch unter e Software StateChartEditor src DataModel e Software StateChartEditor include DataModel zu finden Der Konstruktor erstellt ein neues Element setzt dessen Eltern Element Typ und UUID Dataltem int type QUuid uuid Dataltem parent 0 Beim Destruktor dieser Basisklasse handelt es sich um den Default Destruktor virtual Dataltem Die Funktion child gibt das Kind Element das sich an der Position number in der Liste des Elements befindet zur ck Dataltem child int number Um die Anzahl Kinder die ein Element besitzt zu ermitteln dient childCount int childCount const data liefert der role entsprechend Informationen des Elements Ist role gleich Qt DisplayRole wird der Name des Elements zur ckgegeben ist role gleich Qt DecorationRole das Icon QVariant data int role const DIE ENTWICKLUNG DES DATENMODELLS ke setData erlaubt es den Namen
6. void mouseReleaseSelection mouseEvent QGraphicsSceneMouseEvent void mouseReleaseAddltem mouseEvent QGraphicsSceneMouseE vent void mouseReleaseAddConnection mouseEvent QGraphicsSceneMouseEvent void stateUnterltem item Diagramltem State signal diagramModified value bool void Diagramm 14 Diagram Klasse TUTELLE Hes so WEE 31 80 se eeeeeeoee oe eCeeeeeeeseeceee ee eee eeeee ege ege ee eee eeegege 2229292 28222 2 8899 2 29922 822 229 ee ees DIE GRAPHISCHEN ELEMENTE ke Die logischen Eigenschaften des Diagramms sind in der StateMaschineltem Klasse abgelegt Daher besitzt das Diagramm einen Zeiger _dataltem auf den logischen Teil Jedes Diagramm besitzt eine eindeutige UUID _uuid die bei der Erstellung erzeugt wird oder beim Laden gesetzt wird Mit Hilfe dieser UUID ist es nach einem Ladevorgang m glich den Link zwischen dem graphischen und logischen Element wiederherzustellen Der Konstruktor erstellt ein neues Diagramm mit der gegebenen UUID Falls keine UUID angegeben wird wird eine neue eindeutige UUID erzeugt Diagram QUuid uuid QUuid Die Funktion drawBackground der QGraphicsScene Klasse wurde neu implementiert um in Funktion des _showGrid Flags ein Raster im Diagramm anzuzeigen oder nicht 6 void drawBackground QPainter painter const QRectF amp rect Um dem Diagramm ein graphisches Element hinzuzuf gen wird addDrawItem verwendet Gleichzeitig wird das
7. DiagramItem qreal minWidth qreal minHeight QPointF origin QUuid uuid QUuid Der Destruktor l scht das Element und alle seine ein ausgehenden Transition sofern vorhanden virtual Diagramltem Die Methoden boundingRect shape und paint wie sie bereits im Abschnitt 5 3 1 beschrieben wurden werden von den abgeleiteten Klassen implementiert virtual QRectF boundingRect const virtual QPainterPath shape const 0 virtual void paint QPainter painter const QStyleOptionGraphicsItem option QWidget widget 0 Mit setHigherLayer kann das Element in den Vordergrund gebracht werden und setDefaultLayer platziert das Element auf den entsprechenden Layer des Element Typs void setHigherLayer void setDefaultLayer Der sceneEventFilter wird dazu verwendet um Events eines anderen QGraphicsItem zu verarbeiten Im Fall des Diagramltem werden die Events der Selection Corner siehe 5 3 3 abgefangen um die Gr sse des Items zu ver ndern bool sceneEventFilter QGraphicsItem watched QEvent event getConnectionPointAngle liefert in Funktion des gegebenen Punktes pointClicked welcher sich innerhalb des Elements befindet den Ankerpunkt bzw den Winkel zur Berechnung des Ankerpunkts um eine Transition anzuf gen Eine detailliertere Beschreibung folgt im Abschnitt 6 3 3 Transitionen hinzuf gen virtual QVariant getConnectionPointAngle QPointF pointClicked const 0 addConnect
8. Ge eege eege ee eege eeeeeeee eege eeeeeeeeee eee eee ee eee BE BE BO eege eege ese eege eeeeeeeeee eege eege ee ees 7 1 7 2 7 3 7 4 7 9 TESTS ke Tests Am Ende der Realisierung wurde die Funktionalit t des State Chart Editors berpr ft Alle durchgefuhrten Tests lieferten ein positives Resultat Die Bedienung Um die Bedienung des Editors zu testen wurden samtliche moglichen Aktionen durchgefuhrt Es wurde mit dem Erstellen eines neuen Projekts begonnen Dann wurden dem Projekt Diagramme Zustandsmaschinen hinzugef gt und wieder gel scht Auf den erstellten Diagrammen wurden mit den unterschiedlichen Elementen Zustandsmaschinen gezeichnet So konnte das Hinzuf gen von Elementen und Transitionen kontrolliert werden Den Zust nden wurden mehrere Regionen hinzugef gt und entfernt Dabei wurde berpr ft dass Regionen nur wenn sie leer sind gel scht werden k nnen Zudem wurde das Verschieben von Elementen und Transitionen getestet um zu verifizieren dass die Elemente und Transition immer dem richtigen Parent Item zugeordnet werden Am Ende wurde noch das L schen von Elementen und Transition berpr ft Es wurde darauf geachtet dass s mtliche Informationen korrekt entfernt werden Property Editor Beim Selektieren von Zustandsmaschinen Elementen und Transitionen wurde kontrolliert dass jeweils der richtige Property Editor angezeigt wird Falls nderungen im Property Editor vorgenommen wurden wurde
9. lt Region type Region name Region_1 uuid fb77dbbe 62c3 426e 98a4 0a4e643e4600 gt lt Regions gt lt State gt lt State type State name WAIT uuid 1c4d3b43 7eb4 48ad b5d6 b60958b7014c gt lt ActionOnEntry gt lt ActionOnEntry gt lt ActionInState gt lt ActionInState gt lt ActionOnExit gt lt ActionOnExit gt lt Regions gt lt Region type Region name Region_2 uuid 6eb821da 0Od9a Af3a a0f7 a788620d7d99 gt lt Regions gt lt State gt lt State type State name TICK uuid f396f156 32d1 45a2 a2f4 9249d74457e5 gt lt ActionOnEntry gt seconds if seconds 60 d seconds 0 minutes if minutes 60 minutes 0 hours if hours 24 hours 0 lt ActionOnEntry gt lt ActionInState gt lt ActionInState gt lt ActionOnExit gt lt ActionOnExit gt lt Regions gt lt Region type Region name Region_3 uuid 05efb9b0 ac6c 43ca b327 baffd793ccf8 gt lt Regions gt lt State gt lt Transition type Transition name fromStart uuid 79bb9cd2 700a 4829 a225 6cd248F2244c gt lt Trigger gt lt Trigger gt lt Guard gt lt Guard gt lt Action gt lt Action gt lt Transition gt lt Transition type Transition name fromInit uuid 9f699367 d952 4bdf ac8e 370131F94c04 gt lt Trigger gt lt Trigger gt lt Guard gt lt Guard gt lt Action gt lt Action gt lt Transition gt lt Transition type Transition name fromwait u
10. 80 y 240 gt lt Target itemUuid 1c4d3b43 7eb4 48ad b5d6 b60958b7014c x 80 y 180 gt lt TextBoxVectorFromCenter x 0 y 0 gt lt ConnectionItem gt lt ConnectionItem type Transition uuid 79bb9cd2 700a 4829 a225 6cd248f2244c gt lt Source itemUuid 98057502 299c 44ff 8fa0 5af5b6021f00 x 78 7670075952098 y 352 602045571259 gt lt Target itemUuid 82ecfb72 b44c 487f 81b7 e615b6ef7585 x 79 y 300 gt lt TextBoxVectorFromCenter x 0 y 0 gt lt Connectionltem gt eseeee eege ee eeeegeegee sec eege ee eege eegeeg eg 29 280 ee 88899988 BP 9 eege ee eege DB BB 08 e A se es ee IH d3RACELLLLILLLLLLLCLLLLLLLLLLLLLLLLELLLLLLLELLELELLELLLLLLLLLLLLLLLLLLLLELLLLLLLLLLLELELLL IHA NALA Sc oss Scccscsccosco ose cee os csocecos sco oss esses ccoesees ccocs cscs cose secssocosssoesoss 77 ee WALLIS ce cee ccc cc cee cee ee Fe COS 0000000000 00000000000000000000000000000000000000000000 0000 ee ww ANHANG lt DiagramItem type State width 180 height 60 x 200 y 60 uuid f396f156 32d1 45a2 a2f4 9249d74457e5 gt lt Region uuid 05efb9b0 ac6c 43ca b327 baffd793ccf8 width 160 gt lt DiagramItem gt lt DiagramItem type State width 180 height 60 x 200 y 180 uuid 1c4d3b43 7eb4 48ad b5d6 b60958b7014c gt lt Region uuid 6eb821da 0d9a 4f3a a0f7 a788620d7d99 width 160 gt lt DiagramItem gt lt DiagramItem type State width
11. 120 height 60 x 140 y 300 uuid 82ecfb72 b44c 487f 81b7 e615b6ef7585 gt lt Region uuid fb77dbbe 62c3 426e 98a4 0a4e643e4600 width 100 gt lt DiagramItem gt lt DiagramItem type InitialState width 15 height 15 x 80 y 360 uuid 98057502 299c 44ff 8fa0 5af5b6021f00 gt lt Diagram gt lt DiagramData gt Hesso Mai EEE EES EE EE ESSE 78 go ANHANG Ges 12 2 Programm Code Der gesamte Source Code sowie die generierte Doxygen Dokumentation befinden sich auf der beigelegten CD 3 Hes So WASTE Nn E EEE D I 80 22 982888 EEE EEEEEBEEBEEEEEEREBEEBEERTBEBEEBEEE BEE eee BEER see ees ese eee BR BE EHE BE EEE BR see ese ese ees ANHANG Ges 12 3 Benutzerhandbuch Folgend ist das Benutzerhandbuch zum State Chart Editor zu finden Hes so REEL 80 B Seeeeeeeeeeeeeeeeeeeeeegeegeeegeeeegegegeegeegeeeeegeeegeegeegeeeeeeeegeeeegeeeeegeegeegeegeeeeegeg State Chart Editor Model based Software Development Tool University of Applied Sciences Western Switzerland Systems Engineering a s x Te Ea nt rinK Eh Kan E part0 a Ver I w mon iLE y T p 701 r f KIC e eperitocete i et pe 2C eats Kn D I wrentet J mie pE LE n F rate u k P ALE ae currentata i L d d gt INIT I a ur E TICK Developer Ralph Martig 2011 INHALTSVERZEICHNIS ke Inhaltsverzeichnis 1 BESERTEIDUN A er cc re rm et rer E eer Teron etree carer etree 1 2 De
12. Das gerenderte Bild wird anschliessend in die Zwischenablage gelegt Mittels QApplication clipboard kann auf die Zwischenablage des Systems zugegriffen und mit set Image kann das Bild in die Zwischenablage gelegt werden void MainWindow onCopyToClipboard Diagram currentScene dynamic_cast lt Diagram gt _view gt scene if a diagram exists render scene to image and set to clipboard if currentScene currentScene gt clearSelection currentScene gt shrinkSceneRectToContent currentScene gt showGrid false greal imageWidth currentScene gt sceneRect size width greal imageHeight currentScene gt sceneRect size height QImage image imageWidth 10 imageHeight 10 QImage Format_ARGB32 image fill QColor Qt white rgba QPainter painter amp image painter setRenderHint QPainter Antialiasing currentScene gt render amp painter QRectF 5 5 imageWidth imageHeight currentScene gt sceneRect currentScene gt showGrid true currentScene gt restoreSceneRect painter end QApplication clipboard gt setImage image Bemerkung Damit das richtige Rechteck der Szene zur Renderung gewahlt wird wird vor dem Rendern shrinkSceneRectToContent aufgerufen Nach dem Rendern muss das Rechteck mit restoreSceneRect wiederhergestellt werden siehe S 33 Drucken Das Drucken funktioniert ahnlich wie das Kopieren in die Zwischenablage Es wird ein QPrinter
13. Positionierung der Textbox sssnneeenennnnnnnnnnnnnennnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnen 45 Abbildung 34 Initial Terminate und Condition State unnnsnsennneennnnnnnnennnnnnnnnnnnnnnnnnnennnnnn 47 Abbildung 35 Standard Zustand mit einer Region unsssseeennnennennnnnnnnnnnnnnnnnennnnnnnnnnennnnnnnnnnnnnnnn 47 Abbildung 36 Zustand mit Acton Indikatoren een 47 Abbildung 37 Zustand mit drei Regionen nsnssnmnennennnnnnnnnnnnennnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnennnnnnnnnnnn 48 Abbildung 38 Transition mit Texturas nidan aama aana KENAA aa NA aaa aiaa 48 Abbildung 39 Bereiche des Main Windows uanssssenrssnennnnnnnnnennnnnnnnennnnnnnnnnnnnnnnnnnnnnnnnnnnennnnnnnnnnnnnnnen 52 Abbildung 40 R ckgabe von getConnectionPointAngle i e 59 Abbildung 41 Speichern in eine Archiv Datei sssssssssssessnsernssressnensnenrnnsnnnnnnennrnnnnnnnnonnnnnnnnnnnnnnnnnneanes 64 Abbildung 42 Laden aus einer Archiv Datei unsnsnenneeennnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnennnnnennnannannnen 64 Abbildung 43 Exportieren der logischen Informationen ssssssssssssessrerssrrssrrensnensnensrnenrneenrnensnensnens 65 eSeeeeeea eeeeeeeeeeses es Sseeeeee o EE zZ eeeeseeeeeeee ee s VERZEICHNISSE ke 10 2 Diagrammverzeichnis Diagramm 1 Klassendiagramm der Datenstruktur usssseeeneneennnnnnnnneennnnnennennnnnnnnennnnnnnnnnnnnn 9 Diagramm 2 D t ltem Rasse a ee ee sn 12 Diagramm 3 Implementierung von QAbstractItemModel durch
14. nderung implementiert werden N here Informationen zum ndern der Elementgr sse sind im Abschnitt 6 3 6 S 60 zu finden Die Selection Corner wurden auf der Basis des Beispiels in der Referenz 5 erstellt Die Implementierung der SelectionCorner Klasse ist elektronisch unter e Software SourceCode src Diagram e Software SourceCode include Diagram zu finden Textbox Um auf einer Transition Text anzuzeigen kann der Transition eine Textbox hinzugef gt werden Die Textbox wird standardm ssig auf den Mittelpunkt der Transition gesetzt Sie kann aber mit Hilfe der Maus an eine beliebige Stelle verschoben werden Die Position der Textbox ist somit durch den Mittelpunkt einer Transition und einen Vektor definiert Abbildung 33 DIE GRAPHISCHEN ELEMENTE ke _vectorFromCenter Abbildung 33 Positionierung der Textbox Die Klasse TextBox ist wie folgt definiert class TextBox public QObject public QGraphicsItem Q_OBJECT Q_INTERFACES QGraphicsItem public TextBox QGraphicsItem parent QRectF boundingRect const QPainterPath shape const void paint QPainter painter const QStyleOptionGraphicsItem option QWidget widget void setText QString text void adjustPosition QPointF center inline QPointF getVectorFromCenter return _vectorFromCenter inline void setVectorFromCenter QPointF vector _vectorFromCenter vector protected void mouseMoveEvent QGraphicsSceneMouseEvent m
15. Bedienungsanleitung mit einem komplexem Beispiel DIE GRAPHISCHE BENUTZEROBERFLACHE GUI Die graphische Benutzeroberflache GUI Die graphische Benutzeroberflache erlaubt es dem Benutzer den State Chart Editor zu bedienen Untenstehende Abbildung zeigt das Main Window des Editors e Clock State Chart rsydes State Chart Editor oe ae File Edit New X F 9 Le E KE ei Uv Select Add New State Chart Add Initialsate Add Terminatestate Add State Add Conditionstate Add Transition AddRegion Remove Region Copy State Chart to Clipboard Project View Property Editor y m 4 a Clock Transition Properties START General a INIT mm WAIT Name TICK fromlInit fe fromStart Source fe fromlnit INIT re fromWait fe fromTick Target Implementation 4 e State Charts 8 H Clock ZAK Abbildung 1 Das Main Window Das Main Window ist in drei Bereiche aufgeteilt Ganz links befindet sich eine Projekt und State Chart Ansicht die einen berblick zu den Zustandsmaschinen verschaffen In der Mitte befindet sich die Arbeitsfl che auf welcher die Zustandsmaschinen gezeichnet werden Ganz rechts wird ein Property Editor angezeigt welcher die Eigenschaften des ausgew hlten Elements anzeigt Eine Men leiste sowie eine Toolbar bieten dem Benutzer verschiedene Funktionalit ten Am unteren Fensterrand zeigt eine Statusleiste Informationen beispielsweise w hrend des La
16. Diagramm aktualisiert void addDrawItem DrawItem item uuid gibt die UUID des Diagramms zur ck inline QUuid uuid const return _uuid Mit dataItem erh lt man einen Zeiger auf das Objekt das die logischen Informationen des Diagramms enthalt inline DataItem dataItem return _dataltem Die Funktion setDataltem erlaubt es den Zeiger auf das Objekt das den logischen Teil enth lt zu setzen inline void setDataltem Dataltem item _dataltem item showGrid erlaubt es den Raster ein bzw auszuschalten inline void showGrid bool value _showGrid value Jede QGraphicsScene besitzt eine Eigenschaft die das Rechteck der Szene das Begrenzungsrechteck enth lt Dieses Rechteck definiert den Umfang der Szene und wird in erster Linie durch QGraphicsView verwendet um den scrollbaren Bereich zu bestimmen 3 Wird das Rechteck der Szene nicht gesetzt ist das Rechteck so gross wie das Begrenzungsrechteck aller Elemente die sich in der Szene befinden Beim Hinzuf gen von weiteren Elementen wird das Rechteck automatisch vergr ssert Das Rechteck wird aber nie automatisch verkleinert 3 5 3 DIE GRAPHISCHEN ELEMENTE ke shrinkSceneRectToContent erlaubt es nun das Rechteck der Szene auf den Inhalt zu verkleinern void shrinkSceneRectToContent QSize minimalSize QSize Wurde das Rechteck der Szene einmal gesetzt wird die automatische Vergr sserung nicht mehr unterst tzt Durch d
17. Initial Terminate und Condition State Zum Erstellen des graphischen Elements wird lediglich die paint Methode berladen Die Methode getConnectionPointAngle zur Ermittlung des Ankerpunkts der Transition wird im Abschnitt 6 3 3 S 56 beschrieben State Der Zustand wird durch ein abgerundetes Rechteck dargestellt welches den Namen des Zustands enth lt Ein Zustand besitzt standardm ssig eine Region es besteht aber die M glichkeit weitere Regionen hinzuzuf gen Besitzt ein Zustand mehrere Regionen werden diese durch eine vertikale Linie voneinander getrennt Ist das Verhalten eines Zustands implementiert wird dieses durch kleine Indikatoren in der linken unteren Ecke angezeigt Abbildung 35 Standard Zustand mit einer Region Zum Zeichnen des Zustands wurde wiederum die paint Methode berladen Action Indikatoren Wie bereits erw hnt kann das Verhalten des Zustandes implementiert werden Um im Diagramm anzuzeigen dass das Verhalten Action On Entry usw implementiert ist werden in der linken unteren Ecke Indikatoren angezeigt Action On Action On Entry Exit Action In State Abbildung 36 Zustand mit Action Indikatoren Um die Indikatoren anzuzeigen wird in der paint Methode berpr ft ob das Verhalten vorhanden ist oder nicht 5 4 3 DIE GRAPHISCHEN ELEMENTE ke Regionen Ein Zustand kann mehrere Regionen enthalten Um dem Zustand eine Region hinzuzuf gen wird eine Region erstellt und m
18. Main Windows Die Arbeitsfl che QGraphicsView Die QGraphicsView Klasse erlaubt es den Inhalt einer QGraphicsScene anzuzeigen Um eine Szene zu visualisieren muss dem QGraphicsView Objekt die Adresse der Szene mittels setScene angegeben werden Um die anzuzeigende Szene zu ndern wird ebenfalls setScene verwendet 3 Damit die View schliesslich angezeigt wird ist der Aufruf von show n tig Zum Beispiel QGraphicsScene scene lt add something to the scene gt QGraphicsView view amp scene view show view setScene amp otherScene set another scene 3 Das Diagramm QGraphicsScene Folgend wird das Diagramm beschrieben und kurz auf dessen Implementierung eingegangen Beschreibung Jede Zustandsmachine wird in einem Diagramm gezeichnet Ein Diagramm wird durch die Klasse Diagram welche von QGraphicsScene abgeleitet ist repr sentiert Die Diagramme k nnen auf der Arbeitsfl che angezeigt werden wie es der vorherige Abschnitt beschreibt DIE GRAPHISCHEN ELEMENTE Eine QGraphicsScene kann QGraphicsItem enthalten wie es das untenstehende Diagramm zeigt Die in der Szene enthaltenen Elemente werden spater in der View angezeigt QGraphicsScene QGraphicsltem Diagramm 12 Eine QGraphicsScene kann QGraphicsItem enthalten Somit ist es m glich dem Diagramm sp ter die verschiedenen Elemente zum Zeichnen der Zustandsmaschine hinzuzuf gen QGraphicsltem W Diagramm 13 Ein D
19. Map containing all regions read L Dem DOM Parser muss ein Zeiger auf das Diagrammmodell mitgegeben werden in welches die geladenen Daten geschrieben werden sollen Anschliessend kann mit readFile der Ladevorgang gestartet werden Die Anweisungen um ein Diagrammmodell zu laden sehen wie folgt aus DiagramModel diagramModel DiagramModel instance DiagramDomParser parser diagramModel parser readFile amp ioDevice Die Implementierung des DiagramDomParser ist elektronisch unter e Software SourceCode src DiagramModel e Software SourceCode include DiagramModel zu finden eeeeeeee ee eeeeeeeeseseecseese pe pn pn ne pn eee eee BB BB BE BB BE BB BB BE BB BD ee BB RB DB BE BE BB se BE BB BR BB RB BE BD BE ee ees 5 1 5 2 5 2 1 DIE GRAPHISCHEN ELEMENTE p Die graphischen Elemente Dieser Abschnitt beschreibt wie die Arbeitsfl che aufgebaut ist um auf dieser Zustandsmaschinen zeichnen zu k nnen Zudem werden die graphischen Elemente die zum Zeichnen verwendet werden erl utert Bei der Arbeitsfl che die sich im Central Widget des Main Windows befindet handelt es sich um eine QGraphicsView die es erlaubt graphische Elemente anzuzeigen Eine solche View zeigt jeweils ein Diagramm QGraphicsScene an Falls mehrere Diagramme existieren ist es n tig der View anzugeben welches Diagramm anzuzeigen ist OGraphicsScene Diagramm 11 Klassendiagramm zum Aufbau der Arbeitsfl che des
20. Prinzip die logische Information des Projektes oder von Elementen des Projektes und der andere die graphische Darstellung der jeweiligen Elemente Als minimale Resultate werden die folgenden erwartet Vollst ndiger Editor f r Zustandsmaschinen Abspeicherung in zwei Dateiformaten Abschlussbericht Pr sentation f r Verfechtung Bedienungsanleitung und Tutorial mit komplexem Beispiel Vollst ndiger Quellcode auf CD D lais Termine Attribution du th me Ausgabe des Auftrags Exposition publique Ausstellung Diplomarbeiten 16 05 201 02 09 2011 Remise du rapport Abgabe des Schlussberichts D fense orale M ndliche Verteidigung 11 07 2011 12 00 Uhr d s la semaine 36 ab Woche 36 Signature ou visa Unterschrift oder Visum Responsable de l orientation Leiter der Vertiefungsrichtung Par sa signature I tudiant e s engage respecter strictement la directive et le caract re confidentiel du travail de dipl me qui lui est confi et des informations mises sa disposition Durch seine Unterschrift verpflichtet sich der Student die Richtlinie einzuhalten sowie die Vertraulichkeit der Diplomarbeit und der daf r zur Verf gung gestellten Informationen zu wahren Rapport re u le Schlussbericht erhalten am Visa du secr tariat Visum des Sekretariats Ob S Hes so wais EE Haute Ecole Sp cialis e de Suisse occidentale Fachhochschule Westschweiz Universi
21. StateMachineltem Regionltem Stateltem ConditionStateltem InitialStateltem TerminateStateltem Diagramm 5 Die Schnittstelle zusammen mit der Datenstruktur Die Schnittstelle ist wie folgt definiert QAbstractitemModel DataModel static _plnstance bool rootitem Rootitem DataModel parent QObject 0 virtual DataModel 1 static instance DataModel const data index const QModellndex A role int QVariant const index row int column int parentconst QModellndex amp QModellndex QModellndex const parent index const QModellndex amp QModellndex const rowCount parent const QModellndex amp QModellndex int const columnCount parent const QModellndex amp QModellndex int const flags index const QModellndex amp Ot ltemFlags setData index const QModellndex amp value const QVariant amp role int Qt EditRole bool additem parent Dataltem item Dataltem bool removeltem parent Dataltem item Dataltem bool deleteltem parent Dataltem item Dataltem bool setNewParentitem newParent Dataltem item Dataltem bool resetModel bool const getitem index const QModellndex amp Dataltem const getindex item Dataltem QModellndex const rootlitem Rootitem signal itemAddedT oDataModel item Dataltem void signal itemDataChanged value bool void
22. archive file file in the archive QuaZipFile file amp zip DiagramDomParser diagramParser _diagramModel DataDomParser dataParser _dataModel get files in the zip archive for bool more zip goToFirstFile more more zip goToNextFile Folgend das Beipsiel zum Parsen der graphischen Informationen if file open QIODevice ReadOnly QApplication restoreOverrideCursor QMessageBox critical 0 tr Error while loading tr An error occured while opening file Error Code 1 arg file getZipError return false read graphical data if file getActualFileName graphical xml diagramParser readFile amp file file close 6 4 2 Exportieren Zum Exportieren der logischen Informationen wird mittels des beschriebenen StreamWriters siehe 3 4 1 eine XML Datei erstellt QFile exportFile fileName exportFile open QIODevice WriteOnly QXmlStreamwWriter writer amp exportFile writer lt lt _dataModel exportFile close XML 2 lODevice Data Model Abbildung 43 Exportieren der logischen Informationen eseeeeeeeee eCeeeeeceeseecseeeeeeeseeeeeeceeeeeeseeeeeeeeee eee BB DB ee BB BR DB BE BE BB se BE BE BB BR BB RB BE BD BE BB ees 6 4 3 6 4 4 IMPLEMENTIERUNG DES STATE CHART EDITORS ke In Zwischenablage kopieren Um die angezeigte Zustandsmaschine als Bild in die Zwischenablage zu kopieren wird zuerst die Zustandsmaschine als Bild gerendert
23. des Elements zu setzen bool setData const QVariant amp value Die Funktion parent gibt das Eltern Element des Elements zur ck DataItem parent Mit der Funktion setParent l sst sich das Eltern Element setzen inline void setParent DataItem parent _parentItem parent childNumber gibt die Position des Elements in der Liste des Eltern Elements zur ck int childNumber const appendChild f gt dem Element ein Kind hinzu Diese Funktion ist rein virtuell und muss in der abgeleiteten Klasse implementiert werden denn nicht jedes Element kann dieselben Typen von Elementen enthalten virtual bool appendChild Dataltem item 0 Mit removeChild l sst sich ein Kind Element entfernen wird aber nicht gel scht virtual bool removeChild Dataltem item deleteChild entfernt wie removeChild das Kind Element dieses wird aber zus tzlich gel scht virtual bool deleteChild Dataltem item Der Typ des Elements kann mit type ermittelt werden inline int type return _type typeAsString liefert den Typ des Elements als String Diese Methode ist n tzlich wenn das Modell gespeichert wird QString typeAsString uuid gibt die UUID des Elements zur ck inline QUuid uuid const return _uuid name gibt den Namen des Elements zur ck inline QString name return _name Die Funktion setName erlaubt es den Namen des Elements zu ndern inline void setName Q
24. ebenfalls verwendet Vorg ngig an die Implementierung wurden jeweils die UML Modelle des zu entwickelnden Codes spezifiziert kA a d Ku TO Pramit ee a i a babin ribon i HES SO Wallis Die obenstehende Abbildung zeigt eine mittels des erw hnten Tools entwickelte Route du Rawyl 47 Zustandsmaschine 1950 Sitten Tel 027 606 85 11 Web www hevs ch Die graphische Benutzeroberfl che bietet dem Benutzer eine Toolbar zum Zeichnen Ansichten zur bersicht des Modells sowie ein Property Editor zur Bearbeitung der Eigenschaften der verschiedenen Elemente INHALTSVERZEICHNIS Inhaltsverzeichnis ED tr EN 1 LL Beschreibung der Diplomarbeit 1 SE e Ee Diploma beit een 1 2 Die graphische Benutzeroberfl che GUI nsnsrsnnoneonennennennennnnnnunennennnnnnnnnunnennennennennnnnnnnnnnnnannnnn 2 ZA IC en nee 3 ARE Die Projer Ansicht re ee ee ee tema nr crn erie tre rete ee nator ee eee 3 DM NOM ET EE E 3 22 Die AT ee TE 4 23 Der ol 6 0 EA EE 4 2 3 1 Zustandsmaschine Pseudo Zustand Region nsessresmnsenennennnnennnnennnnennnnnnnnnennnnennnnennnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn 5 o Se ee er ee 5 293 en UO AE A N A A AA 6 E UE E S E E S S E E E E E ee 6 E ER Men EE 6 222 VO Menu ne 7 243 PaSa a NON eee ee ne ee een 7 CS DEE KK 0 e E EE 7 20 Die Eege 7 3 Die Entwicklung des Datenmodells sssssssusunnunnnnunnununnunnnnunnnnununnunnnnunnnnunnunnnnunnnnnnnnnnnnnnnnnnnnnnnnnnnnn annan 8 SS Cir A Aw DAU sis
25. einem IODevice wurde ebenfalls ein DOM Parser DiagramDomParser erstellt Dieser Parser erstellt anhand des IODevices ein DOM Dokument durchl uft es und erstellt Schritt f r Schritt die Diagramme und f gt sie zum Diagrammmodell hinzu Der DOM Parser DiagramDomParser ist wie folgt definiert class DiagramDomParser public DiagramDomParser DiagramModel model bool readFile QIODevice ioDevice inline QHash lt QUuid DrawItem gt itemsLoaded return _itemsLoaded inline QHash lt QUuid Region gt regionsLoaded return _regionsLoaded private void parseDiagramDataElement const QDomElement amp element void parseDiagramElement const QDomElement amp element Diagram diagram void parseDiagramItemElement const QDomElement amp element Diagram diagram State parentState 0 Region parentRegion 0 void parseRegionItemElement const QDomElement amp element Diagram diagram State parentState 0 Region parentRegion 0 void parseConnectionItemElement const QDomElement amp element Diagram diagram State parentState 0 Region parentRegion 0 int getType const QDomAttr attr bool linkConnection ConnectionItem connection QUuid startUuid QPointF startPoint QUuid endUuid QPointF endPoint private DiagramModel _model lt Pointer to the diagram model QHash lt QUuid DrawItem gt _itemsLoaded lt Map containing all items read QHash lt QUuid Region gt _regionsLoaded lt
26. erstellt und die angezeigte Szene in diesen Printer gerendert void MainWindow print QPrinter printer printer setOrientation QPrinter Landscape printer setPageMargins 20 20 20 20 QPrinter Millimeter Diagram currentScene dynamic_cast lt Diagram gt _view gt scene if currentScene QPrintDialog printDialog amp printer this if printDialog exec QPainter painter amp printer currentScene gt clearSelection currentScene gt shrinkSceneRectToContent painter window size currentScene gt showGrid false IMPLEMENTIERUNG DES STATE CHART EDITORS ke WORKAROUND painter fillRect painter window QColor Qt transparent WORKAROUND painter setRenderHint QPainter Antialiasing currentScene gt render amp painter currentScene gt showGrid true currentScene gt restoreSceneRect painter end else QMessageBox warning 0 tr Printing Error tr No state chart shown to print Bemerkung Die aktuelle Version 4 7 4 der Qt Library beinhaltet einen Fehler beim Rendern in einen Printer Daher musste zuerst ein transparentes Rechteck im Printer gezeichnet werden Se eee eege ee eeeeeegee sec eege ee eege cece Seege eeeege ee eeeegeeee eege ee eege eeeeeeeeee eege eg Co kr ZA NW NLEEELIELIELELTELIILELTELTELELTELTILIELTELTELELITELTILEITELITELELIELIILELTIIIELTEN Se Hes so WALLIS rec cee eee cece eee eee ee eee eee eee 67 80
27. handelt gibt es einige Punkte die in einer zuk nftigen Version optimiert oder hinzugef gt werden k nnten Optimierung des Ankerpunkts Der Algorithmus der zur Berechnung der Ankerpunkte beim Zeichnen von Transitionen implementiert wurde ist sehr einfach aufgebaut und k nnte in einer n chsten Version ausgearbeitet werden Zoom Werden komplexe und grosse Zustandsmaschinen gezeichnet reicht die Arbeitsfl che nicht mehr aus um diese anzuzeigen Daher ist es sinnvoll eine Zoom Funktion hinzuzuf gen Copy Paste Beim Zeichnen von Zustandswechseldiagrammen kann es vorkommen dass bestimmte Elemente mehrfach verwendet werden Eine Copy Paste Funktion w rde somit das Zeichnen solcher Zustandsmaschinen vereinfachen L schen der Elemente via Projekt Ansicht In der aktuellen Version ist das L schen von Elementen nur auf der Arbeitsfl che m glich Handelt es sich um eine gr ssere Zustandsmaschine muss das zu l schende Element im Diagramm gesucht werden In der Projekt Ansicht k nnten die Elemente schneller gefunden werden jedoch wird das L schen hier nicht unterst tzt Einbinden eines Code Generators Der State Chart Editor dient vorl ufig nur zum Zeichnen der Zustandswechsel diagramme Die logischen Informationen m ssen zur Weiterverarbeitung exportiert werden In einer n chsten Version k nnte beispielsweise der Code Generator direkt eingebunden werden Drucken des implementierten Programmcodes Das Drucken des implemen
28. setLine QLineF editor gt connectionStart mouseEvent gt scenePos mouseEvent gt accept Maustaste wird losgelassen Beim Loslassen der Maustaste wird uberpruft ob das oberste graphische Element als Target verwendet werden darf und ob Source und Target Element dasselbe Parent Item besitzen Falls die berpr fung erfolgreich war k nnen die Ankerpunkte berechnet und die Transition erstellt werden Besitzen beide Elemente dasselbe Parent Item wird die Transition demselben Parent Item hinzugef gt ansonsten dem Diagramm Gleich wie bei esee nn Be nn pn nn Be nn Ban 2 pn pn pe pn pp p BB BE BB BE BB BB BE BB BE BB BB RB BB DB ese BD BB BD BE BB DB se BE BB BR BB BB BB BE BB eee IMPLEMENTIERUNG DES STATE CHART EDITORS ke den Elementen wird der logische Teil erstellt mit dem graphischen Element verlinkt und anschliessend dem Modell hinzugef gt Am Ende wird die Vorschau der Transition verworfen void Diagram mouseReleaseAddConnection QGraphicsSceneMouseEvent mouseEvent Editor editor Editor instance DiagramItem to NULL if source and destination are available and destination type is ok then create connection if editor gt from amp amp to amp amp to gt parentRegion editor gt from gt parentRegion amp amp to editor gt from amp amp to gt type Diagramltem StateType to gt type DiagramItem ConditionStateType to gt type D
29. von Transitionen das Verschieben von Elementen sowie das Entfernen von Elementen und Transitionen Ebenfalls das ndern der Gr sse eines Zustands und das Hinzuf gen Entfernen von Regionen in einem Zustand wird erl utert Am Ende wird beschrieben wie der Property Editor der einzelnen Elemente erstellt wird Bemerkung Zur Interaktion zwischen s mtlichen Komponenten des State Chart Editors wurde der Signal Slot Mechanismus von Qt verwendet S mtliche Signale und Slots sind in der Doxygen Dokumentation elektronisch unter Software SourceCode documentation beschrieben Ge eege eege ee eeeegeegee gege eege ee eege eegeege 2229 99 E28 99988 899 eege 99 829 BP E99 8 EP 9 99 8 eege eege BR 88 8 Re VALAIS eeeceececeoseocooeecese 6 egegegegeegeegeeeeggegegeegegegeegeeegegeegeegeg 6 eeeegegegeeegegeegeegeeeeeee e A j Wr ELITE TEEN u 0000000299006 0060006 0900000 0 000006020060 060000 06000006060 000 AA WALLIS e seesee 888 88 888 222 BE BEE BEE BE BB 88 8 8 8 BB 8 ee eeeese 2 BEE E88 eee 8 8 89 8 8 88 2 22 88 888 888 88 ee eseeeeceeeee en pp en BB 8 Ban 2 pn Ban pe pn BB p BB BE BB BE BB BB BE BB BE BB BB RB BB DB BB BD BR BD DB BE EB BB DB BE BE BB BR BB BB BB BE BB BB 8 IMPLEMENTIERUNG DES STATE CHART EDITORS ke 6 3 1 Diagramm hinzuf gen entfernen anzeigen Um ein Diagramm hinzuzuf gen wird im Men oder der Toolbar Add New State Chart gew hlt Zum Entfernen eines Diagramms wird dieses in der S
30. wird von den Views verwendet um auf die Daten des Diagrammmodells zugreifen zu k nnen Alle erstellten Indizes enthalten einen Zeiger auf das Diagramm wodurch der Zugriff auf dieses Diagramm sichergestellt wird N here Informationen zum Index wurden bereits im Kapitel 3 1 1 Der Index QModellndex gegeben QModelIndex index int row int column const QModelIndex amp parent const Die Funktion data gibt die der role entsprechenden Daten zur ck Im Fall des Diagrammmodells handelt es sich bei den Daten lediglich um den Namen Qt DisplayRole QVariant data const QModelIndex amp index int role const setData erm glicht es den Namen des Modells zu setzen Die entsprechende role dafur ist Qt DisplayRole bool setData const QModelIndex amp index const QVariant amp value int role Qt EditRole Die Funktion rowCount retourniert die Anzahl Diagramme im Diagrammmodell Als Parameter wird immer ein leerer Index bergeben da s mtliche Elemente der Liste kein Eltern Element besitzen int rowCount const QModelIndex amp parent QModelIndex const flags liefert die Eigenschaften die das Modell unterst tzt Beispielsweise dass die Diagramme selektierbar sind Diese Methode wird von den Views verwendet Qt ItemFlags lags const QModelIndex amp index const Ist der Index eines Diagramms bekannt liefert getItem einen Zeiger auf das Diagramm das durch index referenziert ist Diagram getItem c
31. zu k nnen wurde ein Stream Writer von Qt genutzt und zum Laden wurde ein DOM Parser erstellt Graphische Elemente In einer n chsten Etappe wurde die graphische Benutzeroberfl che des State Chart Editors entwickelt Um die Benutzeroberfl che m glichst einfach zu erstellen boten sich die Qt Libraries an Mit Hilfe dieser Libraries wurde das Hauptfenster mit den verschiedenen Bereichen erstellt Zur Anzeige der hierarchisch gegliederten Daten konnten direkt Qt Views verwendet werden da die Modelle auf dem Model View Konzept von Qt aufgebaut sind Ebenfalls die Men leiste und Toolbar liess sich einfach implementieren 8 3 SCHLUSSFOLGERUNG ke Die grossten Schwierigkeiten bereitete das Zeichnen der Zustandsmaschinen Es musste zuerst nach einer geeigneten L sung gesucht werden Wie beim Erstellen der Benutzeroberfl che konnte der passende Ansatz in den Bibliotheken von Qt gefunden werden Mit Hilfe des Graphics Framework konnte das Zeichnen schliesslich erfolgreich realisiert werden Implementierung Mit Hilfe der Entwicklung der Datenmodelle und der graphischen Elemente konnte schliesslich der State Chart Editor implementiert werden Nach der Realisierungsphase wurde der State Chart Editor auf seine Funktionalit t berpr ft Als Resultat kann ein funktionsf higes modellbasiertes Entwicklungstool geliefert werden Vorschl ge zur Weiterentwicklung Da es sich beim realisierten Entwicklungstool um eine Erstversion
32. 068 eee eeeeececeeoeo eo eooeooo eee eee ee eee W WALLIS e AER A ERKK A EREEEEEEEREERE A EE 82888888 2 228 8 BB BB BB BE BB BEP BE BE BE BB BE BE BE BB RB BE BE BB BB BB BB BB BB SB BB BB 8 BO gt d ee se ee E lt lt DIE GRAPHISCHE BENUTZEROBERFLACHE GUI be BW 2 4 2 Das Ment Edit Im Men Edit kann in den Selektierungsmodus gewechselt und den Zust nden Regionen hinzugef gt entfernt werden Zudem wird dem Benutzer eine Funktion angeboten die angezeigte Zustandsmaschine als Bild in die Zwischenablage zu kopieren damit diese beispielsweise zum Erstellen einer Dokumentation verwendet werden kann Clock State Chart rsydes State Chart Editor File New Select ZC Add Region g Add Terminatestate Add SE o Remove Region W Copy State Chart to Clipboard Abbildung 10 Das Men Edit 2 4 3 Das Men New S mtliche Elemente die der Zustandsmaschine hinzugef gt werden k nnen k nnen in diesem Men ausgew hlt werden ery FE Clock State Chart rsydes State Chart Editor File Edit Add New State Chart On 9 Add Initialsate g CG Select Add Terminatestate te Add Terminatestate Add ga Add State Add Conditionstate re Add Transition Abbildung 11 Das Men New 2 5 Die Toolbar Damit der Benutzer sich nicht st ndig durch die Men s qu len muss bietet die Toolbar einen schnellen Zugriff auf die wichtigsten Funktio
33. ATE CHART EDITORS ke Die Funktion setAllowedAreas gibt an wo das QDockWidget angedockt werden darf Mittels addDockWidget wird das QDockWidget dem Main Window hinzugef gt dockWidget gt setAllowedAreas Qt LeftDockWidgetArea addDockWidget Qt LeftDockWidgetArea dockWidget Mit setWidget kann dem QDockWidget ein Widget zur Anzeige gesetzt werden Die Modelle Die Projekt Ansicht und State Chart Ansicht zeigen die beschriebenen Modelle an siehe Abschnitt 3 und 4 Zum Anzeigen der Modelle muss zuerst das Modell und eine View erstellt werden Schliesslich kann der View mit setModel das Modell das angezeigt werden soll angegeben werden Die Projekt Ansicht wird als Baumstruktur angezeigt Die Anweisungen sehen wie folgt aus DataModel dataModel DataModel instance QTreeView treeView new QTreeView treeView gt setModel dataModel projectViewDock gt setWidget treeView Um die Zustandsmaschinen anzuzeigen wird eine Listenansicht erstellt DiagramModel diagramModel DiagramModel instance QListView listView new QListView listView gt setModel diagramModel stateChartViewDock gt setWidget listView Statusleiste Auf die Statusleiste des Main Windows kann mit statusBar zugegriffen werden Mittels show wird diese angezeigt statusBar gt show Um Meldungen in der Statusleiste anzuzeigen dient die Funktion showMessage Es kann der Text sowie die Anzeigeda
34. B eee BB DB ese BD BR BD DB BE EB BB se BE BE BB BR BB BB BB BE BB ee 6 6 3 4 6 3 5 IMPLEMENTIERUNG DES STATE CHART EDITORS ke Berechnung der Ankerpunkte getConnectionPointAngle berechnet aus dem Punkt wo die linke Maustaste gedr ckt bzw losgelassen wurde die Ankerpunkte der Transition Bei einem rechteckigen Element wird der Punkt wo die Maustaste geklickt losgelassen wurde an den Elementrand verschoben und zur ckgegeben Beim kreisf rmigen Element wird der Winkel zwischen der x Achse und der Verl ngerung vom Mittelpunkt und dem Punkt wo die Maustaste geklickt losgelassen wurde zur ckgegeben Anschliessend kann der Ankerpunkt mit Hilfe des Mittelpunkts des Radius und des Winkels berechnet werden lue point glue point 8 P P point clicked Fi center angle DEE EEN 1 X axis el point clicked radius Abbildung 40 R ckgabe von getConnectionPointAngle Elemente Transitionen entfernen Zum Entfernen von Elementen oder Transition wurde der Key Event Handler in der Diagram Klasse implementiert Wird die Delete Taste gedr ckt so wird eine Liste der zu l schenden Elemente bzw Transitionen erstellt es handelt sich um die markierten Elemente Anschliessend wird die Liste durchlaufen und Element f r Element aus den Modellen entfernt und gel scht Dabei wird die Liste der zu l schenden Element aktualisiert um zu verhindern das ein Element gel scht werden wil
35. Basisklasse ist wie folgt definiert _childltems QList lt Dataltem gt connections QList lt Dataltem gt parentitem Dataltem name QString icon Qlcon uuid QUuid type int Dataltem type int parent Dataltem 0 virtual Dataltem child number int Dataltem const childCount int const data role int QVariant setData value const QVariant amp bool parent ProjectDataltem inline setParent parentDataltem void const childNumber int pure virtual appendChild item Dataltem bool virtual removeChild item Dataltem bool virtual deleteChild item Dataltem bool inline type int typeAsString QString inline const uuid QUuid inline name QString inline setName name QString void addConnection connection Dataltem void removeConnection connection Dataltem void deleteConnection connection Dataltem void inline connections QList lt Dataltem gt virtual propertiesWidget QWidget virtual writeToXm Stream stream QXmlStreamWriter amp QXmlStreamWriter amp signal dataToDrawChanged void friend operator write QXmlStreamWriter amp item Dataltem QXmlStreamWriter amp Diagramm 2 Dataltem Klasse Es handelt sich um eine Basisklasse welche von QObject erbt da der Signal Slots
36. Bereich Ingenieurwissenschaften y CH 1950 Sitten 2 Studiengang Infotronics Diplom 2011 Ralph Martig Model based Software Development Tool Chain for Embedded Systems Dozent Medard Rieder Experte Rico Steiner Sion 11 Juli 2011 Da es sich um den nicht korrigierten Originalbericht des Studenten handelt kann dieser Fehler oder ungenaue Angaben umfassen Model based Software Development Tool Chain for Embedded Systems Diplomarbeit University of Applied Sciences Western Switzerland Systems Engineering gi G Bh i o amp eo F 7 if k FI OT u g ga E rF UR AN Laf TR ai Gel i us ri F r KN SN d Fi En d cE RT ZF WW eh LL Geh A 8 B E C CT Pr toa oo e e e A e Din LO E F Fy j m Se e P H Te Z Z TTF E Ren j yf f EL e u dh Ir LA d j Fi f F 8 n A ml EN A u Sie F F KN MO eh H ae S nr An f H F WW g H Ban S 3 ge i k A z i ur d 3 SW a KA iT m 1 i ch mee cit i 1 i CH i amp cite 5 ur ECHO dl vorgelegt von Ralph Martig Studiengang Systemtechnik Vertiefungsrichtung Infotronics Nr der Diplomarbeit it 2011 51 Dozent Medard Rieder Assistenten Michael Clausen Thomas Sterren Experte Rico Steiner 2011 HES SO Valais Donn es du travail de diplome FO 1 2 02 07 AB a Daten der Diplomarbeit po131701 2009 Ann e acad mique Studienjahr No TD Nr DA 2010 2011 it 2011 51 Mandant Auftraggeber Etudia
37. Da beim Dr cken der Maustaste die Position im Corner gespeichert wurde und die aktuelle Mausposition bekannt ist kann diese Methode die Verschiebung berechnen anhand der Corner Position das Vorzeichen der Gr ssen nderung bestimmen und somit die Gr sse des Elements ndern Die vollst ndige Implementierung der resizeltem Methode ist in der State Klasse elektronisch unter e Software SourceCode src Items zu finden Die Gr ssen nderung wurde auf der Basis des Beispiels in der Referenz 5 realisiert KREE nn Be Ben BB BB B BB BB BB BD BB BB BB BB BB RB BE BB BB BR BB BB BR BB BE BB BB RB BB DB BB BB BR RB BE BB BB eae BE BR BR BB BB BB BB BB BB BB 6 3 7 6 3 8 IMPLEMENTIERUNG DES STATE CHART EDITORS ke Einem Zustand Regionen hinzuf gen entfernen Um dem Zustand eine Region hinzuzuf gen oder zu entfernen muss sich der State Chart Editor im entsprechenden Modus befinden Hinzuf gen mousePressAddRegion Zum Hinzuf gen einer Region wird berpr ft ob die Maus innerhalb eines Zustands gedr ckt wurde Falls die Maustaste innerhalb eines Zustands gedr ckt wurde wird der Zustand verbreitert eine Region und ihr dazugeh riger logischer Teil erstellt die Region dem Zustand hinzugef gt und das graphische und logische Element den Modellen hinzugef gt Entfernen mousePressRemoveRegion Zum Entfernen einer Region wird berpr ft ob die Region in welche geklickt wurde leer ist und ob diese Region nicht die e
38. Dataltem kann der Zeiger auf den logischen Teil des Elements gelesen bzw gesetzt werden inline Dataltem dataltem return _dataltem inline void setDataltem Dataltem dataItem _dataltem dataltem writeToXmlStream schreibt die Informationen des Elements in einen Stream Um spezifische Informationen eines Elements zu schreiben muss diese Funktion in der abgeleiteten Klasse neu implementiert werden virtual QXmlStreamWriter amp writeToXmlStream QXmlStreamWriter amp stream DIE GRAPHISCHEN ELEMENTE ke Die Methode resizeltem ndert die Gr sse des Elements in Funktion des aktiven Selection Corners und der aktuellen Mausposition Diese Methode muss in den abgeleiteten Klassen implementiert werden virtual void resizeItem SelectionCorner corner qreal mouseX qreal mouseY 0 Dieser Slot wird aufgerufen wenn die Auswahl des Elements ndert Die Selection Corner siehe 5 3 3 werden angezeigt oder nicht void onSelectionChanged Dieser Slot wird aufgerufen falls logische Informationen ge ndert haben welche vom graphischen Element angezeigt werden Das Element wird entsprechend aktualisiert virtual void onDataToDrawChanged Beschreibung der ConnectionItem Klasse Die ConnectionItem Klasse fasst die wichtigsten Eigenschaften und Methoden einer Transition zusammen Die Klasse beinhaltet eine Struktur welche abhangig von der Form der Source und Target Elementen Informationen zu den An
39. Item gt gespeichert Dieser Tag besitzt ebenfalls die Attribute type und uuid Zuden enth lt dieses Element Angaben zum Source und Target Element sowie Angaben zur Position des Transition Texts lt ConnectionItem type Transition uuld HHHHH HHHH HHHH HHHH HHHHHHHHHHHHY gt lt Source itemUuid HHHH HHHH HHHH HAHAHA X y gt lt Target itemUuid HHHH HHHH HHHH HRH X y gt lt TextBoxVectorFromCenter x y gt lt ConnectionItem gt Beispiel lt xml version 1 0 encoding UTF 8 gt lt DiagramData gt lt Diagram uuid 61af3933 5b91 47c5 b302 b2351f80700d gt lt ConnectionItem type Transition uuid 667719a3 a6c9 476c 8fda f0055a6ccf0e gt lt Source itemUuid f396f156 32d1 45a2 a2f4 9249d74457e5 x 140 y 60 gt lt Target itemUuid 1c4d3b43 7eb4 48ad b5d6 b60958b7014c x 140 y 120 gt lt TextBoxVectorFromCenter x 0 y 0 gt lt ConnectionItem gt lt ConnectionItem type Transition uuid 0b2ecfa6 55c9 4379 87e7 2261c81826d2 gt lt Source itemUuid 1c4d3b43 7eb4 48ad b5d6 b60958b7014c x 80 y 120 gt lt Target itemUuid f396f156 32d1 45a2 a2f4 9249d74457e5 x 80 y 60 gt lt TextBoxVectorFromCenter x 31 y 7 gt lt ConnectionItem gt lt ConnectionItem type Transition uuid 9f699367 d952 4bdf ac8e 370131f94c04 gt lt Source itemUuid 82ecfb 2 b44c 487f 81b7 e615b6efF7585 x
40. Mechanismus verwendet wird Das Eltern Element der Name das Icon und die UUID sind in den privaten Member Variablen _parentItem name _icon und _uuid gespeichert Das Icon wird sp ter zur Anzeige in der Projekt Ansicht 2 1 1 Die Projekt Ansicht verwendet Mit der UUID soll das Element eindeutig gekennzeichnet werden Seege eege ee eeeeeegee eege eege ee eege eegeeg eege egee ee 22 22 2992 9 292 92988292 8 9929 8 9992 99 299 BP eee VALAIS segeesessesgesggegegeegesggeegegeeeegeeesegeeeggeegeeegeoeggeegoeegeeeg DEE BEL BE EB SE BEE BB BP 6 HH eee ee eee f Hes so d WEE EE 12 80 e eseseSeu pen Ban ee pn Bene nn pn Be BB 8 BB BE BB 8 BE BE BB BB BB BB BR BE BEE BE BE ese BEE BB BR BR BR BB BE BE ees 3 2 2 DIE ENTWICKLUNG DES DATENMODELLS ke Ebenfalls der Typ des Elements ist in einem privaten Attribut abgelegt Das Attribut _ childItems enth lt eine Liste von Zeigern auf die Kind Elemente die ein Element besitzt Die Liste _connections enth lt Zeiger auf die Transitionen die auf ein Element f hren oder es verlassen Die Methoden erlauben folgende wichtige Funktionen e child und childCount erlauben dem Modell Informationen zu den in einem Element enthaltenen Kind Elementen zu erhalten e Informationen zum Namen und zum Icon k nnen mit data erhalten werden e Um einem Element ein Kind hinzuzuf gen wird appendChild verwendet Zum Entfernen eines Kindes dient removeChild bzw deleteChild
41. String name _name name DIE ENTWICKLUNG DES DATENMODELLS be Mit der Funktion addConnection lasst sich ein Zeiger auf eine eingehende bzw ausgehende Transition hinzuf gen Dabei muss berpr ft werden dass es sich beim angegebenen Parameter auch wirklich um eine Transition handelt void addConnection Dataltem connection if connection gt type DataItem TransitionType _connections append connection Mit removeConnection l sst sich ein Zeiger auf eine Transition entfernen wird aber nicht gel scht void removeConnection Dataltem connection deleteConnection entfernt wie removeConnection den Zeiger auf eine Transition diese wird aber zus tzlich gel scht void deleteConnection Dataltem connection Die Funktion connections gibt eine Liste aller eingehenden bzw ausgehenden Transitionen des Elements zur ck inline QList lt DataItem gt connections return _connections propertiesWidget gibt den Property Editor des Elements zur ck Diese Funktion muss f r jedes Element entsprechend implementiert werden virtual QWidget poropertiesWidget writeToXmlStream schreibt die Informationen des Elements in einen Stream Um spezifische Informationen eines Elements zu schreiben muss diese Funktion in der abgeleiteten Klasse neu implementiert werden virtual QXmlStreamwWriter amp writeToXmlStream QXmlStreamWriter amp stream Das Signal dataToDrawChanged wird gesendet fal
42. Ursprungs kann nun angegeben werden wie der Ursprung von der linken oberen Ecke entfernt ist Folgende Abbildung versucht dies zu veranschaulichen origin Origin relativ origin 0 oo Wo d relativ origin Abbildung 28 Relativer Ursprung der graphischen Elemente Bei Rechteckigen Elementen ist der Ursprung jeweils die linke obere Ecke und bei kreisformigen Elementen der Mittelpunkt Implementierung der Diagramltem Klasse Die Klasse ist wie untenstehend gezeigt definiert Diagramltem uuid QUuid width qreal height qreal minimalWidth qreal _minimalHeight qreal relativeOrigin QPointF _corners 4 SelectionComer connections QList lt Connectionltem gt dataltem Dataltem Diagramltem minWidth qreal minHeight qreal origin QPointF uuid Quuid QUuid virtual Diagramltem virtual const boundingRect QRectF pure virtual const shape QPainterPath pure virtual paint painter QPainter option const QStyleOptionGraphicsitem widget QWidget void setHigherLayer void setDefaultLayer void sceneE ventF ilter watched QGraphicslitem event QEvent bool pure virtual const getConnectionPointAngle pointClicked QPointF QVariant addC onnection connection Connectionltem void removeConnection connection Connectionltem void deleteConnection connection Connectionltem void connections QList lt Connectio
43. Ys D File Edit New gt D OPH wae Select Add New State Chart Add Initialsate Add Terminatestate Add State Add Conditionstate Add Transition Add Region Remove Region Copy State Chart to Clipboard Project View el Property Editor Kl WW e REENEN ENEE State Charts StateMachine 1 Abbildung 10 Vorschau des Elements beim Einf gen T gt Untitled State Chart Editor e n File Edit New gt D OF Oma a V Select Add New State Chart Add Initialsate Add Terminatestate te Add Conditionstate Add Transition Add Region Remove Region Copy State Chart to Clipboard Property Editor Gi StateMachine 1 a EB Stael 0 EEE i WO Region ir State Charts StateMachine 1 Abbildung 11 Beim Einf gen wird das Element am Raster ausgerichtet Hes so wails 5 12 ZA BENUTZERHANDBUCH Elemente markieren Zum Markieren von Elementen wird in den Selektierungsmodus gewechselt Der Selektierungsmodus wird durch Anwahlen von Select im Men Edit oder in der Toolbar aktiviert Tae clockStateChartrsydes State Chart Editor il SE o Remove Region Project W Copy State Chart to Clipboard 4 Abbildung 12 Select Men Edit Abbildung 13 Select in der Toolbar Die Elemente k nnen nun durch Anklicken mit der linken Maustaste markiert werden Eine Mehrfachauswahl ist m glich durch Ziehen eines Rahmens
44. ageBox critical 0 tr Error while saving tr An error occured while saving graphical data Code 1 arg fileGraphic getZipError return false QXmlStreamwriter writerG amp fileGraphic write model to file writerG lt lt _diagramModel fileGraphic close Laden Beim Laden wird die Archiv Datei ge ffnet und entpackt Die Dateien in der Archiv Datei werden durchlaufen und mit den beschriebenen 3 4 2 und 4 4 2 DOM Parsern gelesen lODevice Data Model QuaZip Uncompressing Compressed File BERR EEEEEEEEEEEREEEEEEEEEEEEREEEEEEEEENEEEN 2 2922 BE BE eee ee see eegeege eee SP EEE BEE BEE PEPPER PR BB BR BE ERBE ER PO BE EB BP BB o n E 2 29 92099 e 22 8 EEE BEBSESEE SEE BR BEE BEP BB O6 O6 SH eo eee f Hee co M r 64 80 Seege eege ee eege 2a eege 2282 22 eege BEE ege BEE BEE 888 88888 888 98988 eeeeeeeeee se nennen eeeeeceoeses IMPLEMENTIERUNG DES STATE CHART EDITORS ke Der untenstehende Programmcode zeigt das Offnen der Archiv Datei create zip archive QFile zipFile fileName QuaZip zip amp zipFile open zip archive if Zip open QuaZip mdUnzip QApplication restoreOverrideCursor QMessageBox critical 0 tr Error while loading tr An error occured while loading file Error Code 1 arg zip getZipError return false Die Dateien in der Archiv Datei k nnen wie folgt durchlaufen werden create new
45. amp index const QVariant amp value int role Qt EditRole addItem f gt das Element item dem Element parent hinzu bool addItem Dataltem parent Dataltem item Mit removeItem kann das Element item vom Element parent entfernt werden Das Element item wird jedoch nicht gel scht bool removeltem Dataltem parent DataItem item deleteItem entfernt gleich wie removeItem das Element item Zus tzlich wird das Element item gel scht und dessen Speicher freigegeben bool deleteItem DataItem parent DataItem item Die Funktion setNewParentItem erlaubt es das Element item im Modell zu verschieben Das heisst es wird einem anderen Element newParent hinzugef gt bool setNewParentItem Dataltem newParent Dataltem item resetModel entfernt alle Elemente Nach dem Funktionsaufruf enth lt das Modell nur noch das leere Root Element bool resetModel Ist der Index eines Elements bekannt liefert getItem einen Zeiger auf das Element das durch index referenziert ist Dataltem getItem const QModelIndex amp index const Umgekehrt wie bei getItem kann mit getIndex der Index eines Elements herausgefunden werden QModelIndex getIndex DataItem item const rootItem liefert einen Zeiger auf das leere Root Element inline RootItem rootItem const return _rootItem Das Signal itemAddedToDataModel wird gesendet wenn dem Datenmodell ein Element hinzugef gt wurde void ite
46. anra a SEET E aa EE 9 ih KI MAX LO MORE Na EE 10 32 DS TEE ee ee A 12 SC DE et e E 12 lo yoy mmm e 2s WEHEN ee ee eee ee eee er er 13 33 Ae are ee om Qi eye fc E 16 soL lee E 16 ENEE 17 3 4 Speichern und Laden des Datenmodells unsssnnnsnnnnennnnennnnnnnnnnnnnnnnnnnnnnnnnnnnnnsnnnnnnnnnnnnnnnnnnnnnnnne 20 SAL ST E E 20 SAD E 21 4 Die Entwicklung des Diagrammmodells ursssensneneenennnennennnunnennennnnnnennnnnnennnnnnennnnnnennennnnnennennnn 23 SN NR Ne e Ee SU Pa A cae cede hae ececctcebsntab coc Scce lac cotestwsgcaa einen 23 4 2 PSDR nn teren ee rere Peter rere rere ere reer re rere ee ree eee tree mene rey meter 24 43 Die Schnittstelle Model esse ne 24 INHALTSVERZEICHNIS 43 e e 24 432 EE 25 44 Speichern Und Laden Eee rn ee OOREEN aR 27 DAL Dee eee eee ee ee ae ee eee ee eee see errr 28 Ae 1 6 gt 0 E 29 5 DIeBr pmischen Ele mene seine 30 SL Die Arbeitstl ache OGraphiesViev a aatan iaai 30 5 2 Das Diagramm QGr phicsScene u snu nn n ea 30 wel et e 30 S2 Imple menti erine eer een ere ar ne ee ee eee ae ee re 31 5 3 Die Elemente Eine allgemeine Beschreibung unssnnenennnenennnnnnnnennnnnnnnnnnnnnnnnennnnnnnnnnnnn 33 E ERR 34 5 3 2 Die Bas sklasseder graphischen Elemente nanan nce 36 53 3 SLIECHOTF O00 pols een een en era 43 a DK ge e 44 SC DER TE DE ee ee ee ee ee 46 5 4 1 Initial State Terminate State und Condition State ccc cccccsseccsscsscessecessesescessecesseseesees
47. aten und Schnittstelle befinden sich in derselben Klasse i L a 8 du Abbildung 19 Prinzip des Diagrammmodells Anschliessend wird kurz auf die Implementierung des Diagrammmodells eingegangen hnlich wie beim Datenmodell wird zuerst der strukturelle Aufbau und schliesslich die Schnittstelle Modell beschrieben Zum Schluss wird gezeigt wie die Daten des Diagrammmodells gespeichert und geladen werden k nnen Der strukturelle Aufbau Die Diagramme werden in einer Liste abgelegt Anders als beim Datenmodel handelt es sich bei den Diagrammen immer um Top Level Elemente und besitzen daher kein Eltern Element Jedes Element kann durch einen Index siehe 3 1 1 Der Index QModellndex referenziert werden Somit k nnen die Views in Qt selbstst ndig auf die Daten zu greifen um diese anzuzeigen Die untenstehende Abbildung zeigt den Aufbau der Liste DIE ENTWICKLUNG DES DIAGRAMMMODELLS ke Row 0 Row 1 Row Quelle Qt Reference Documentation 3 Abbildung 20 Repr sentierung der Diagramme in einer Liste Die Diagramme werden direkt in einer Liste der Schnittstelle Modell abgelegt wie das folgende Klassendiagramm zeigt list DiagramModel lt gt SR Diagram Diagramm 7 Klassendiagramm der Struktur des Diagrammmodells 4 2 Das Diagramm Das Diagramm wird weiter unten im Abschnitt 5 Die graphischen Elemente n her beschrieben 4 3 Die Schnittstelle Modell DiagramModel 4 3 1 Beschreib
48. beitsfl che angezeigt und den Ansichten Projekt State Chart Ansicht hinzugef gt 5 Eine Zustandsmaschine anzeigen Durch Anklicken einer Zustandsmaschine in der State Chart Ansicht Abbildung 3 kann diese auf der Arbeitsfl che angezeigt und bearbeitet werden 6 Eine Zustandsmaschine l schen Um eine Zustandsmaschine vom Projekt zu l schen muss diese in der State Chart Ansicht Abbildung 3 ausgew hlt und die Delete Taste gedr ckt werden 7 Eine Zustandsmaschine zeichnen S mtliche Elemente die zum Zeichnen einer Zustandsmaschine ben tigt werden sind im Men New zu finden ClockStateChart rsydes State Chart Editor File Edit p Add New State Chart Add Initialsate Add Terminatestate Add State G Add Conditionstate Add Transition se see ee VALAIS eee o o Cc fy ve Jooo e nu WALLIS cece wf Ad VVALLID ee E see BENUTZERHANDBUCH 7 1 Elemente hinzuf gen Um dem Zustandswechseldiagramm ein Element hinzuzuf gen wird im Men New oder in der Toolbar das entsprechende Element ausgew hlt Anschliessend dr ckt man in der Arbeitsfl che an der gew nschten Position die linke Maustaste Eine Vorschau des einzuf genden Elements erscheint Durch bewegen der Maus kann das Element wunschgem ss positioniert werden Beim Loslassen der Maustaste wird das Element schliesslich platziert und am Raster ausgerichtet B T gt Untitled State Chart Editor e e
49. chervorgang in eine Archiv Datei verpackt und wie die Archiv Datei bei einem Ladevorgang entpackt werden kann Um Archiv Dateien zu erstellen wurde die ZLIB 8 zusammen mit QuaZip 7 verwendet Bemerkung Auf der Windows Plattform ist die ZLIB standardm ssig nicht installiert und muss daher zuerst installiert werden Speichern Beim Speichervorgang wird zun chst eine Archiv Datei QuaZip erstellt create new zip archive QFile zipFile fileName QuaZip zip amp zipFile if zip open QuaZip mdCreate QApplication restoreOverrideCursor QMessageBox critical 0 tr Error while saving tr An error occured while creating file Error Code 1 arg zip getZipError return false N IMPLEMENTIERUNG DES STATE CHART EDITORS Ges Anschliessend wird f r die logischen und graphischen Informationen ein ODevice QuaZipFile erstellt welche in der Archiv Datei verpackt werden Wie in den Abschnitten 3 4 1 und 4 4 1 beschrieben werden die Daten in das JODevice geschrieben lODevice Data Model P D QuaZip Compressing lODevice Diagram Model Compressed File Abbildung 41 Speichern in eine Archiv Datei Hier das Beispiel fur die graphischen Informationen create graphical archive file file in the archive QuaZipFile fileGraphic amp zip if fileGraphic open QIODevice WriteOnly QuaZipNewInfo graphical xml QApplication restoreOverrideCursor QMess
50. chineltem Regionltem Stateltem ConditionStateltem InitialStateltem TerminateStateltem Diagramm 1 Klassendiagramm der Datenstruktur eo eeees coocoo eecsceesec eee eee eseeees ses ge egeeeegegeegege sees amp sees p ee Zu VALAI 0090000000900 09900090 0200009 0000900009 00000000 0900090500 0959 90 0000000090090 0906000000000 00 980 A D AIA Ted eeeegeee ggeeg gegegeege A ERR eeeeseeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee ee eee 9 80 J WALLIS cc cee cee ce cee 00000000000000000000000000000000000000000000000000000000000 00000000000 ee o sec Ei 6 gt e A oo 5 H Dee e E G A Ei DIE ENTWICKLUNG DES DATENMODELLS ke Schliesslich k nnen die definierten Elemente in einer Baumstruktur dargestellt werden Rootltem StateMachineltem Stateltem Regionltem Regionltem InitialStateltem StateMachineltem Abbildung 15 Baumstruktur der Elemente 3 1 1 Der Index QModellndex Dieser Abschnitt soll kurz die Indexierung der Elemente mit Hilfe des QModellndex beschreiben Ein Index erlaubt es jedes Element eines Modells zu referenzieren um auf seine Informationen zugreifen oder diese bearbeiten zu k nnen Bei einer solchen Referenz handelt es sich um eine tempor re Referenz da sich die Struktur w hrend der Laufzeit ver ndern kann und somit der Index nicht mehr aktuell sein k nnte Um den Index eines Elementes zu erhalten sind drei Informationen n tig Es werden ein Zeiger auf das Element und
51. d der State Chart Editor gestartet wird automatisch ein neues leeres Projekt erstellt Um w hrend der Benutzung des Editors ein neues Projekt zu erstellen erfolgt dies durch w hlen von New File im Men File r Se ClockStateChart rsydes State Chart Editor New File Ctrl N e Open Ctrl O LJ Save Ctri Save as Ctrl Shift 5 Export Logical Part Print Ctrl P X Exit Ctrl Q Abbildung 5 New File Wenn ein neues Projekt erstellt werden will und bereits ein Projekt ge ffnet ist an welchem nderungen vorgenommen worden sind wird nachgefragt ob die nderungen gespeichert werden sollen State Chart Editor The file has been modified A Do you want to save your changes SIE Abbildung 6 Dialog Anderungen speichern eee om ZA VALAIS Hes so WALLIS BENUTZERHANDBUCH ke 4 Eine Zustandsmaschinen hinzuf gen und entfernen Um dem Projekt ein neues Zustandswechseldiagramm hinzuzuf gen wird im Men New oder in der Toolbar Add New State Chart angeklickt ClockStateChart rsydes State Chart Editor File Edit New p Add New State Chart 9 Add Initialsate Add Terminatestate t a Add State Add Conditionstate mg Add Transition Abbildung 7 Add New State Chart im Men New Add New State Chart Abbildung 8 Add New State Chart in der Toolbar Die hinzugef gte Zustandsmaschine wird auf der Ar
52. d true _view gt setScene diagram Entfernen Zum Entfernen eines Diagramms wurde der Key Event Handler der State Chart Ansicht implementiert Es wird berpr ft ob die Delete Taste gedr ckt wurde Beim Dr cken der Delete Taste wird das selektionierte Diagramm aus beiden Modellen entfernt void DiagramView keyPressEvent QKeyEvent keyEvent QListView keyPressEvent keyEvent 6 3 2 IMPLEMENTIERUNG DES STATE CHART EDITORS ke if keyEvent gt key Qt Key_Delete DiagramModel diagramModel DiagramModel instance Diagram diagram diagramModel gt getItem currentIndex if diagram DataModel dataModel DataModel instance dataModel gt deleteItem dataModel gt rootItem diagram gt dataltem diagramModel gt deleteItem diagram emit diagramDeleted Angezeigtes Diagramm wahlen Um ein Diagramm auf der Arbeitsflache anzuzeigen wahlt man dieses in der State Chart Ansicht aus Beim Selektionieren eines Diagramms in dieser Ansicht wird der Slot onItemSelectedInDiagramModel aufgerufen In diesem Slot wird auf das selektionierte Diagramm zugegriffen dessen Property Editor wird angezeigt und es wird der QGraphicsView der Arbeitsflache zum Anzeigen angegeben Der untenstehende Programmcode zeigt wie der onItemSelectedInDiagramModel Slot implementiert ist void MainWindow onItemSelectedInDiagramModel QModelIndex index Diagram diagram static_cast lt Dia
53. das DataModel 16 Diagramm 4 Die Schnittstelle Modell und ihr Zeiger auf das Root Element 16 Diagramm 5 Die Schnittstelle zusammen mit der Datenstruktul eesti 17 Diagramm 6 DataModel Klasse 2 une 17 Diagramm 7 Klassendiagramm der Struktur des Diagrammmodells cece 24 Diagramm 8 Implementierung von QAbstractListModel durch das DiagramModel 24 Diagramm 9 Klassendiagramm des Diagrammmodells nssnsnenneennnnnennnnnnnnnnennnnnennnn 25 Diagramm 10 DiagramModel Klasse nnnnnnreeenennnnennnnnnnnnnnennnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn 25 Diagramm 11 Klassendiagramm zum Aufbau der Arbeitsfl che des Main Windows 30 Diagramm 12 Eine QGraphicsScene kann QGraphicsltem enthalten EEN 31 Diagramm 13 Ein Diagramm kann verschiedene graphische Elemente enthalten 31 Diagramo 14 Diagram Rlasse nun 31 Diagramm 15 Basisklassen der graphischen Elemente unnnnseennnnennnnnnnennnnnnnnnennnnnnnnn nn 33 Diagramm 16 Drawltem Klasse ae a 36 Diagramm 17 Diagramiltem Klasse u u uu 0 un nn nk 37 Diagramm 18 Connectionltem mit Zeigern auf Source und Target Element 40 Diagramm 19 Connectionltem Klasse nnnnnneeennnnnnennnnnnnnnnnnnnnnnnnnnnnnnnnnennnnnnnnnnnnnnnnnennnnannnnnnnn 41 Diagramm 20 Elemente und Transitionen mit Selection Corner eee 44 Diagramm 21 Die graphische Elemente abgeleitet von DiagramItem EEN 46 Diagramm 22 Die Transi
54. den TT M i M Untitied state Chart Editor File Edit New f 9 Ce d Select Add New State Chart Add Initialsate Add Terminatestate Add State Add Conditionstate Add Transition Add Region Remove Region Copy State Chart to Clipboard Project View 4 StateMachine 1 d E Statel Region_1 Region_2 State Charts StateMachine 1 Property Editor K Abbildung 19 Andern der Breite einer Region 3 y7 NALAIS Hes so WALLIS 7 6 BENUTZERHANDBUCH ke Entfernen Soll eine hinzugef gte Region wieder entfernt werden wird Remove Region 4 im Men Edit oder in der Toolbar gew hlt Anschliessend wird mit der linken Maustaste in die zu entfernende Region geklickt die Region wird entfernt Ey ClockStateChart rsydes State Chart Editor File New Select Add Region Project d a Copy State Chart to Clipboard py p TT Abbildung 20 Add Region Men Edit ei Remove Region Abbildung 21 Add Region in der Toolbar Bemerkung Damit eine Region entfernt werden kann darf sie keine Elemente enthalten Ein Zustand muss mindestens eine Region besitzen Transitionen erstellen Zum Erstellen einer Transition wird Add Transition im Men New oder in der Toolbar ausgew hlt S S ClockStateChart rsydes State Chart Editor File Edit N p Add New State Chart 9 Add Initialsate Select
55. dene paint Methode zeichnet mit Hilfe der Ankerpunkte die Transition Die Implementierung zum Erstellen einer Transition wird im Abschnitt 6 3 genauer behandelt r eseeseeeeeeee ee 6 1 IMPLEMENTIERUNG DES STATE CHART EDITORS ke Implementierung des State Chart Editors Der letzte Abschnitt wird nun noch kurz auf die Implementierung der wichtigsten Elemente eingehen Zu Beginn wird aufgezeigt wie das Main Window siehe Abschnitt 2 implementiert wird Es wird gezeigt wie die Men leiste Toolbar und die verschiedenen Ansichten erstellt werden In einem nachsten Schritt wird erklart wie die verschiedenen Diagramme auf der Arbeitsfl che angezeigt werden k nnen Zum Schluss wird die Implementierung der Bedienung erl utert Es wird gezeigt wie Diagramme hinzugef gt entfernt und Zustandsmaschinen gezeichnet werden k nnen Es wird der Property Editor beschrieben auf den Speicher Ladevorgang und den Export eingegangen ebenfalls auf das Kopieren in die Zwischenablage und das Drucken Bemerkung Der gesamte Source Code des State Chart Editors ist elektronisch unter e Software SourceCode e Software SourceCode zu finden Zudem befindet sich elektronisch unter e Software SourceCode documentation eine Doxygen Dokumentation zum Source Code des State Chart Editors Ein Windows Release des State Chart Editors ist unter e Software Release Win32 zu finden Main Window des State Chart Editors Das Main Windo
56. devorgangs an Folgend werden die Bereiche und Elemente des Main Windows kurz beschrieben nn nm n nn eeeegeegee eege 992 282 2222 22 2 2299 8292 8 99 9 8 9998 eege 99 9 BP 8898 2 2 EEE BEE BEE SE EEE SEES BES BB SEES BESSERES eee BEE SB SEES SS SB SSR eee ec HB OS SH BB OH SE BB OO OH SO OB BO eee 7 VALAIS SG POSSO VEER A 80 eseeeeeeeceoe eceeeeeeeseeceee eeeeeeeeee eee eee ee eee nenn eee Ban ese eee eeeee ese BE BB BE BR BE BE BE BE ees DIE GRAPHISCHE BENUTZEROBERFLACHE GUI ke BW 2 1 Die Ansichten Die Projekt sowie die State Chart Ansicht verschaffen dem Benutzer einen berblick zu den Zustandsmaschinen 2 1 1 Die Projekt Ansicht Die Projekt Ansicht listet alle Elemente die zum Zeichnen der Zustandsmaschine verwendet wurden hierarchisch auf Project View a 2 Clock START gt E INIT gt ES WAIT gt E TICK re fromstart P fromilnit rf fromWait f fromTick Abbildung 2 Die Projekt Ansicht 2 1 2 Die State Chart Ansicht Jede Zustandsmaschine wird in der State Chart Ansicht aufgelistet Durch Ausw hlen einer Zustandsmaschine in dieser Ansicht kann diese ge ffnet und angezeigt werden State Charts Abbildung 3 Die State Chart Ansicht gt nn nm an nne2 2 u 2 e ee eege eegeeg eege eee ee eeeeeeegoeee eege ee eege eeeeeeeeee eege eege ee eege se ee VALAIS 000000009000009000000020000000 0000000000000 000009000000 000 00000000000 0566 O6 OH HE ee f
57. die Position des Elements Zeile und Spalte ben tigt Anschliessend l sst sich mittels der QAbstractItemModel createIndex Methode des Modells ein Index erstellen Handelt es sich um das Root Element kann mit QModelIndex QModelIndex ein neuer leerer Index erstellt werden Untenstehende Abbildung zeigt ein Beispiel eines Tabellen Modells Table Model Fe l a l Root item a row 0 a row 1 T H row 2 i 1 i f i f 1 row 3 1 i ee eo sae CH CH CH CH o 8 Q E E E E 3 3 ll Il Il ll CH ho LA Quelle Qt Reference Documentation 3 Abbildung 16 Tabellen Modell zur Beschreibung der Item Indexierung seeseesee eee see eee pen nn eee ee pen per pe p eee pp BB eee BB BB BR BR BE BR BR PB BR BR BP BR BB DB PR BR BR BE RB eee eee e DIE ENTWICKLUNG DES DATENMODELLS ke Die Indizes der Elemente A B und C konnen nun wie folgt erhalten werden QModelIndex indexA QAbstractItemModel createIndex 0 0 lt pointer to A gt QModelIndex indexB QAbstractItemModel createIndex 1 1 lt spointer to B gt QModelIndex indexC QAbstractItemModel createIndex 2 1 lt pointer to C gt Da es sich aber bei der verwendeten Struktur nicht um eine Tabelle sondern eine Baumstruktur handelt vereinfacht sich die Indexierung dadurch weil das Modell jeweils nur eine Spalte besitzt Root Item Quelle Qt Reference Documentation 3 Abbildung 17 Model Index in einer Baum
58. e eege egeegeeegeegeeegegeegeeee ees DIE GRAPHISCHEN ELEMENTE ke Der Konstruktor erstellt eine neue Verbindung mit der gegebenen UUID Die Zeiger auf das Source Target Element werden nicht gesetzt Dieser Konstruktor wird verwendet wenn ein Diagrammmodell geladen wird ConnectionItem QUuid uuid Dieser Konstruktor erstellt ebenfalls eine neue Verbindung mit der gegebenen UUID falls keine UUID gegeben ist wird eine neue erstellt Zudem werden die Ankerpunkte und die Zeiger zu Source und Target angegeben ConnectionItem DiagramItem sourceItem QPointF sourcePoint DiagramItem targetItem QPointF targetPoint QUuid uuid QUuid Der Destruktor loscht die Verbindung und wird aus den betroffenen Elementen entfernt virtual ConnectionItem Mit setHigherLayer kann die Verbingung in den Vordergrund gebracht werden und setDefaultLayer platziert die Verbindung Element auf den Layer der Verbindungen void setHigherLayer void setDefaultLayer restoreConnection die dazu nach einem Ladevorgang die Zeiger zu Source und Target sowie die Ankerpuntke zu setzen void restoreConnection DiagramItem sourceItem QPointF sourcePoint DiagramItem targetItem QPointF targetPoint Der sceneEventFilter wird dazu verwendet um Events eines anderen QGraphicsItem zu verarbeiten Im Fall des Connectionltem werden die Events der Selection Corner siehe 5 3 3 abgefangen um die Verbindung verschieben zu k nnen bool
59. e ren eee eee ec eee ere 69 82 AUIS VST e 69 8 3 Vorschl ge zur Weiterentwicklung ussssnnennennneeennnnnnnnennnnnnnnnnnnnnnnnnnnnnnnnnnnennnnnnnnennnnnnnnnnnnnan 70 9 MAGS 0 1 0 u 1 GE 71 10 VELZEICHT IS SC en A A T E E E E E 72 10 1 Abbildungsverzeichnis scscesscdicssccecseaxtxcsasictsciecdtevesceivissesniavestonsarit eneccsieectsn ue veernants esnciveasienidnieercisiioenesee 72 192 Ee are EE 73 11 FRNA E 74 12 AU AN een 75 121 Speicher Ora sera inne ated emu nee 75 12 1 1 tee 75 12 1 2 Graphis cHe Ele MONTE een nie 77 122 Propran OU een 79 122 Penze een N 80 VORWORT ke Vorwort An dieser Stelle mochte ich mich bei allen Personen bedanken die mich wahrend dieser Arbeit in irgendwelcher Art und Weise unterstutzt haben Pers nlich danken m chte ich meinem Dozenten Medard Rieder Dozent f r Methodik Informatik amp Telekommunikation f r seine Unterst tzung hilfreichen Anregungen und konstruktive Kritik bei der Realisierung dieser Diplomarbeit Weiter m chte ich mich bei Michael Clausen Wissenschaftlicher Mitarbeiter ISI bedanken Immer wieder konnte er mir bei Problemen in Qt Tipps geben oder bei Compiler Problemen weiterhelfen Seine kritischen Meinungen waren oft der Grund nach einer geeigneteren L sung zu suchen und somit das Resultat zu verbessern Ebenfalls danke ich Thomas Sterren Wissenschaftlicher Mitarbeiter ISI den ich bei Syntax Fehlern und Modellierungsproblemen nach Rat fragen konnte Dank seine
60. eegeeeeeegeeeeeeg se WALLIS 00 000 00000 000 00500 058 00000 008 00050 000 000 0000000000000 00000000 00000000000 00000000008 we LZ Ge eege eege ee eege Bee Ben eege ege eege eeeeg eege eege ee eee BE BE BO eege eege ee eege eeeeeeeeee eege eege ee ees DIE GRAPHISCHEN ELEMENTE ke 5 4 Die Elemente Aufbauend auf die Basisklassen Diagramltem und Connectionltem k nnen nun die verschiedenen Elemente und Transitionen erstellt werden W AAA ZA AN ConditionState InitialState TerminateState Diagramm 21 Die graphische Elemente abgeleitet von Diagramltem Connectionltem A Diagramm 22 Die Transition abgeleitet von ConnectionItem Die einzelnen Elemente und die Transition werden in den folgenden Abschnitten beschrieben Bei der Implementierung wird nur auf die wichtigsten Punkte eingegangen Die Implementierung der Elemente und der Transition sind elektronisch unter e Software SourceCode src Items e Software SourceCode include Items e Software SourceCode src Connections e Software SourceCode include Connections zu finden Zudem befindet sich elektronisch unter e Software SourceCode documentation eine Doxygen Dokumentation zur gesamten Implementierung des State Chart Editors 5 4 1 5 4 2 DIE GRAPHISCHEN ELEMENTE ke Initial State Terminate State und Condition State Die Elemente Initial State Terminate State und Condition State weisen keine besonderen Eigenschaften auf e Abbildung 34
61. en Aufruf von restoreSceneRect kann diese Funktion wieder aktiviert werden void restoreSceneRect Die Methoden zu den Handlern von Mouse und Key Events werden im Abschnitt ber die Implementierung des Verhaltens 6 3 n her beschrieben Die vollst ndige Implementierung der Diagram Klasse ist elektronisch unter e Software SourceCode src Diagram e Software SourceCode include Diagram zu finden Die Klasse StateMaschineltem die den logischen Teil des Diagramms beinhaltet unter e Software SourceCode src DataModel e Software SourceCode include DataModel Die Elemente Eine allgemeine Beschreibung Die graphischen Elemente werden von QGraphicsItem abgeleitet QGraphicsItem ist die Basisklasse aller graphischen Elemente in einer QGraphicsScene Um die Implementierung der graphischen Elemente zu vereinfachen wurde eine Basisklasse Drawltem f r diese Elemente erstellt Dazu kommen zwei weitere Klassen die die Zustandsmaschinenelemente und Verbindungen Transitionen zusammenfassen In den folgenden Abschnitten werden die Basisklassen und anschliessend s mtliche QGraphicsltem W W Diagramltem Connectionltem Diagramm 15 Basisklassen der graphischen Elemente Elemente beschrieben DIE GRAPHISCHEN ELEMENTE ke Fa _ 5 3 1 Das QGraphicsItem Das QGraphicsItem ist die Basisklasse aller graphischen Elemente die einer QGraphicsScene hinzugef gt werden k nnen Es werden nun ku
62. en des entsprechenden Buttons im sich offnenden Code Editor implementiert werden Property Editor eil State Properties General Name INIT Implementation 233 Abbildung 6 Property Editor eines Zustandes Folgende Abbildung zeigt den Code Editor der durch das Anklicken eines Buttons zur Implementierung des Verhaltens ge ffnet wird seconds 60 seconds 0 minutes t t if minutes 60 minutes 0 hours i f hours 24 Abbildung 7 Der Code Editor G SCSSHSSSSCSSCSSSSSSSSSSSSSSSSSSSSSSSSSSESSSSSSSSSSSSSSSSSSSSSSsSSSSssssesesessesesessessese ses ee ne VALAIS 2 amp 2 222 2020 00 eee Cee ee SOS 200 OH SOS OHGOH OHH HHH ototootoooto SOS HHH ST SOHHOFOHTOSHSSOHTSOHEEOEE 5 80 D j j eeeeeceeeoceeee se nn 2 2 eee eoeeee 8888 2928 888 BB BB BE BB BE BB BB BB eee 2 8 9888 8 888 ann 8 8 88 eee ee es SO WALLIS v sos0s00000000000000000000000000000000000000000000000000000000000000000000000000 000 LCE e FEES nn Be en pp nn Ben Ban 2 pn pn pe pp BB BB BE BE BE BB BB BE BB BB 8 ZZ ZZ EZ EEE Em eesessasp nn A KEE Vie Pe 2 4 2 4 1 DIE GRAPHISCHE BENUTZEROBERFLACHE GUI ke Transition Der Property Editor der Tranistionen ist hnlich jenem der Zus nde Es l sst sich der Name ndern und das Verhalten Trigger Guard und Action im sich ffnenden Code Editor siehe Abbildung 7 implementieren Zusatzlich werden Sou
63. enablage kopiert werden Das Modell wird in eine Archiv Datei gespeichert welche die graphischen und logischen Informationen in der Form von XML enthalt Die logischen Informationen konnen zudem exportiert werden und in einem n chsten Schritt von einem Code Generator weiterverarbeitet werden 2 Der State Chart Editor Die Folgende Abbildung zeigt das Hauptfenster des Entwicklungstool S Se ClockStateChart rsydes State Chart Editor e e _ a a File Edit New Si oe D D mm EC rz ei A Add New State Chart Add Initialsate Add Terminatestate Add State AddConditionstate Add Transition Add Region Remove Region Copy State Chart to Clipboard Project View a Clock Property Editor K Transition Properties START General a INIT a WAIT Name TICK fromStart fe fromStart fe fromlnit fe fromWait fe fromTick Source Target INIT Implementation 4 V Abbildung 1 Das Hauptfenster Das Hauptfenster ist in drei Bereiche aufgeteilt Ganz links befindet sich eine Projekt und State Chart Ansicht die einen berblick zu den Zustandsmaschinen verschaffen In der Mitte befindet sich die Arbeitsfl che auf welcher die Zustandsmaschinen gezeichnet werden k nnen Ganz rechts wird der Property Editor angezeigt welcher die Eigenschaften des ausgew hlten Elements anzeigt Eine Men leiste sowie eine Toolbar bieten versc
64. eseeseseeseesesensenseeesens 47 Se PA E E 47 Pe ho mmm G21 01s 0 6 E 48 6 Implementierung des State Chart Editors uensnsnnenennnnnnennnnnnennnunnunnennnnnnennennnnnnnnnnnnnennnnnnennnnnnen 49 6 1 Main Window des State Chart EditorS usssssnnennnneennnnnnennnnnnnnennnnnnnnnnnnnnnnennnnnnnnnnennnnnnnnnnnnnnnnnnnn 49 Eeer 50 oa ae Ken Vene ee ee 50 ol sc DECANE E a i erect En eee eee ee er 50 BEA SEES ee ere E nr eee ee 51 02 but ENEE 0 en ee ee 52 6 3 Die Bedienung des State Chart Editors unssssnenennnennnnnnnennnnnnnnennnnnnnnnnnnnnnnnennnnnnnnnnnnnnnnnnnnnnnnnennnnn 52 6 3 1 Diagramm hinzuf gen entfernen anzeigen 53 632 De EE 54 635 I AMS ENO UI Te A een ee ne nennen 56 634 Elemente Transiti nenentternen au 59 6o99 Elemente verschie Dei eee en an ne a eae ee ee ee 59 6 3 6 Die Gr sse eines EE 60 6 3 7 Einem Zustand Regionen hinzuf gen entfernen nnnenrenneennnnennnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn nennen 62 639 Doppel Ei aaa ebene 62 04 Weitere ee ee I ee Naaa a A E Eaa s EEAS AE EON TEE ES 63 OLL Sperber E EE 63 INHALTSVERZEICHNIS ke eher 65 04 RTA Ee ENEE E 66 e DUN EE 66 To NOS as E sxecursdeiesanstucchanessneseuceessdtuiaaaestuceseudussiaens 68 71 Dieb E he GE 68 2 2 Proper e e TE 68 Er Neie EE 68 7 4 EXO CECT EN DE 68 7 5 In Zwischenablage kopieren Drucken uusssnnnnnnnensnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnsnnnnnnnn 68 o YC CC ee ee ee 69 o 2215 0 2 ee eer e
65. f Hike se SSO SSSSHOSSSSSSSS SSS SHESSHSSEHSSSSHSSSHSSOSHSSSEHSSHSSSHSSSESSHSSSSSSSSSSEOSESSESESESESEESESES TH HH e HH HH HH HH HH RI HIFI ww FEFEFE oe eege eeeeeeee eege eeeeeeeeee eee eege see eee BE BE BO eege eege ese eege eeeeeeeeee eege eege ee ees DIE GRAPHISCHE BENUTZEROBERFLACHE GUI 2 2 Die Arbeitsfl che Auf der Arbeitsfl che kann der Benutzer die Zustandsmaschinen zeichnen Es wird jeweils die in der State Chart Ansicht ausgew hlte Zustandsmaschine angezeigt mr u u mr ec o bh emm aes ilsate Add Terminatestate Add State Add Conditionstate Add Transition Add Region Remove Region Ci Pr Abbildung 4 Die Arbeitsfl che 2 3 Der Property Editor Im Property Editor werden jeweils die Eigenschaften des ausgew hlten Elements angezeigt und k nnen vom Benutzer angepasst werden Property Editor State Properties General Implementation gn aa Abbildung 5 Der Property Editor MA WOMEN S2200 EE E E E EE EE EE E EE E Hee Uf WALLIS EE 4 80 DIE GRAPHISCHE BENUTZEROBERFLACHE GUI be 2 3 1 Zustandsmaschine Pseudo Zustand Region Im Property Editor zu den Zustandsmaschinen Pseudo Zustanden und den Regionen kann lediglich der Name des Elements ge ndert werden 2 3 2 Zustand Der Property Editor der Zust nde erm glicht es den Namen des Zustands zu ndern Zudem kann das Verhalten des Zustands Action On Entry Action In State und Action On Exit durch Anklick
66. gram gt index internalPointer if diagram _propertyEditor gt editStateMachine diagram _view gt setScene diagram _view gt scene gt clearSelection Elemente hinzuf gen Um dem Zustandsdiagramm ein Element hinzuf gen zu k nnen muss sich der State Chart Editor in einem der Platzierungsmodi befinden Dieser Modus wird im Slot der jeweiligen QAction des Men New in der Editor Klasse gesetzt Beispielsweise beim Dr cken von Add State void MainWindow onSwitchToPlacementStateMode setToolButtonsUnchecked _addStateAction gt setChecked true emit changeEditMode Editor PlacementState Das Hinzuf gen eines Elements zur Zustandsmaschine erfolgt immer in drei Etappen Beim Dr cken der linken Maustaste im Diagramm wird das graphische Element erstellt und als Vorschau angezeigt Durch das Bewegen der Maus kann das Element platziert werden und beim Loslassen der Maustaste wird das Element am Raster ausgerichtet der dazugeh rige logische Teil erstellt und beiden Modellen hinzugef gt IMPLEMENTIERUNG DES STATE CHART EDITORS ke Linke Maustaste wird gedr ckt Befindet sich der Editor in einem der Platzierungsmodi so wird das entsprechende graphische Element erstellt als Vorschau in der Editor Klasse abgelegt und die Position der Vorschau der Mausposition gleichgesetzt Das graphische Element kann dem Diagramm mit addItem hinzugef gt werden void Diagram mousePressAddItem QGraph
67. hiedene Funktionalit ten Am unteren Fensterrand zeigt eine Statusleiste Informationen beispielsweise w hrend des Ladevorgangs an oe Mira 32 d Hes so WALLIS 22 1 12 BENUTZERHANDBUCH ke 2 1 Die Ansichten Die Projekt sowie die State Chart Ansicht verschaffen dem Benutzer einen berblick zu den Zustandsmaschinen 2 1 1 Die Projekt Ansicht Die Projekt Ansicht listet alle Elemente die zum Zeichnen der Zustandsmaschine verwendet wurden hierarchisch auf Project View a w Clock START gt E INIT gt ES WAIT gt D TICK r fromStart P fromilnit re fromWait f fromTick Abbildung 2 Die Projekt Ansicht 2 1 2 Die State Chart Ansicht Jede Zustandsmaschine wird in der State Chart Ansicht aufgelistet Durch Ausw hlen einer Zustandsmaschine in dieser Ansicht kann diese ge ffnet und angezeigt werden State Charts Abbildung 3 Die State Chart Ansicht 2 2 Die Arbeitsfl che Auf der Arbeitsfl che kann der Benutzer die Zustandsmaschinen zeichnen Es wird jeweils die ausgew hlte Zustandsmaschine angezeigt BENUTZERHANDBUCH 2 3 Der Property Editor Im Property Editor werden jeweils die Eigenschaften des angezeigt und k nnen vom Benutzer angepasst werden Property Editor Transition Properties General Name fromWait Source VAL Target Implementation W Abbildung 4 Der Property Editor 3 Neues Projekt starten ausgew hlten Elements Wir
68. iagramItem TerminateStateType if destination has no parent add connection to scene if to gt parentRegion NULL Transition transition new Transition editor gt from editor gt connectionStart to mouseEvent gt scenePos addItem transition add transition to data model TransitionItem t new Transitionltem transition gt uuid transition gt setDataltem t t gt setSourceTarget editor gt from gt dataltem to gt dataltem dataModel gt addItem this gt dataltem t if destination has parent add connection to the parent else State parentState dynamic_cast lt State gt to gt parentItem Region parentRegion NULL if parentState parentRegion to gt parentRegion if parentState amp amp parentRegion Transition transition new Transition editor gt from parentState gt mapFromScene editor gt connectionStart to parentState gt mapFromScene mouseEvent gt scenePos parentRegion gt addConnectionItem transition transition gt setParents parentState parentRegion add transition to data model TransitionItem t new Transitionltem transition gt uuid transition gt setDataltem t t gt setSourceTarget editor gt from gt dataltem to gt dataltem dataModel gt addItem parentRegion gt dataltem t mouseEvent gt accept h eseeeeceeeee ee eeeeeeseeceeeeeeeeeeeee eee BB BE BB BB BE BB BE B
69. iagramm kann verschiedene graphische Elemente enthalten 5 2 2 Implementierung Die Diagram Klasse ist wie folgt definiert QGraphicsScene uuid QUuid dataltem Dataltem showGrid bool Diagram uuid QUuid QUuid drawBackground painter QPainter rect const QRectF amp void addDrawltem item Dataltem void inline const uuid QUuid inline dataltem Dataltem inline setDataltem item Dataltem void inline showGrid value bool void shrinkSceneRectToContent minimalSize QSize QSize void restoreSceneRect void mousePressE vent mouseEvent QGraphicsSceneMouseE vent void mouseDoubleClickE vent mouseEvent QGraphicsSceneMouseE vent void mouseMoveEvent mouseEvent QGraphicsSceneMouseEvent void mouseReleaseEvent mouseEvent QGraphicsSceneMouseEvent void keyPressEvent keyEvent QKeyE vent void mousePressSelection mouseEvent QGraphicsSceneMouseEvent void mousePressAdditem mouseE vent QGraphicsSceneMouseEvent void mousePressAddC onnection mouseEvent QGraphicsSceneMouseE vent void mousePressAddRegion mouseE vent QGraphicsSceneMouseEvent void mousePressRemoveRegion mouseEvent QGraphicsSceneMouseEvent void mouseMoveSelection mouseE vent QGraphicsSceneMouseEvent void mouseMoveAddltem mouseEvent QGraphicsSceneMouseEvent void mouseMoveAddConnection mouseE vent QGraphicsSceneMouseEvent
70. icsSceneMouseEvent mouseEvent if mouseEvent gt button Qt LeftButton return Editor editor Editor instance switch editor gt mode case Editor PlacementInitialState QGraphicsScene mousePressEvent mouseEvent editor gt setItemPreview new InitialState editor gt itemPreview gt setPos newX newY editor gt itemPreview gt setHigherLayer addItem editor gt itemPreview mouseEvent gt accept break Maus wird bewegt Beim Bewegen der Maus wird die erstellte Vorschau zusammen mit der Maus verschoben void Diagram mouseMoveAddItem QGraphicsSceneMouseEvent mouseEvent Editor editor Editor instance if editor gt itemPreview mouseEvent gt accept editor gt itemPreview gt setPos mouseEvent gt scenePos Maustaste wird losgelassen Wird die Maustaste losgelassen muss das Element am Raster ausgerichtet und auf dem Diagramm platziert werden Dabei muss berpr ft werden ob sich das Element ber einem Zustand befindet Falls sich das Element vollst ndig ber einem Zustand befindet wird der Zustand als Parent Item des Elements gesetzt und das Element wird der entsprechenden Region des Zustands hinzugef gt Nach dem Platzieren wird der dazugeh rige logische Teil des graphischen Elements erstellt und mit dem graphischen Element verlinkt Anschliessend werden die beiden Teile den entsprechenden Modellen hinzugef gt void Diagra
71. inzige im Zustand ist Falls die berpr fung erfolgreich war wird die Region aus den Modellen entfernt und gel scht Die Breite wird der entfernten Region wird an die Nachbarregionen verteilt War die berpr fung nicht erfolgreich so wird eine Fehlermeldung ausgegeben Die Implementierung der beiden Methoden mousePressAddRegion und mousePressRemoveRegion ist elektronisch in der Diagram Klasse unter e Software SourceCode src Diagram zu finden Property Editor Wird ein Element im Diagramm der Projekt Ansicht oder der State Chart Ansicht ausgew hlt so wird dessen Properties Widget im Property Editor angezeigt Mit editDataltem des Property Editors kann das ausgew hlte Element angegeben werden um dessen Properties Widget anzuzeigen Jedes Element verf gt ber eine Methode propertiesWidget die das zum Element zugeh rige Properties Widget zur ckgibt Bei jedem Element l sst sich mindestens der Name ndern Um zu verhindern dass ein Name eines Elements zweimal existiert wurde die sogenannte NameChecker Klasse entwickelt welche beim ndern des Namens berpr fen kann ob der Name bereits existiert NameChecker Die NameChecker Klasse beinhaltet eine Map die samtliche Elementnamen enthalt So kann berpr ft werden ob ein Name bereits existiert oder nicht Mit setItemName kann der Name eines Elements ge ndert werden Ist der Name bereits vorhanden wird er nicht ge ndert und die Methode retournie
72. ion dient dazu um den Zeiger auf eine ein ausgehende Transition dem Element hinzuzuf gen void addConnection ConnectionItem connection DIE GRAPHISCHEN ELEMENTE ke Die Funktion removeConnection entfernt den Zeiger auf eine ein ausgehende Transition vom Element void removeConnection ConnectionItem connection deleteConnection entfernt ebenfalls den Zeiger auf eine ein ausgehende Transition Zus tzlich wird die Transition gel scht void deleteConnection ConnectionItem connection connections gibt eine Liste von allen Zeigern auf ein ausgehende Transitionen zur ck QList lt ConnectionItem gt amp connections Der Typ des graphischen Elements kann mittels type ermittelt werden virtual int type const 0 Um die Breite und Hohe des Elements zu lesen bzw schreiben dienen die folgenden Getter und Setter Methoden inline void setWidth greal value _width value inline void setHeight qreal value _height value inline oreal width const return _width inline qreal height const return _height relativeOrigin gibt den relativen Ursprung des Elements zur ck inline QPointF relativOrigin const return _relativOrigin setCornerPosition platziert die Selection Corner siehe 5 3 3 des Elements void setCornerPosition Die Funktion uuid gibt die UUID des Elements zur ck inline QUuid uuid const return _uuid Mit dataltem und set
73. ion 1 4 E State 2 Region_2 f Transition_1 Abbildung 25 Text verschieben 7 8 Transitionen entfernen o Add New State Chart Add Initialsate Add Terminatestate Add State AddConditionstate Add Transition Add Region Remove Region Copy State Chart to Clipboard Um eine Transition zu entfernen wird gleich vorgegangen wie beim Entfernen von Elementen Siehe 7 3 Elemente entfernen S 7 Hes so WAR 8 1 10 BENUTZERHANDBUCH ke Eigenschaften bearbeiten Damit die Eigenschaften eines Elementes bearbeitet werden k nnen wird das Element auf der Arbeitsfl che in der Projekt oder State Chart Ansicht mit der linken Maustaste angeklickt Im Property Editor Abbildung 4 werden die Eigenschaften des Elements angezeigt und k nnen bearbeitet werden Code implementieren Bei den Zust nden oder Transitionen ist es m glich das Verhalten zu implementieren Zum Implementieren des Verhaltens kann der entsprechende Button im Property Editor angeklickt werden und ein Code Editor zur Implementierung wird ge ffnet r S fromWait Trigger Abbildung 26 Code Editor Exportieren Die logischen Informationen der im Projekt enthaltenen Zustandswechseldiagramme k nnen als XML Datei exportiert werden Diese Datei kann in einem n chsten Schritt beispielsweise von einem Code Generator weiterverarbeitet werden Zum Exportieren dieser Informationen w hlt man im Men File den Eintrag E
74. ion On Entry und der Transitionen Trigger kann direkt mit Hilfe eines Property Editors implementiert werden Es besteht die M glichkeit die Diagramme abzuspeichern und bestehende Diagramme zu ffnen Das Entwicklungstool besitzt eine Exportfunktion mit welcher sich die logischen Informationen einer Zustandsmaschine zur weiteren Verwendung exportieren lassen Zus tzlich bietet das Tool die Funktionalit t des Kopierens in die Zwischenablage an Die Kopie enth lt das Zustandswechseldiagramm als Bild und kann in einer anderen Anwendung Word und hnliche beispielsweise zur Dokumentation verwendet werden Zudem k nnen die Zustandsmaschinen ausgedruckt werden Realisierung Die Realisierung des Entwicklungstools State Chart Editor erfolgte in verschiedenen Etappen Datenmodelle Zu Beginn wurde eine Analyse zur Ablage der Zustandsmaschinendaten durchgef hrt Da die Daten im Tool hierarchisch angezeigt werden eignete sich das Model View Konzept von Qt am besten Die Modelle logisch und graphische Daten wurden auf diesem Konzept aufgebaut und sind somit kompatibel mit den Qt Views um in diesen angezeigt werden zu k nnen Um die Modelle realisieren zu k nnen wurde zuerst die Datenstruktur der Modelle definiert In einem n chsten Schritt wurde ein Interface implementiert welches es erlaubt auf die Datenstruktur zuzugreifen damit diese in Views angezeigt bzw bearbeitet werden kann Um die Modelle abspeichern
75. ist lt Diagram gt signal itemAddedT oDiagramModel diagram Diagram void slot onltemDataChanged diagram Diagram 1 void friend operator writer QXmlStreamWriter amp item Dataltem QXmI StreamWriter A Diagramm 10 DiagramModel Klasse Implementierung Die einzelnen Methoden der DiagramModel Klasse werden in diesem Abschnitt kurz beschrieben Die vollstandige Implementierung dieser Klasse ist elektronisch unter e Software SourceCode src DiagramModel e Software SourceCode include DiagramModel zu finden Der Konstruktor der ein neues Diagrammmodell erstellt ist als private deklariert da es sich beim Modell um eine Singleton Klasse handelt DiagramModel QObject parent 0 eeeseeeeee se cee seeseee sec eee ese see eeeeg sees eseese E22 PEPPER BEP BEE sees E89 BP 9898 VALAIS ce ccc ccccc ccc cect cee cee ce cee Cece tee eee cette teleost eee e tec eteeeeesee ec eesesees 25 J 80 e Hes SO AA n 23 333 333 35235 2323523528522 EE eeeeeecee eeceeeseeeceee en sn pen eee eee ee eee BB EB BB eee BE BD ese eee BE BEE BB ese BE BE BB BR BB BR BB BE BB ees DIE ENTWICKLUNG DES DIAGRAMMMODELLS ke Die statische Methode instance gibt die Instanz des Modells zur ck static DiagramModel instance Der Destruktor l scht das Diagrammmodell sowie alle Diagramme und gibt deren Speicher wieder frei virtual DiagramModel Das Modell muss index implementieren Diese Funktion
76. it addRegion dem Zustand hinzugef gt Mit removeRegion bzw deleteRegion kann eine Region wieder vom Zustand entfernt werden Eine Region ist definiert durch eine Breite Um die Regionen im Zustand anzuzeigen werden alle Regionen die der Zustand enth lt in der paint Methode durchlaufen und mit Hilfe der Breite die vertikalen Begrenzungen gezeichnet Abbildung 37 Zustand mit drei Regionen Zum ndern der Breite der Region wurden die Mouse Events in der State Klasse berladen Beim Dr cken der linken Maustaste wird berpr ft ob sich die Maus auf einer Begrenzung befindet Die Begrenzung wird danach mit der Maus zusammen verschoben Gr ssen nderung Um die Gr sse des Zustands zu ndern wurde die Methode resizeltem implementiert Eine Beschreibung zur Gr ssen nderung folgt im Abschnitt 6 3 6 S 60 Zudem implementiert auch der Zustand die Methode getConnectionPointAngle neu welche zur Ermittlung des Ankerpunkts des Zustands dient Diese wird im Abschnitt 8 6 3 3 S 56 beschrieben Transition Eine Transition wird durch eine Linie mit einer Pfeilspitze am Ende Target Element dargestellt und verbindet ein Source mit einem Target Element Bei einer Transition k nnen Trigger Guard und Action implementiert werden Falls eine Implementierung vorhanden ist wird eine Textbox erstellt die diese auf der Transition anzeigt trigger guard faction Abbildung 38 Transition mit Text Die berla
77. itel befassen sich mit der Entwicklung der Modelle zum Ablegen der Daten Es folgt ein Abschnitt der die Realisierung der graphischen Elemente welche zum Zeichnen der Zustandswechsel diagramme verwendet werden aufzeigt Im letzten Teil wird auf die Implementierung des Entwicklungstools eingegangen das heisst die Elemente der vorangehenden Kapitel werden zusammengef gt In den n chsten Abschnitten folgt eine detailliertere Beschreibung der Diplomarbeit und die Ziele der Diplomarbeit werden definiert Beschreibung der Diplomarbeit Das modellbasierte Entwicklungstool folgend State Chart Editor genannt erlaubt es mit Hilfe der Standard UML Elemente Zustandswechseldiagramme zeichnen zu k nnen Nebst dem Zeichnen der Zustandsmaschinen erlaubt es der State Chart Editor zudem in den Zust nden oder auf Transitionen Programmcode zu implementieren Die Zustandswechseldiagramme werden in zwei Dateien abgespeichert wobei eine Datei die graphischen Informationen und die Andere die logischen Informationen der Zustandsmaschine enth lt Der State Chart Editor bietet die M glichkeit die logischen Informationen der Zustandsmaschinen zu exportieren damit diese in einem n chsten Schritt beispielsweise von einen Code Generator weiterverarbeitet werden k nnen Ziele der Diplomarbeit Die Ziele der Diplomarbeit sind die Implementierung des vollst ndigen Tools zum Zeichnen von Zustandsmaschinen das Erstellen einer Dokumentation und einer
78. kerpunkten sowie Zeiger zu dem Source bzw Target Element enthalt Weiter besitzt diese Klasse eine Textbox um das Verhalten der Transition anzuzeigen eine UUID und einen Zeiger auf die logischen Informationen der Transition 1 Connectionltem gt L gt _ source Diagramltem _connections Diagramm 18 Connectionltem mit Zeigern auf Source und Target Element Die Informationen zu den Ankerpunkten sind abhangig von der Form des Elements Bei rechteckigen Elementen wird der Ankerpunkt durch die Position des Elements und einem Faktor der die Distanz zum Ankerpunkt in Funktion der Hohe Breite des Elements angibt festgelegt posX relativXfromNull width posY relativYfromNull height relativXfromNull width posX posY height width Abbildung 29 Ankerpunkt einer Transition bei einem rechteckigen Element eseeseeeeeeee ee Das DIE GRAPHISCHEN ELEMENTE Bei kreisf rmigen Elementen ergibt sich der Ankerpunkt aus Mittelpunkt und Radius des Elements plus einem bestimmten Winkel d center radius Abbildung 30 Ankerpunkt einer Transition bei einem kreisf rmigen Element Implementierung der Connectionltem Klasse Nachfolgend sollen die Methoden der ConnectionItem Klasse kurz beschrieben werden Die vollst ndige Implementierung der Klasse befindet sich elektronisch unter e Software SourceCode src Connections e Software SourceCode include Connections Die Con
79. l das schon zusammen mit seinem Parent Item gel scht wurde Die Implementierung des Handlers ist in der Diagram Klasse zu finden diese Klasse befindet sich elektronisch unter e Software SourceCode src Diagram e Software SourceCode include Diagram Elemente verschieben Das Verschieben von Elementen erfolgt in drei Etappen Zuerst werden die zu verschiebenden Elemente markiert und in den Vordergrund gebracht Mit gedr ckter linker Maustaste k nnen die Elemente verschoben werden Wird die Maustaste losgelassen werden die Elemente an der neuen Stelle am Raster ausgerichtet positioniert 6 3 6 IMPLEMENTIERUNG DES STATE CHART EDITORS be Linke Maustaste wird geklickt Beim Klicken der Maustaste werden alle selektionierten Elemente Transition in den Vordergrund gebracht foreach QGraphicsItem selectedItem selectedItems DiagramItem item dynamic_cast lt DiagramItem gt selectedItem ConnectionItem connection dynamic_cast lt ConnectionItem gt selectedItem set selected items on highest layer if item item gt setHigherLayer if connection connection gt setHigherLayer Maus wird bewegt Das Verschieben von QGraphicsItems wird vom Default Mouse Event Handler der QGraphicsScene bereits unterst tzt Wird die Mausbewegt wird der Default Handler aufgerufen und die Transitionen der verschobenen Elemente neu berechnet void Diagram mouseMoveSelection QGraphicsSceneMouseEvent mouseEvent
80. lemente und die Schnittstelle Modell beschrieben Zudem soll aufgezeigt werden wie die Daten abgespeichert und wieder geladen werden k nnen ZZAIZZZAZ DIE ENTWICKLUNG DES DATENMODELLS ke 3 1 Der strukturelle Aufbau Die Elemente siehe 3 2 Das Element werden hierarchisch in einer Baumstruktur abgelegt Sie werden mittels Zeigern miteinander verlinkt Standardm ssig hat jedes Element ein Eltern Element Einige Elemente k nnen zudem Kinder enthalten Das Root Element hingegen besitzt kein Eltern Element und kann auch nicht ausserhalb des Datenmodells referenziert werden Es handelt sich um ein leeres Element Jedes Element enth lt Informationen zu seiner Position in der Struktur Es kann sein Eltern Element sowie seine Position im Eltern Element row mitteilen Diese Informationen vereinfachen anschliessend die Implementierung der Schnittstelle Modell Die zeigerbasierte Baumstruktur hat den Vorteil dass die Adresse eines jeden Elements mittels eines Index QModellndex erhalten werden kann E Root Item empty Row 0 Row 0 Row 1 Row 2 Row 1 Row Quelle Qt Reference Documentation 3 Abbildung 14 Repr sentierung der Elemente als Baumstruktur Nun m ssen alle Elemente definiert werden die sp ter in einer Zustandsmaschine enthalten sein k nnen Folgendes Klassendiagram soll die Elemente aufzeigen _parentitem _childitems _ connections Ji of Zi A A W A W W A StateMa
81. lementen zu zeichnen Die Anzahl der Elemente aus welchen eine Zustandsmaschine besteht ist im Voraus nicht bekannt und kann abhangig von der Zustandsmaschine die gezeichnet wird andern Jedes Element kann zudem mehrere supplement re Daten enthalten Name Verhalten usw oder sogar weitere Elemente enthalten Regionen k nnen mehrere Elemente enthalten Daher ist es wichtig die Gesamtheit der Elemente sorgf ltig zu verwalten Um s mtliche Elemente des State Chart Editors zu verwalten wird ein Datenmodell erstellt Dazu muss zuerst ein struktureller Aufbau erstellt werden welcher s mtliche Elemente definiert welcher aufzeiget welche Elemente welche Daten bzw Elemente enthalten k nnen Auf dieser Basis kann schliesslich eine Schnittstelle Modell erstellt werden welche das Hinzuf gen Entfernen oder Bearbeiten der Elemente in der Struktur erm glicht Bemerkung Der Begriff Modell hat in diesem Abschnitt zwei Bedeutungen Einerseits wird mit Datenmodell der strukturelle Aufbau der Daten gemeint andererseits wird die Schnittstelle zu den Daten als Modell bezeichnet Die untenstehende Abbildung versucht den Nutzen des strukturellen Aufbaus f r das Datenmodell aufzuzeigen Abbildung 13 Nutzen eines strukturellen Aufbaus f r das Datenmodell In den folgenden Abschnitten wird die Entwicklung und Implementierung des Datenmodells erl utert Es wird mit dem strukturellen Aufbau der Elemente begonnen anschliessend werden die E
82. ls Informationen die im Zustandsdiagramm angezeigt werden ndern void dataToDrawChanged e a DIE ENTWICKLUNG DES DATENMODELLS ke 3 3 Die Schnittstelle Modell DataModel 3 3 1 Beschreibung Die Schnittstelle Modell implementiert die Qt Klasse QAbstractItemModel Diese Klasse definiert ein Interface welches es den unterschiedlichen Views in Qt erlaubt auf die Elemente des Datenmodells zuzugreifen und deren Informationen anzuzeigen QObject W QAbstractitemModel DataModel Diagramm 3 Implementierung von QAbstractItemModel durch das DataModel Die Elemente selber werden nicht im Modell gespeichert sondern sind im Speicher wie im Abschnitt 3 1 beschriebener Struktur abgelegt Das Modell stellt lediglich eine Schnittstelle dar welche es erlaubt auf die Elemente in der Datenstruktur zuzugreifen um diese in einer View anzeigen bearbeiten oder neue Elemente hinzuf gen zu k nnen Damit das Modell auf die Datenstruktur Zugriff hat besitzt das Modell einen Zeiger auf das leere Root Element der Struktur QAbstractitemModel 1 Diagramm 4 Die Schnittstelle Modell und ihr Zeiger auf das Root Element DIE ENTWICKLUNG DES DATENMODELLS Folgende Abbildung zeigt die Schnittstelle zusammen mit der Datenstruktur in welcher die Elemente abgelegt sind QObject QAbstractitemModel lt gt DataModel _parentitem _childltems _ connections Jo of of A A A W IN A W 1
83. m mouseReleaseAddItem QGraphicsSceneMouseEvent mouseEvent qreal newX newY place on grid newX qRound mouseEvent gt scenePos x 20 20 newY qRound mouseEvent gt scenePos y 20 20 IMPLEMENTIERUNG DES STATE CHART EDITORS ke if a preview exists place item if editor gt itemPreview emit diagramModified true create item InitialState initialState dynamic_cast lt InitialState gt editor gt itemPreview initialState gt setPos newX newY State parentState stateUnderItem initialState Region parentRegion NULL if parentState parentRegion parentState gt getRegionUnderItem initialState if a parent exists update position to parent s coordinates if parentState amp amp parentRegion QPointF oldPoint initialState gt scenePos parentRegion gt addItem initialState initialState gt setParents parentState parentRegion initialState gt setPos parentState gt mapFromScene oldPoint set item in data model DataModel dataModel DataModel instance InitialStateItem is new InitialStateltem initialState gt uuid initialState gt setDataltem is if parentState amp amp parentRegion dataModel gt addItem parentRegion gt dataltem is else dataModel gt addItem this gt dataltem is delete preview editor gt setItemPreview NULL 6 3 3 Transitionen hinzuf gen Um eine Transition hinzuf gen zu k nnen muss sich de
84. mAddedToDataModel Dataltem item itemDataChanged gibt an dass die Daten eines Elementes ge ndert haben void itemDataChanged bool value Peeeees 3 4 DIE ENTWICKLUNG DES DATENMODELLS ke Dieser Slot dient dazu das Datenmodell zu aktualisieren falls die Daten eines Elements geandert haben wie beispielsweise der Name void onItemDataChanged DataItem item Speichern und Laden des Datenmodells Ein Datenmodell ist nutzlos wenn seine Daten nicht gespeichert und zu einem spateren Zeitpunkt wieder geladen werden konnen Dieser Abschnitt zeigt wie das Datenmodell mittels eines StreamWriters in ein IODevice geschrieben werden kann und wie das Datenmodell spater mit einem DOM Parser wieder geparst wird StreamWriter D ABS gt amp I ioveviee DOM Parser Datenmodell Abbildung 18 Speichern Laden des Datenmodells 3 4 1 Speichern Zum Speichern wird ein StreamWriter verwendet Da es sich um ein strukturiertes Modell handelt wird das Modell im XML Format abgespeichert Damit das Datenmodell gespeichert werden kann wird in der DataModel Klasse und in der Basisklasse der Elemente Dataltem der lt lt Operator des QXmlStreamWriters als Freundmethode hinzugef gt und berladen Folgender Code zeigt den lt lt Operator des Modells Es ist ersichtlich dass vom lt lt Operator der Basisklasse der Elemente Gebrauch gemacht wird QXmlStreamwWriter amp operator lt lt QXmlStreamWriter amp
85. ms propagieren ihre Position und Transformation f r alle Child Items Quelle Qt Reference Documentation 3 Abbildung 25 Die Propagation der Koordinatensysteme Ein Child Item wird zuoberst auf das Parent Item gestapelt und Sibling Items werden in der Reihenfolge wie sie eingef gt worden sind gestapelt Quelle Qt Reference Documentation 3 Abbildung 26 Stapelung der graphischen Elemente setZValue erlaubt es Items explizit auf dem Stapel zu positionieren BERR EEEEEEEEEEEREEEEEEEEEEEEREEEEEEEEENEEEN n nm nn2 222 22 22 222 2 22 EP 89 9 899 BP 89898 Hes so HEET Ffi V DIE GRAPHISCHEN ELEMENTE ke 5 3 2 Die Basisklasse der graphischen Elemente Beschreibung der Drawltem Klasse F r alle graphischen Elemente die in einer Zustandsmaschine gezeichnet werden k nnen wurde die Basisklasse Drawltem welche von QGraphicsItem abgeleitet ist entworfen Diese Klasse erm glicht es den Eltern Teil eines Elements und die Region falls sich das Element in einer Region befindet zu setzen Ebenfalls ist der lt lt Operator der QXmiIStreamWriter Klasse berladen damit sich die graphischen Elemente wie im Abschnitt 4 4 1 beschrieben speichern lassen Die rein virtuelle Methode writeToXmlStream welche von den einzelnen Elementen implementiert wird dient zum Schreiben der Informationen des Elements in ein IODevice Die Drawltem Klasse ist wie folgt definiert QGraphicsltem Drawltem pare
86. nachgepr ft ob die nderungen bernommen worden sind Ebenfalls die Funktionalit t des NameCheckers wurde verifiziert Es wurde berpr ft dass ein Name nur einmal im Projekt existieren darf Speichern Laden Zum Testen des Speicher und Ladevorgangs wurde eine Zustandsmaschine erstellt und abgespeichert Der Inhalt der abgespeicherten Datei wurde mit der gezeichneten Zustandsmaschine verglichen Anschliessend wurde die gespeicherte Zustandsmaschine wieder geladen und es wurde kontrolliert ob sie korrekt und vollst ndig geladen wurde Exportieren Um den Export der logischen Informationen zu testen wurde eine Zustandsmaschine exportiert Darauf wurden die Informationen der exportierten XML Datei mit den Informationen der gezeichneten Zustandsmaschine verglichen In Zwischenablage kopieren Drucken Das Kopieren in die Zwischenablage und das Drucken wurde gepr ft indem eine Zustandsmaschine kopiert gedruckt wurde und das Resultat mit der am Bildschirm angezeigten Zustandsmaschine verglichen wurde 8 1 8 2 SCHLUSSFOLGERUNG p Schlussfolgerung Resultat Die Diplomarbeit konnte mit Erfolg abgeschlossen werden S mtliche Ziele wurden erreicht Es wurde ein funktionsf higes modellbasiertes Entwicklungstool realisiert Das Tool erlaubt es Zustandswechseldiagramme zu zeichnen Selbst komplexere Zustands maschinen welche Zust nde mit mehreren Regions enthalten lassen sich erstellen Das Verhalten der Zust nde Act
87. nectionltem Klasse ist wie untenstehend gezeigt definiert Connectionltem structure _items 2 textBox TextBox textBoxVectorFromCenter QPointF corners 2 SelectionComer uuid QUuid dataltem Dataltem Connectionltem uuid QUuid Connectionltem sourceltem Diagramltem sourcePoint QPointF targetitem Diagramltem targetPoint QPointF uuid QUuid QUuid virtual Connectionltem setHigherLayer void setDefaultLayer void restoreConnection sourceltem Diagramltem sourcePointQPointF targetltem Diagramitem targetPoint QPointF void sceneE ventF ilter watched QGraphicsltem event QEvent bool setGeometryChanged recalcPoint bool void pure virtual const type int inline source Diagramltem inline target Diagramltem inline dataltem Dataltem inline setDataltem item Dataltem void inline uuid QUuid inline setTextBoxV ectorFromCenter vector QPointF void virtual writeToXm Stream stream QXmlStreamWriter amp QXmlStreamWriter amp setCornerPosition void calcPoint void slot onSelectionChanged void Diagramm 19 Connectionltem Klasse NRUNWNCHERTTETTEIEITETTTTETTETTETEITEITITEITETTETEITETTITEITEITETEITERTITETTITTETEITETETT Hes so WARS EE EE 41 80 se eeeeeceaoeeo oe eCeeeeceeeseecesee ee eege eeeee ege ege ee eee eeegege eege eeg e
88. nen Die Toolbar beinhaltet die Aktionen die in den Ments Edit und New zu finden sind IG o a OFPOrmraa V Add Initialsate Add Terminatestate Add State AddConditionstate Add Transition Add Region Remove Region Copy State Chart to Clipboard Abbildung 12 Die Toolbar 2 6 Die Statusleiste Die Statusleiste wird dazu verwendet um Informationen zu Vorgangen anzuzeigen So zeigt die Statusleiste beispielsweise einen erfolgreichen bzw fehlerhaften Speicher Ladevorgang oder Exportvorgang an BEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEREEE EEEEEEEEEEREEEEEEEEEEEEEEREEEEEEEEEEEEENE gt 2282 22 BB 22 9 EB EEE BE E88 BP E BR BE PB BEE BE BE eeee BEE BB BE BEE EB BE BB BB se eee ee VALAIS ee eee cecececcococccses esses 000 00000 000 000 0060 0008009058 90909 8 0200990909998 e o LCE d fff i Ted ee na nee 8 8898 8 2 a n 2 eee ee 6 2 2 28 BE BB BB BE BE BP BE BE BR BE BB eee 2 8 9888 8 888 aan 88 8 88 889 7 80 ee gt WALLIS v sos0s000000000000000000000000000000000000000000000000000000000000000000000000 00000 ee ow eeeeecoeces EEEE ee G e A eeeseceeceee eeeeeceeeeeeseeeeeeee 88 A EE eeeseeeee eed Ah KEE DIE ENTWICKLUNG DES DATENMODELLS ke 3 Die Entwicklung des Datenmodells Der State Chart Editor erlaubt es Zustandsmaschinen mittels unterschiedlichen E
89. nltem gt pure virtual const type int inline setWidth value qreal void inline setHeight value qreal void inline const width greal inline const height qreal inline const relativOrigin QPointF inline uuid QUuid inline dataltem Dataltem inline setDataltem item Dataltem void virtual writeToXmlStream stream QXmlStreamWriter amp QXmlStreamWriter amp setComerPosition void pure virtual resizeltem corner SelectionComer mouseX qreal mouseY qreal void slot onSelectionChanged void virtual slot onDataToDrawChannged void Diagramm 17 DiagramItem Klasse se M NALAIS seessesesseseesesesoseseeososoososooeecsosecossocosooesoooesooosoosooeosooosooooe Hes so WAR 37 80 S eege ee eee eeecee eege eege eeeeeeeeee ege ege ee eee eeeee eee eese ese eee eeeee ese eeeeeeeeeeeese ees DIE GRAPHISCHEN ELEMENTE ke Im Folgenden werden die Methoden der Diagramltem Klasse kurz beschrieben Die vollst ndige Implementierung dieser Klasse ist elektronisch unter e Software SourceCode src Items e Software SourceCode include Items zu finden Der Konstruktor erstellt ein neues graphisches Element Die minimale Breite und H he sowie der relative Ursprung des Elements werden gesetzt Zudem kann dem Element eine UUID gegeben werden wird keine angegeben so wird eine neue UUID erstellt
90. nt Student Lieu d ex cution Ausf hrungsort EN HES SO Valais Ralph Martig HES SO Valais IT Industrie Industrie Etablissement partenaire Professeur Dozent Etablissement partenaire Partnerinstitution Medard Rieder Partnerinstitution Travail confidentiel vertrauliche Arbeit Expert Experte donn es compl tes oui ja 1 X non nein Steiner Rico Studer Innotec Sion Titre Titel Model based Software Development Tool Chain for Embedded Systems Description et Objectifs Beschreibung und Ziele Das Ziel dieser Bachelorarbeit besteht darin einen Modelleditor f r UML zu schreiben Neben der M glichkeit Standard UML Elemente zu zeichnen muss der Editor auch in der Lage sein Code zu editieren sprich zum Beispiel den K rper einer Methode zu implementieren W hrend der Semesterarbeit wurden bereits ein Datenmodell sowie das Layout des Editors bereitgestellt Es gilt nun den Editor selber zu implementieren H chste Priorit t haben hierbei die sogenannten Zustandsdiagramme Aber es besteht nach wie vor das Ziel auch weitere UML Diagramme wie Klassendiagramme Pakete Klassen und Relationen sowie Objektdiagramme mit Objekten und Links zeichnen zu k nnen Die Mechanismen zum speichern bzw laden eines Models wurden in der Semesterarbeit bereits erschaffen Es muss jedoch daf r gesorgt werden dass die Daten eines Projektes unter zwei verschiedenen Dateitypen gespeichert werden Einer der Dateitypen enth lt im
91. ntRegion Region Drawltem pure virtual const type int setParents item QGraphicsltem region Region 0 void inline parentRegion Region virtual writeToXmlStream stream QXmlStreamWriter amp QXmlStreamWriter amp friend operator write QXmlStreamWriter amp item Drawltem QXmI StreamWriter amp Diagramm 16 DrawItem Klasse Die Implementierung dieser Klasse befindet sich elektronisch unter e Software SourceCode src Diagram e Software SourceCode include Diagram Beschreibung der Diagramltem Klasse S mtliche Elemente einer Zustandsmaschine State Condition State werden von der Klasse Diagramltem abgeleitet Diese Klasse fasst die gemeinsamen Eigenschaften z B Position und Dimension zusammen beinhaltet den relativen Ursprung des Elements definiert die verschiedenen Elementtypen und die Methoden zum Zeichnen der Elemente Sie enth lt einen Zeiger auf die logischen Informationen des Elements und besitzt ein Attribut das die UUID des Elements enth lt Die Dimensionen eines Elements unabh ngig der Form sind in der folgenden Abbildung dargestellt width height Abbildung 27 Dimensionen eines graphischen Elements eseeseeeeeeee ee S DIE GRAPHISCHEN ELEMENTE Ges Der Ursprung befindet sich fur alle Elemente in der oberen linken Ecke Abhangig der Form ist es eventuell erwunscht den Ursprung anders zu wahlen Mit Hilfe des relativen
92. oid setCornerPosition Mit der Funktion calcPoint werden die Ankerpunkte berechnet void calcPoint Dieser Slot wird aufgerufen wenn die Auswahl der Verbindung ndert Die Selection Corner siehe 5 3 3 werden angezeigt oder nicht void onSelectionChanged 5 3 3 Selection Corner Um Anzeigen zu k nnen ob ein Element oder eine Transition markiert ist wurden die Selection Corner eingef hrt Bei den Selection Corners handelt es sich um Markierungen die in den Ecken eines Elements oder an den Enden einer Transition angezeigt werden wenn das Element oder die Transition markiert ist Abbildung 31 Die Selection Corner bei markierten Elementen Transitionen eseeseeeeeeee ee 5 3 4 DIE GRAPHISCHEN ELEMENTE ke Wie die obenstehende Abbildung zeigt besitzen die Elemente 4 und die Transitionen 2 Selection Corner Connectioniltem Diagramltem Diagramm 20 Elemente und Transitionen mit Selection Corner Die Selection Corner besitzen zudem eine Mouse Over Detektion um anzuzeigen dass sich die Maus ber einem Corner befindet Der Corner f rbt sich rot Abbildung 32 Selection Corner und Mouse Over Detektion Zusatzlich werden die Selection Corner dazu verwendet um die Grosse eines Elements zu ndern Beim Dr cken der linken Maustaste auf einem Selection Corner wird die Mausposition im Corner abgespeichert Durch installieren eines SceneEventFilter in der Element Klasse kann nun die Gr ssen
93. onst QModelIndex amp index const Umgekehrt wie bei getItem kann mit getIndex der Index eines Diagramms ermittelt werden QModelIndex getIndex Diagram item T L N ON fe CO 4 4 DIE ENTWICKLUNG DES DIAGRAMMMODELLS ke Mit addItem l sst sich dem Diagrammmodell ein Diagramm item hinzuf gen void addItem Diagram item deleteItem entfernt das Diagramm item vom Diagrammmodell und l scht es bool deleteItem Diagram item removeAllItems entfernt alle Diagramme und l scht diese void removeAllltems Die Funktion diagrams gibt eine Liste der Diagramme die sich im Diagrammmodell befinden zur ck inline QList lt Diagram gt diagrams return _list Der Slot onItemDataChanged dient dazu das Diagrammmodell zu aktualisieren falls die Daten eines Diagramms ge ndert haben beispielsweise der Name void onItemDataChanged bool value Das Signal itemAddedToDiagramModel wird gesendet wenn dem Diagrammmodell ein Diagramm hinzugefugt wurde void itemAddedToDiagramModel Diagram diagram Speichern und Laden Gleich wie beim Datenmodell ist es nutzlos wenn die Daten des Diagrammmodells nicht gespeichert werden k nnen um sie sp ter wieder zu verwenden Folgend soll der Speicher bzw Ladevorgang des Diagrammmodells erl utert werden Beide Vorg nge sind identisch zu jenen des Datenmodells Das Diagrammmodell wird mittels eines StreamWriters in ein ODevice geschrieben
94. ouseEvent private QString _text lt The text contained by the text box qreal _width lt Width of the text box qreal _height lt Height of the text box QPointF _center lt Transition s center point QPointF _vectorFromCenter lt Vector from transition s center to the text box In den Attributen _center und _vectorFromCenter sind die Informationen zur Positionierung der Textbox abgelegt _ width und _heigth geben die Dimension der Textbox an und _text enth lt den anzuzeigenden Text boundingRect und shape wurden bereits im Abschnitt 5 3 1 erkl rt Die Methode paint zeigt den Text an der entsprechenden Position an dazu werden zuerst die Dimensionen des Texts berechnet Wird die Transition verschoben oder ge ndert so kann mit adjustPosition die Textbox wieder richtig ausgerichtet werden Zudem beinhaltet die Klasse einige Getter und Setter Methoden Die Implementierung der Klasse befindet sich elektronisch unter e Software SourceCode src Connections e Software SourceCode include Connections e Ge eeegee eege Sege ee eege eeeeg eg sesede aea a unn SG eeeee eege eege ee eege se en a ee H VALAIS egegeegegeggeeegegegegegegegeegegeegeeggegeeegggegeegeggeegeeggeegegegegeggegeeegeeggegeeegeeegeeegeeeeeeg ee e TEE TT eeeeeeeeegeggegeeeeegeeegeeege gegegeegeggegegeeegeegeeggegeeggegeegegeegeeeegeeggeeg
95. r erstellt Dieser Parser erstellt anhand des IODevices ein DOM Dokument durchl uft dieses Dokument und erstellt Schritt f r Schritt das Datenmodell Der DOM Parser f r das Datenmodell ist wie folgt definiert class DataDomParser public DataDomParser DataModel model bool readFile QIODevice ioDevice inline QHash lt QUuid DataItem gt itemsLoaded return _itemsLoaded private void parseProjectDataElement const QDomElement amp element void parseStateMachineElement const QDomElement amp element StateMachineltem stateMachine void parseStateElement const QDomElement amp element Stateltem state void parseRegionElement const QDomElement amp element RegionItem region void parsePseudoStateElement const QDomElement amp element Dataltem pseudoState void parseTransitionElement const QDomElement amp element TransitionItem transition int getType const QDomAttr attr private DataModel _model lt Reference to the data model QHash lt QUuid Dataltem gt _itemsLoaded lt Map containing all items read Wird ein DOM Parser erstellt muss ein Zeiger auf das Modell mitgegeben werden in welches die geladenen Daten geschrieben werden sollen Danach kann mit readFile der Ladevorgang gestartet werden A EE nn Bu nn pp nn Ben Ban 2 pn pn pe pn pp BB BE BB BE BB BB BE BB BE BB BB RB BB DB BB BD BB DB BE BB DB se BE EB BB BD BB BB BE BB eee DIE ENTWICKLUNG DES DATENMODELLS ke Die An
96. r Editor im entsprechenden Modus befinden Gleich wie das Hinzuf gen eines Elements erfolgt das Hinzuf gen einer Transition in drei Etappen Wird die linke Maustaste innerhalb eines Elements gedr ckt wird berpr ft ob die Transition von diesem Element aus starten darf Handelt es sich um ein g ltiges Element so wird die Position der Maus Startpunkt im Editor abgelegt Beim Verschieben der Maus wird eine Vorschau der Transition als Linie angezeigt Line ausgehend vom Startpunkt zum Mauszeiger Wird die Maustaste innerhalb eines Elements losgelassen so wird erneut berpr ft ob die Transition in diesem Element enden darf Wenn die Transition in diesem Element enden darf werden die Ankerpunkte der Transition berechnet die Transition und der dazugeh rige logische Teil erstellt und in den Modellen abgelegt Falls die Transition nicht in diesem Element enden darf so wird die Vorschau verworfen und keine Transition erstellt IMPLEMENTIERUNG DES STATE CHART EDITORS ke Linke Maustaste wird gedr ckt Beim Dr cken der linken Maustaste werden das Source Element und der Startpunkt gesetzt und im Editor abgelegt Anschliessend wird berpr ft ob das Source Element existiert und ob es sich um ein g ltiges Element handelt Falls die berpr fung erfolgreich war wird die Vorschau der Transition erstellt und ebenfalls im Editor abgelegt void Diagram mousePressAddConnection QGraphicsSceneMouseEvent mouseEvent if mouseEvent g
97. r SVN Dropbox L sung war meine Arbeit immer bestens gesichert Auch meine Mitsch ler Fernando Kummer und Thierry Hischier Diplomanden Infotronics m chte ich erw hnen Sie haben sich bereiterkl rt mein Tool zu testen und konnten mir n tzliche Verbesserungsvorschl ge geben Mein ganz besonderer Dank gilt abschliessend meinen Eltern die mir w hrend des gesamten Studiums stets helfend zur Seiten standen Sion 11 Juli 2011 Ralph Martig 1 1 1 2 EINLEITUNG p Einleitung Diese Diplomarbeit wird f r das Institut f r Systemtechnik ISI der Fachhochschule Westschweiz HES SO Wallis entwickelt Das Ziel der Diplomarbeit besteht darin die Basis f r ein modellbasiertes Entwicklungstool zu schaffen In einem ersten Schritt erlaubt dieses Tool das Erstellen von Zustandswechseldiagrammen Das ISI wird in einem weiterf hrenden Projekt einen Code Generator entwickeln der die gezeichneten Zustandsmaschinen in Code umwandeln kann Das modellbasierte Tool wird in erster Linie f r die Studenten der HES SO Wallis Studiengang Systemtechnik entwickelt damit die Studenten das Projekt w hrend der Summer School mit Hilfe dieses Tools realisieren k nnen Weitere Anwendungsbereiche sind m glich Dieses Dokument beinhaltet die vollst ndige technische Dokumentation zum realisierten Entwicklungstool und ist in vier Teile gegliedert In einem ersten Kapitel wird die graphische Benutzeroberfl che des Tools beschrieben Die n chsten Kap
98. r State Chart Ed OT EE 1 21 DIE PS ee ne eure taeteceresceeesiease 2 ZI Die 0 es S EE 2 212 Die Star Chorr AnS en a ee 2 22 DEAD Ee TEE 2 25 Der rP Gf 1 21 8 10 ee ea een 3 3 NEUES Projekt starten EE 3 4 Eine Zustandsmaschinen hinzuf gen und entfernen uurnennennnnnnnnnennennennennennnnnnunennennnnnnnann 4 5 Eine Zustandsmaschine anzeigen unsnsnrenennnnnnennnnnnennnnnnennennnnnnnnnennnnnnennnnnnennnnnnennennnnnnennnnnnnnennnnn 4 6 Eine Zustandsmaschine I sch en 4 7 Eine Zustandsmaschine Zeichnen anne 4 7 1 Elemente e E 5 12 Elemente mike rennen ae 6 1 3 Blementeentiernen asssesuseensneieesleiminaeii 7 7 4 TEE EE EE 7 7 5 Einem Zustand Regionen hinzuf gen entfernen unnsnneeeneennnnennnnnnnnnnnnennnnnennnnnnennnnennnennnnnnn 8 76 Keele EE 9 7 7 Transitionen Text verschieben uussssnnnnnnnenennnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnen 10 7 3 Transitonen entleeren nein 10 8 Eigenschaften eege 11 S1 Code implemenereN ee een 11 9 e ed E E 11 10 In Zwischenablage Kopieren nee 11 11 Ki erto C2 ee a ee ee ee re 12 12 EE 12 BENUTZERHANDBUCH ke 1 Beschreibung Der State Chart Editor ist ein modellbasiertes Entwicklungstool dass es erlaubt Zustandswechseldiagramme zu erstellen Nebst dem Zeichnen der Zustandsmaschinen kann zudem Programmcode in Zustanden oder auf Transitionen implementiert werden Die Diagramme konnen gedruckt oder zur weiteren Verwendung in die Zwisch
99. rce und Target der Transition angezeigt Property Editor Gi Transition Properties General Name fromlnit Source INIT Target VAIT Implementation W Abbildung 8 Property Editor einer Transition Die Men leiste Im Folgenden werden die drei Men s der Men leiste beschrieben Das Men File Im Men File befinden sich Basis Funktionen wie zum Beispiel ein neues Projekt erstellen das aktuelle Projekt speichern oder ein bestehendes Projekt ffnen Zus tzlich kann der logische Teil der Zustandsmaschine in ein XML File exportiert werden welches sp ter mit dem Code Generator weiterverarbeitet werden kann Ebenfalls eine Druck Funktion ist implementiert mit welcher die auf der Arbeitsfl che angezeigte Zustandsmaschine ausgedruckt werden kann E Clock State Chartrsydes State Chart Editor Edit New New File Ctrl N Open Ctrl O g wl Save Ctrl S Isate Add Terminatestate Add Save as Ctrl Shift S Sue 2 RF 3 Export Logical Part Print Ctrl P Ent Ctrl Q Abbildung 9 Das Men File Ge eege eege un a n u u a a a m nmn nm nun 2 2 n 2u 0 uuu20 2aemn n n n u uae u uau au aua m n Ae e e ee Re VALAIS es SEITE KENT 2000980008 09000896 000090200802 09080 009050800050 000000050 0 0000 0 56 EEE BE ee o ee e j SE Vd eeeeeeeeeeeeeeeeeeeoeeeeees 000098065080 000 0009006 0080050 0
100. rt false Zudem besitzt die Klasse die Methode setDefaultName welche verwendet wird wenn ein neues Element erstellt wird Der Elementname wird wie folgt konstruiert lt Elementtyp_ gt 6 4 6 4 1 IMPLEMENTIERUNG DES STATE CHART EDITORS p Die NameChecker Klasse befindet sich elektronisch unter e Software SourceCode src DataModel e Software SourceCode include DataModel Code Editor In den Zustanden oder auf Transitionen kann das Verhalten implementiert werden Zur Implementierung des Verhaltens wird ein kleiner Code Editor ge ffnet Dieser Code Editor wurde auf der Basis des Code Editor Example der Qt Reference Documentation siehe 3 entwickelt Der Source Code des Code Editors ist elektronisch unter e Software SourceCode src Ul e Software SourceCode include Ul zu finden Weitere Funktionen Im letzten Abschnitt wird noch kurz auf die Implementierung des Speicher und Ladevorgangs den Export das Kopieren in die Zwischenablage und das Drucken eingegangen Speichern Laden In den Kapiteln der Modelle 3 und 4 wurde bereits beschrieben wie ein Modell in ein IODevice geschrieben und wieder von einem IODevice geladen werden kann Beim Abspeichern eines Projekts des State Chart Editors ist es jedoch von Vorteil nur in eine Datei abzuspeichern So wird garantiert dass die graphischen und logischen Informationen immer zusammenbleiben Es wird nun gezeigt wie die beiden Teile bei einem Spei
101. rung der Elemente als BaUMStruktur cesses 9 Abbildung 15 Baumstruktur der Elemente nunnnneeenennennennnnnnnennnnnnnnnnennnnnnnnnnnnnnnnnennnnnnnnnnnnnnen 10 Abbildung 16 Tabellen Modell zur Beschreibung der Item Indexierun cesses 10 Abbildung 17 Model Index in einer Baumstruktur usssnsnneennnneennnnnnnnenennnnnnnnnnnnnnnennnnnnnnnen 11 Abbildung 18 Speichern Laden des Datenmodells oes 20 Abbildung 19 Prinzip des Diagerammmodelle seen 23 Abbildung 20 Repr sentierung der Diagramme in einer Liste teen 24 Abbildung 21 Speichern Laden des Diagrammmodells ue 27 Abbildung 22 Die Koordinatensysteme unnneeennnnennennnennnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnennnnanennnnnn 34 Abbildung 23 Begrenzungsrechteck eines graphischen Elements boundingRect 34 Abbildung 24 Kontur eines graphischen Elements Iebapel ees 35 Abbildung 25 Die Propagation der koordinatensvsteme Een 35 Abbildung 26 Stapelung der graphischen Elementen 35 Abbildung 27 Dimensionen eines graphischen Elements EEN 36 Abbildung 28 Relativer Ursprung der graphischen Elementer 37 Abbildung 29 Ankerpunkt einer Transition bei einem rechteckigen Element 40 Abbildung 30 Ankerpunkt einer Transition bei einem kreisf rmigen Element 41 Abbildung 31 Die Selection Corner bei markierten Elementen Transitionen 43 Abbildung 32 Selection Corner und Mouse Over Detektion ussssssennsnnnnnnennnnnnnnnnnennnnnnnn 44 Abbildung 33
102. rz die meistbenutzten Funktionen dieser Klasse beschrieben Alle geometrischen Informationen eines Items basieren auf dem lokalen Koordinatensystem des Systems Die Position des Items pos ist die einzige Funktion die nicht im lokalen Koordinatensystem arbeitet sondern die Position im Koordinatensystem des Parent Item falls es eines besitzt zur ckgibt scenePos gibt jedoch immer die Position des Items im lokalen Koordinatensystem zur ck ft Koordinatensystem des CAoraphicsitem K Koordinatensystem der QoranhicsScene Abbildung 22 Die Koordinatensysteme Mit setFlag lassen sich Eigenschaften des QGraphicsItem setzen Zum Beispiel dass das Item ausw hlbar ist QGraphicsItem ItemIsSelectable oder das es verschiebbar ist QGraphicsItem ItemIsMovable Um ein eigenes graphisches Element zu erstellen wird die Klasse von QGraphicsItem abgeleitet Anschliessend m ssen mindestens die zwei rein virtuellen Funktionen boundingRect und paint implementiert werden Die Funktion boundingRect definiert das Begrenzungsrechteck des Elements Das Element muss innerhalb dieses Rechtecks gezeichnet werden QGraphicsView nutzt diese Funktion um festzustellen ob das Element neu gezeichnet werden muss SSS SSS 2 SSS ESSE HSS SSS PS i ee lb ER Abbildung 23 Begrenzungsrechteck eines graphischen Elements boundingRect Optional ist es m glich shape zu implementieren Diese Funktion gibt anders als boundingRec
103. s ein Element weitere Elemente enth lt oder ein ausgehende Transitionen besitzt werden diese ebenfalls gel scht 7 4 Elemente verschieben Zum Verschieben von Elementen m ssen diese zuerst markiert werden anschliessend k nnen sie mit gedr ckter linker Maustaste verschoben werden An der gew nschten Stelle wird die Maustaste wieder losgelassen BF clockStateChartrsydes State Chart Editor Eile Edit New Add New State Chart Add Initialsate Add Terminatestate Add State AddConditionstate Add Transition Add Region Remove Region Copy State Chart to Clipboard fromStart frominit re fromWait re fromTick Hes so Wnts 7 12 BENUTZERHANDBUCH 7 5 Einem Zustand Regionen hinzuf gen entfernen Hinzuf gen Standardm ssig besitzt ein Zustand eine Region Um dem Zustand weitere Regionen hinzuzuf gen wird Add Region Cal im Men Edit oder in der Toolbar ausgew hlt Danach wird der Zustand welchem die Region hinzugef gt werden will mit der linken Maustaste angeklickt ee Be clockStateChartrsydes State Chart Editor File New Select Add Region SE a Remove Region Project W Copy State Chart to Clipboard Abbildung 17 Add Region Men Edit a Abbildung 18 Add Region in der Toolbar Im Selektierungsmodus kann durch Verschieben mit linker Maustaste der Region Begrenzungslinie die Breite der Region geandert wer
104. sceneEventFilter QGraphicsItem watched QEvent event setGeometryChanged aktualisiert die Verbindung Mit recalcPoint kann zudem angegeben werden ob die Ankerpunkte neu berechnet werden sollen void setGeometryChanged bool recalcPoint type liefert den Typ der Verbindung virtual int type const 0 Mit dataltem und setDataltem kann der Zeiger auf den logischen Teil des Elements gelesen bzw gesetzt werden inline DataItem dataItem return _dataltem inline void setDataItem DataItem dataItem _dataltem dataltem eeseeeees DIE GRAPHISCHEN ELEMENTE ke Die folgenden Getter Methoden denen zum Lesen des Zeigers von Source Target und der UUID inline DiagramItem source return _items 0 item inline DiagramItem target return _items 1 item inline QUuid uuid const return _uuid Mit der Funktion setTextBoxVectorFromCenter lasst sich der Vektor vom Mittelpunkt der Verbindung zur Textbox setzen siehe 5 3 4 Textbox inline void setTextBoxVectorFromCenter QPointF vector _textBoxVectorFromCenter vector writeToXmlStream schreibt die Informationen der Verbindung in einen Stream Um spezifische Informationen einer Transition zu schreiben muss diese Funktion in der abgeleiteten Klasse neu implementiert werden virtual QXmlStreamWriter amp writeToXmlStream QXmlStreamWriter amp stream setCornerPosition platziert die Selection Corner siehe 5 3 3 v
105. st QModelIndex amp index int role const Ein Modell muss index implementieren Diese Funktion wird von den Views verwendet um auf die Daten zugreifen zu konnen Ein Index wird durch die Angabe der Zeile und Spalte sowie durch den Index des Eltern Elements erstellt siehe 3 1 1 Der Index QModellndex Alle erstellen Indizes enthalten einen Zeiger auf das Element wodurch der Zugriff auf dieses Element sichergestellt wird QModelIndex index int row int column const QModelIndex amp parent QModelIndex const parent gibt den Index des Eltern Elements des Elements welches durch index referenziert ist zur ck QModelIndex parent const QModelIndex amp index const Die Funktion rowCount retourniert die Anzahl Kind Elemente die das mit parent angegebene Element enthalt int rowCount const QModelIndex amp parent QModelIndex const columnCount gibt immer 1 zur ck da es sich beim strukturellen Aufbau um eine Baumstruktur handelt int columnCount const QModelIndex amp parent QModelIndex const flags liefert die Eigenschaften die das Modell unterst tzt Beispielsweise dass die Elemente selektierbar sind Diese Methode wird von den Views verwendet Qt ItemFlags flags const QModelIndex amp index const DIE ENTWICKLUNG DES DATENMODELLS ke Die Funktion setData wird zum Setzen der Daten entsprechend der role des Elements angegeben durch index verwendet bool setData const QModelIndex
106. struktur Um nun den Index von A bzw B zu erhalten wird wie folgt vorgegangen QModelIndex indexA QAbstractItemModel createIndex 0 0 lt pointer to A gt QModelIndex indexB QAbstractItemModel createIndex 1 0 lt pointer to B gt Sp ter kann das Modell somit jedes Element referenzieren Daf r wird die Funktion QAbstractItemModel index neu implementiert Um den Index eines Elements mit dieser Funktion zu erhalten sind drei Informationen notig Es werden ein Zeiger auf das Eltern Element und die Position des Elements Zeile und Spalte benotigt Wird nochmals die Abbildung 17 betrachtet w rden die Anweisungen zum Referenzieren der beiden Elemente durch einen Index wie folgt aussehen QModelIndex indexA model gt index 0 0 QModelIndex QModelIndex indexB model gt index 1 0 indexA Weitere Informationen und detailliertere Beschreibungen k nnen der Qt Reference Documentation 3 entnommen werden DIE ENTWICKLUNG DES DATENMODELLS ke 3 2 Das Element 3 2 1 Beschreibung Elemente sind Objekte mit welchen Zustandsmaschinen erstellt werden und eine bestimmte Anzahl Informationen enthalten konnen Alle Elemente besitzen eine gewisse Anzahl an Methoden und Attributen haben ein Eltern Element und konnen teilweise weitere Elemente enthalten Diese gemeinsamen Punkte werden in einer Basisklasse zusammengefasst Spater kann jedes Element diese Klasse implementieren und seine Besonderheiten hinzuf gen Diese
107. t die exakte Kontur des Elements zur ck Sie wird von der QGraphicsScene verwendet um beispielsweise festzustellen ob ein tem angeklickt wurde Die Standardimplementierung von shape gibt das Begrenzungsrechteck zur ck ee eege se 6 e e H e 4 es gt sees amp sec se ee D amp VA Ais en 8988 n n 88 ne pn 8 BB BB BE BB BE BEE SE BE BEE BE BB BE BR BE BB BOB BO gt 22 BEE BE BEE BE BE BEE BE BP BB BB eee em A Da Ai j VALLIS 6 eege 88 880 96656 95 955 O8 n 6 eeeegeeeeee Dee eegeegeeeeeeeeeeeeeeeeeeeeeeeeeeeeg A WE A VALLIS 2 2 BE BB BEE BE BEE BEE BELLE BE BE BE BE SE BER BE BE BEE BE SEE SEE BEE BE BEE BE BE BE BEE BE BEE BE SE BT BE SE BE BER BE BE BB BR BGB BB BE BB BB BB ee 6 GESEIS Be eee pn en pen Bann Bu Ban en pp BB B BB BE BB BE BB BB BE BB BE BB BB BR BB DB BB BR RB BD BE BB BB DB BE BR BB BR BB BB BB BE BB BB 8 DIE GRAPHISCHEN ELEMENTE d 4 ee 7 7 0 0 3 u 02 2 7 5 0 57 2 eT eh Abbildung 24 Kontur eines graphischen Elements shape Die Funktion paint welche hauptsachlich von QGraphicsView aufgerufen wird zeichnet den Inhalt des tems im lokalen Koordinatensystem Items k nnen andere Items enthalten sowie auch von anderen Items enthalten werden Alle Items haben ein Parent Item und k nnen eine Liste von Child Items Ein Item ausser wenn es kein Parent Item besitzt ist immer im lokalen Koordinatensystem des Parent Items positioniert Parent Ite
108. t button Qt LeftButton return Editor editor Editor instance QGraphicsScene mousePressEvent mouseEvent editor gt setFrom dynamic_cast lt DiagramItem gt itemAt mouseEvent gt scenePos editor gt setConnectionStart new QPointF mouseEvent gt scenePos check if source exists and type is ok if type not ok clear preview if editor gt from amp amp editor gt from gt type DiagramItem StateType amp amp editor gt from gt type DiagramItem ConditionStateType amp amp editor gt from gt type DiagramItem InitialStateType editor gt setFrom NULL editor gt setConnectionStart NULL if all ok set preview else if editor gt from amp amp editor gt from gt type DiagramItem StateType editor gt from gt type DiagramItem ConditionStateType editor gt from gt type DiagramItem InitialStateType editor gt setConnectionPreview addLine QLineF editor gt connectionStart mouseEvent gt scenePos editor gt connectionPreview gt setZValue Diagram HighestLayer mouseEvent gt accept Maus wird bewegt Beim Bewegen der Maus wird die Vorschau der Transition aktualisiert void Diagram mouseMoveAddConnection QGraphicsSceneMouseEvent mouseEvent Editor editor Editor instance if editor gt from amp amp editor gt connectionPreview editor gt connectionPreview gt
109. t werden Einer QAction kann mit setShortcut eine Tastenkombination zugewiesen werden QAction exit file gt addAction tr E amp xit this SLOT close exit gt setShortcut Qt CTRL Qt Key_Q 6 1 2 Toolbar Um dem Main Window eine Toolbar hinzuzuf gen wird im Konstruktor eine neue QToolBar erstellt Dieser Toolbar k nnen nun die QActions die fur die Men eintr ge erstellt wurden angegeben werden QToolBar toolbar new QToolBar Add Item this toolbar gt addAction insertState Mit setToolButtonStyle l sst sich das Erscheinungsbild der Toolbar bestimmen So kann gew hlt werden dass in der Toolbar der Icon und der Text angezeigt werden toolbar gt setToolButtonStyle Qt ToolButtonTextUnderIcon addToolBar f gt die Toolbar im angegebenen Bereich schliesslich dem Main Window hinzu addToolBar Qt TopToolBarArea toolbar 6 1 3 Die Ansichten Die Projekt Ansicht State Chart Ansicht und der Property Editor wurden mit Hilfe von QDockWidgets realisiert Ein QDockWidget ist ein Fenster das am Rand innerhalb des Main Windows angedockt werden kann Dem QDockWidget kann schliesslich ein beliebges Widget View angegeben werden das die angezeigt werden soll Folgend ein Beispiel das zeigt wie ein QDockWidget im Konstruktor des Main Windows erstellt und wie es dem Main Window hinzugef gt wird QDockWidget dockWidget new QDockWidget Project View this 6 1 4 IMPLEMENTIERUNG DES ST
110. tate Chart Ansicht ausgew hlt und die Taste Delete gedr ckt Hinzuf gen Beim W hlen von Add New State Chart wird der Slot onNewStateChart der MainWindow Klasse aufgerufen Zum Hinzuf gen eines Diagramms muss zuerst ein neues Diagramm QGraphicsScene und der logische Teil des Diagramms StateMachineltem erstellt und gelinkt werden Anschliessend werden das Diagramm und der logische Teil in den entsprechenden Modellen abgelegt Signale und Slots miteinander verbunden und das erstellte Diagramm in der Arbeitsfl che angezeigt Das windowModified Flag wird gesetzt um dem Main Window eine nderung zu signalisieren Der folgende Programmcode zeigt die Implementierung des beschriebenen Slots void MainWindow onNewStateChart d create new diagram Diagram diagram new Diagram DataModel dataModel DataModel instance create new statemachine StateMachineItem sm new StateMachineltem diagram gt uuid diagram gt setDataltem sm add diagram to data model dataModel gt addItem dataModel gt rootItem sm add diagram to diagram model _diagramModel gt addItem diagram _diagramView gt selectionModel gt setCurrentIndex _diagramModel gt getIndex diagram QItemSelectionModel ClearAndSelect connect diagram SIGNAL selectionChanged this SLOT onItemSelectedInDiagramScene connect diagram SIGNAL diagramModified bool this SLOT setWindowModified bool setwindowModifie
111. ten Zum ndern der Elementgr sse wird sceneEventFilter wie folgt implementiert bool Diagramltem scenefventfilter QGraphicsItem watched QEvent event SelectionCorner corner dynamic_cast lt SelectionCorner gt watched if corner NULL return false QGraphicsSceneMouseEvent mouseEvent dynamic_cast lt QGraphicsSceneMouseEvent gt event if mouseEvent NULL return false switch event gt type case QEvent GraphicsSceneMousePress corner gt setMouseState SelectionCorner Pressed corner gt mouseDownX mouseEvent gt pos x corner gt mouseDownyY mouseEvent gt pos y break case QEvent GraphicsSceneMouseRelease corner gt setMouseState SelectionCorner Released break case QEvent GraphicsSceneMouseMove corner gt setMouseState SelectionCorner Moving break default return false break if corner gt mouseState SelectionCorner Moving resizeltem corner mouseEvent gt pos x mouseEvent gt pos y return true Beim Aufruf von sceneEventFilter wird zuerst berpr ft ob das Event von einem Selection Corner stammt Stammt das Event von einem Selection Corner so wird die Mausposition beim Dr cken der linken Maustaste im Corner abgespeichert damit w hrend dem Bewegen der Maus die nderung der Gr sse berechnet werden kann Beim Bewegen der Maus wird resizeltem mit Angabe des Corners und der aktuellen Mausposition aufgerufen
112. tieren Programmcodes k nnte erw nscht sein Momentan wird jedoch nur das Drucken der Zustandsmaschinen angeboten UNTERSCHRIFT Ges 9 Unterschrift Sion 11 Juli 2011 Ralph Martig S Hes S0O RE 71 80 Seeegeeeeeeeegeeeeeegeeeeeeeeeegeegeeg Sege eeeeeegeeeeeeeeegeegeeegeegeegeegeeeegeegeeegeeeegeeg 10 10 1 VERZEICHNISSE Verzeichnisse Abbildungsverzeichnis Anbildune 1 Das Maln VWV e ee E 2 Abbildung 2 Die Projekt Ansicht aan 3 Abbildung 3 Die State Chart Ansicht Ee 3 Abbildung 4 Die Arbeitsfl che unnssesnenesnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnennnnnnenn 4 Abbildung 5 Der Property Editor usssssrernernennnnennnnnnonnennnnnnnonnnnnnnnnnennnnnnonnnnnnnnnnennnnnnnnonnnnnnnnennnrnnnnnnener 4 Abbildung 6 Property Editor eines Zustandes nssesennsnsnnennnnnnnnnnnnnnnnnnnnnnnnnnnnennnnnnnnnnnnnnnnnennnnannnnnnnn 5 Abb ldun2 7 Der Code E 5 Abbildung 8 Property Editor einer Transition ussesnsssneeeennnnennnnnnnnnnnnnnnnnnennnnnnnnnnnnnnnnnennnnnnnnnnnn 6 Abbildung 9 Das Men Fila aan a 6 Abbildung 10 Das Men De Le 7 Abbildung 11 Das Men New uanssssnesesnsnananannnnnennnnnnnnnnnnnnnnnnnnnnenennnnnnnnnnnnnnenennnnnnnnnnnnnnnnennnnnnnnnnnnnnnnnnnnenen 7 Abbildung 12 Die T001bar ee tere rere ere ter a EN Ea Naaa TE ie ee Aaaa neta ernest rere 7 Abbildung 13 Nutzen eines strukturellen Aufbaus f r das Datenmodell 8 Abbildung 14 Repr sentie
113. tion abgeleitet von Connectonltem ee 46 REFERENZEN ke 11 Referenzen 1 Jurgen Wolf Qt 4 6 GUI Entwicklung mit C 2 Auflage Galileo Press 2010 OMG Unified Modeling Language OMG UML Superstructure V2 1 2 Qt Reference Documentation Qt Assistant Version 4 7 4 Nokia Corporation 2010 Jasmin Blanchette Mark Summerfield C GUI Programming with Qt 4 Prentice Hall Professional 2006 Exmaple of re sizing a QGraphicsItem using Mouse events http davidwdrell net graphicslesson3 htm 18 Mai 2011 Drawing Gird on QGraphicsScene http stackoverflow com questions 2779142 artifacts when trying to draw background grid without anti aliasing in a qgraphic 19 Mai 2011 QuaZIP Qt C wrapper for ZIP UNZIP package http quazip sourceforge net 10 Juni 2011 A Massively Spiffy Yet Delicately Unobtrusive Compression Library http zlib net 10 Juni 2011 90088 98988 eg ANHANG 12 Anhang 12 1 Speicherformate Die logischen und graphischen Informationen der Elemente werden im XML Format gespeichert Dieser Abschnitt beschreibt den Aufbau der beiden Dateien 12 1 1 Logische Elemente Die logischen Informationen werden in einer XML Datei mit dem Root Tag lt ProjectData gt abgespeichert Fur die Zustandsmaschinen wird der Tag lt StateMachine gt mit den Attributen type name und uuid erstellt S mtliche Elemente die in einer Zustandsmaschine bzw Region enthalten sein k nnen sind
114. ty of Applied Sciences Western Switzerland x Arstate Diplomarbeit Model based Software Development Tool Chain for Embedded Systems Diplomand in Ralph Martig Ziel des Projekts Das Ziel der Bachelorarbeit besteht darin die Basis f r ein modellbasiertes Entwicklungstool zu schaffen In einem ersten Schritt wird zun chst nur das Erstellen von Zustandswechseldiagrammen behandelt Methoden Experimente Resultate Eine graphische Benutzeroberfl che erlaubt es dem Benutzer Modelle zu erstellen Zurzeit ist es m glich mit diesem Tool vollst ndige Zustandswechseldiagramme zu zeichnen Nebst dem Zeichnen der Zustandsmaschinen kann zudem Programmcode in Zust nden oder auf Transitionen implementiert werden Die Diagramme sowie 2011 der Code k nnen gedruckt oder zur weiteren Verwendung in die Zwischenablage kopiert werden Das Modell wird in eine Archiv Datei gespeichert welche die graphischen und logischen Informationen in der Form von XML enth lt Studiengang Die logischen Informationen k nnen in einem n chsten Schritt beispielsweise Systemtechnik von einem Code Generator weiterverarbeitet werden oder auch in ein g ngiges Format wie XMI exportiert werden Anwendun reich Aas SSES Das Entwicklungstool wurde mit Hilfe der Qt Library implementiert Weitere Verantwortliche r Dozent in Medard Rieder medard rieder hevs ch Partner HES SO Wallis Institut far Systemtechnik Libraries z B ZLIB wurden
115. uer angegeben werden statusBar gt showMessage tr File saved 2000 6 2 6 3 IMPLEMENTIERUNG DES STATE CHART EDITORS be Die Arbeitsflache Die Arbeitsflache wird im Central Widget des Main Windows erstellt Es wird eine QGraphicsView erstellt um den Inhalt einer QGraphicsScene Diagramm zu visualisieren Mit setCentralWidget kann dem Central Widget des Main Windows diese View angegeben werden Mit setScene kann die QGraphicsScene angegeben werden QGraphicsView view new QGraphicsView this setCentralWidget view Toolbars Dock Widgets Central Widget Quelle Qt Reference Documentation 3 Abbildung 39 Bereiche des Main Windows Die Bedienung des State Chart Editors Dieser Abschnitt beschreibt die Hauptelemente der Implementierung der Bedienung des State Chart Editors Es wird beschrieben wie Diagramme erstellt wie diese im Diagrammmodell abgelegt und wie sie wieder entfernt werden k nnen Um das Zeichnen der Zustandsmaschinen zu vereinfachen wurde die Editor Klasse entwickelt Diese Klasse dient zum Bestimmen des Bearbeitungsmodus Selektionieren Hinzuf gen und beinhaltet beim Hinzuf gen von Elementen oder Transitionen eine Vorschau des Elements Transition Mit Hilfe der Editor Klasse wird gezeigt wie eine Zustandsmaschine in einem Diagramm gezeichnet werden kann Dazu geh ren das Hinzuf gen von Elementen mit parallelem Hinzuf gen des logischen Teils zum Datenmodell das Erstellen
116. uid 0b2ecfa6 55c9 4379 87e7 2261c81826d2 gt lt Trigger gt tm 1000 lt Trigger gt lt Guard gt lt Guard gt lt Action gt lt Action gt lt Transition gt lt Transition type Transition name fromTick uuid 667719a3 a6c9 476c 8fda f0055a6ccf0e gt lt Trigger gt lt Trigger gt lt Guard gt lt Guard gt lt Action gt lt Action gt lt Transition gt lt StateMachine gt lt ProjectData gt JH Hes SO n 35353353 35 253 32585535 25 25 25 25353 8525 252 28S aS 8525S age oes ae aoe 76 80 898EE EEE BEEEEEBEEBEEE SEELE EEE BEE BEE BEE BEE BEE EEE BEE BE EEE BEE EEE 89 PO ees ANHANG 12 1 2 Graphische Elemente Die graphischen Informationen werden in einer XML Datei mit dem Root Tag lt DiagramData gt abgespeichert Jedes Diagramm Zustandsmaschine wird in einem Tag lt Diagram gt mit dem Attribut uuid abgelegt Die graphischen Elemente werden im Tag lt DiagramItem gt gespeichert Das Tag besitzt das Attribut type das den Elementtyp angibt die Attribute width height x und y welche die Dimension und Position des Elements angeben sowie das Attribut uuid mit der UUID des Elements lt DiagramItem type width height x y UUid HHHHHH HHHH HHHH HHHH HHH gt Zust nde enthalten zudem den Tag lt Region gt welcher ein Attribut uuid und width enth lt lt Region uuid HH HHHH HH HEH EH width gt Die Transition werden im Tag lt Connection
117. um die Elemente oder durch Gedr ckt halten der CTRL Taste r mg MN clockstateChartrsydes State Chart Editor E E File Edit New Region_1 d WAIT Region_2 4 TICK Region_3 fe fromStart fe fromlnit re fromWait re fromTick Add New State Chart Add Initialsate Add Terminatestate Add State AddConditionstate Add Transition Add Region Remove Region Copy State Chart to Clipboard Property Editor fromStart Source START Target INIT Abbildung 14 Mehrfachauswahl durch Ziehen eines Rahmens d NN VALAIS Hes so waits BENUTZERHANDBUCH Ges 7 3 Elemente entfernen Um ein Element oder mehrere Elemente zu entfernen wird dieses bzw diese markiert Durch anschliessendes Dr cken der Delete Taste wird das Elemente die Elemente gel scht SENG Fa lt Mf CiockStateChart rsydes State Chart Editor Wm e gt File Edit New op D OF ra zs Add New State Chart Add Initialsate Add Terminatestate Add State Add Conditionstate Add Transition Add Region Remove Region Copy State Chart to Clipboard Project Property Editor E State Properties General Name Region_1 d WAIT Region_2 4 TICK Region_3 fe fromStart fromlnit fromWait re fromTick TICK Abbildung 15 Element e markieren zum Entfernen Bemerkung Fall
118. und kann anschliessend mit einem DOM Parser wieder gelesen werden StreamWriter ABS Diagrammmodell DOM Parser Abbildung 21 Speichern Laden des Diagrammmodells eeeeeveeg ee ecees u 0 0 9 0 0 H Zu a VALAIS ee eee eee 0000099098999 0000900989000 00002006000 0666 HEHE HE 00000900 009060090 0900000600 9000 eS S IT a 999090909800808098909008008900899900908 0008000090000 0900000090 00800808 0000000080000 0000000000000 08000909908 27 80 wf A 3 WALLIS 6 egeeeegeeegeegeeegegeeegegeegegeeegeeeeeegeeegeeeeeeeeeeeeeeggeegeeegegeeeegeeeeeeeeeeeege secs gt oe enen nen pn nn pn en B BB BB BB BB BB BB BR BB BE BB BB BR BB BD BB BB BR BR BB BB eae eeeee BB BB BB BE BB ees sees Ben Bene BB Ben BB 8 8 8 DIE ENTWICKLUNG DES DIAGRAMMMODELLS ke 4 4 1 Speichern Wie beim Datenmodell wird das Diagrammmodell im einem XML Format abgespeichert Dazu wird ein StreamWriter verwendet Damit das Diagrammmodell abgespeichert werden kann wird in der DiagramModel Klasse und in der Diagram Klasse der lt lt Operator des QXmiStreamWriter als Freundmethode hinzugef gt und berladen Folgende Code Ausschnitte zeigen den lt lt Operator des Diagrammmodells und des Diagramms QXmlStreamWriter amp operator lt lt QXmlStreamWriter amp writer DiagramModel model start xml document writer writeStartDocument 1 0 writer setAutoFormatting true
119. ung Die Schnittstelle Modell implementiert die Qt Klasse QAbstractListModel Diese Klasse definiert ein Interface das es den unterschiedlichen Views in Qt erlaubt auf den Inhalt des Diagrammmodells zuzugreifen und diesen anzuzeigen QAbstractListModel A DiagramModel Diagramm 8 Implementierung von QAbstractListModel durch das DiagramModel eseeeceee 4 3 2 DIE ENTWICKLUNG DES DIAGRAMMMODELLS Folgendes Klassendiagramm zeigt das vollst ndige Diagrammmodell Diagramm 9 Klassendiagramm des Diagrammmodells Das Diagrammmodell ist wie folgt definiert QAbstractListModel CN DiagramModel static _plnstance bool list QList lt Diagram gt DiagramModel parent QObject 0 virtual DiagramModel list static instance DiagramModel p const index row int column int parentconst QModellndex amp QModellndex QModellndex const data index const QModellndex amp role int QVariant setData index const QModellndex amp value const QVariant amp role int Qt EditRole bool const rowCount parent const QModellndex amp QModellndex int const flags index const QModellndex amp Qt ItemFlags const getitem index const QModellndex amp Diagram const getindex item Diagram QModellndex additem item Diagram void deleteltem item Diagram bool removeAllitems void inline diagram QL
120. w besitzt wie es bereits beschrieben wurde eine Men und Statusleiste eine Toolbar sowie verschiedene Ansichten Zur Implementierung des Main Windows wurde ausschliesslich die Qt Library verwendet Das Main Window wurde mit Hilfe der QMainWindow Klasse erstellt Zur Implementierung der Men leiste und den Men s wurde QMenuBar bzw QMenu verwendet Die Toolbar wurde mit QToolBar erstellt und bei den verschiedenen Ansichten handelt es sich um QDockWidgets Die Statusleiste wird mittels QStatusBar dargestellt Folgend wird beschrieben wie die Men leiste Toolbar die Ansichten und die Statusleiste in Ot erstellt werden Siehe auch e Software SourceCode src Ul e Software SourceCode include Ul IMPLEMENTIERUNG DES STATE CHART EDITORS ke 6 1 1 Men leiste Das Main Window QMainWindow besitzt bereits eine Men leiste Auf diese Men leiste kann mittels der Methode menuBar zugegriffen werden Mit Hilfe von addMenu k nnen dieser Men leiste die verschiedenen Men s QMenu hinzugef gt werden Dazu werden die einzelnen Men s im Konstruktor des Main Windows erstellt und der Men leiste hinzugef gt wie es untenstehendes Beispiel zeigt QMenu file new QMenu tr amp File this menuBar gt addMenu file Die Men eintr ge werden schliesslich mit QAction erstellt und dem Men hinzugef gt Diese QActions k nnen mit einem Slot verbunden und sp ter falls es erw nscht ist auch in einer Toolbar verwende
121. weisungen um ein Datenmodell zu laden wurden wie folgt aussehen DataModel dataModel DataModel instance DataDomParser parser dataModel parser readFile amp ioDevice Wiederum ist die vollstandige Implementierung elektronisch unter e Software SourceCode src DataModel e Software SourceCode include DataModel zu finden se se D D ee VALAIS 00000002000000900000020000000000009 00000000000 009000000 0000000000000 0006000000 ee A Jf TENTS SCCSESSOSSSCSHOSSSSSSSSESEOSSESSHSSEHSSSSSOS SSS SSS SSSESSSSSSSESSSOSSESSESCSSESSESSESEESEESSEESEEESEE A WAR Se d e e e eees oe sees eases eeeeseee sos Pa J2 Ge eege eege ee eege eeeeeeee eege ege eege eeeeg eege eege ee eee BE BE BO eege eege ee eege eeeeeeeeee eege eege EEEE 4 1 DIE ENTWICKLUNG DES DIAGRAMMMODELLS ke Die Entwicklung des Diagrammmodells Es ist m glich mit dem State Chart Editor mehrere Zustandsmaschinen zu zeichnen Jede Zustandsmaschine entspricht einem Diagramm Die Anzahl der Zustandsmaschinen ist vorgangig noch nicht bekannt Um die unterschiedlichen Diagramme Zustandsmaschinen besser verwalten zu konnen wird ahnlich wie bei den Elementen Datenmodell ein Modell fur die verschiedenen Diagramme entworfen Beim Diagrammmodell handelt es sich um ein einfaches Listenmodell das samtliche Diagramme als Liste darstellen l sst Bemerkung Anders als beim Datenmodell befinden sich die Daten beim Diagrammmodell direkt im Modell Die D
122. wie folgt aufgebaut Zust nde lt State type name UUuid H HH HHHH HHHH HHHH HRH lt ActionOnEntry gt lt ActionOnEntry gt lt ActionInState gt lt ActionInState gt lt ActionOnExit gt lt ActionOnExit gt lt Regions gt lt Regions gt lt State gt Regionen lt Region type name uuid HHHHH EEE HHHH EHER gt Pseudo Zust nde lt PseudoState type name UUid HH HH HER 20000 DAMM gt Transitionen lt Transition type name uuid HH HEHE HEHE HEHE gt lt Trigger gt lt Trigger gt lt Guard gt lt Guard gt lt Action gt lt Action gt lt Transition gt Beispiel Folgend wird ein Beispiel der logischen Informationen einer kleinen Zustandsmaschine gezeigt lt xml version 1 0 encoding UTF 8 gt lt ProjectData gt lt StateMachine type StateMachine name Clock uuid 61af3933 5b91 47c5 b302 b2351f80700d gt lt PseudoState type InitialState name START uuid 98057502 299c 44ff 8fa0 5af5b6021f00 gt lt State type State name INIT uuid 82ecfb72 b44c 487f 81b7 e615b6ef7585 gt lt ActionOnEntry gt seconds 0 minutes 0 hours 0 lt ActionOnEntry gt lt ActionInState gt lt ActionInState gt lt ActionOnExit gt lt ActionOnExit gt Ge eege eege oe eege eeeeeeee eege eeeeeeeeee eee eee ee eee BB 8 89 eege eege ese eege eeeeeeeeee eege eege ee ees ANHANG lt Regions gt
123. writer DataModel model writer lt lt model gt rootItem return writer Zudem wurde in der Basisklasse der Elemente die virtuelle Methode writeToXmlStream erstellt welche von jedem Elemente neu implementiert wird In der Implementierung dieser Methode wird jeweils ein Tag f r das Element erstellt und die Informationen geschrieben eeeeeceeeee nn pp ann Ben Ban 2 pn pn pe FFRES BB BE BB BE BB BB BE BB BE BB BE RB BB BD ese eeeeeeee se BE BB BR BB BB BB BE BB BB 6 3 4 2 DIE ENTWICKLUNG DES DATENMODELLS ke In der Implementierung des lt lt Operators der Basisklasse der Elemente wird nun writeToXmlStream aufgerufen und es wird die dem Element entsprechende Methode verwendet QXm1Streamwriter amp operator lt lt QXmlStreamWriter amp writer Dataltem item p return item gt writeToXmlStream writer Um schliesslich das gesamte Datenmodell in ein IODevice zu schreiben sind folgende Anweisungen n tig DataModel dataModel DataModel instance QXmlStreamWriter writer amp ioDevice writer lt lt dataModel Die Implementierung der writeToXmlStream Funktion ist jeweils in der Element Klasse zufinden Die Klassen befinden sich elektronisch unter e Software SourceCode src DataModel e Software SourceCode include DataModel Im Anhang 12 1 1 wird der Inhalt es IODevices erl utert Laden Zum Laden des Datenmodells aus einem JODevice wurde ein DOM Parser DataDomParse
124. xport Logical Part Bemerkung Das Projekt muss gespeichert sein damit der Export m glich ist In Zwischenablage kopieren Durch Anklicken von Copy State Chart to Clipboard im Men Edit oder in der Toolbar wird die gesamte angezeigte Zustandsmaschine als Bild in die Zwischenablage kopiert gt ClockStateChart rsydes State Chart Editor File New N Select gi Add Region SE a Remove Region Proje l Copy State Chart to Clipboard a m ben Abbildung 27 Copy State Chart to Clipboard Men Edit BENUTZERHANDBUCH ke V Copy State Chart to Clipboard Abbildung 28 Copy State Chart to Clipboard in der Toolbar 11 Drucken Die aktuell angezeigte Zustandsmaschine kann ausgedruckt werden Dazu wahlt man im Ment File die entsprechende Aktion Print Bemerkung Im Druck Dialog vorgenommene Anderungen haben keinen Einfluss auf den Druckvorgang Es wird jeweils die gesamte angezeigte Zustandsmaschine ausgedruckt 12 Beispiele Im Verzeichnis des State Chart Editor existiert ein Odner Examples der zwei Beispiel zustandsmaschinen beinhaltet Die Beispiele k nnen mit dem Editor ge ffnet werden

Download Pdf Manuals

image

Related Search

Related Contents

(取扱説明書より抜粋)pdf  1 - CCE Cheminots  Samsung SAMSUNG WB210 Uporabniški priročnik  Manuel d`installation et de fonctionnement EK-EU  L300 User Manual  For the most current information, visit the Roadranger web    取扱説明書  Epson B-510DN  

Copyright © All rights reserved.
Failed to retrieve file