next up previous contents
Next: Uživatelské rozhraní Up: Hlavní koncepce implementace jednotlivých Previous: Hlavní koncepce implementace jednotlivých

Grafická část

Editor sítě je implementován jako potomek třídy QCanvasView knihovny Qt, která představuje rozhraní k zobrazení a manipulaci pracovní (vykreslovací) plochy editoru sítě (QCanvas). Tato pracovní plocha je součástí editoru, jsou na ni vykreslovány grafické elementy reprezentující syntaxi sítě GCCS. Výhodou tohoto řešení je možnost současného zobrazení jedné pracovní plochy pomocí několika různých rozhraní (oken) QCanvasView, k aplikaci tedy bude možné v budoucnu přidat nástroj pro přehlednou orientaci na pracovní ploše editorů rozsáhlých sítí GCCS (viz nástroj Sokolí oko známý z aplikací typu CAD).

Třída QCanvas poskytuje efektivní způsob vykreslování grafických elementů. Na pracovní ploše reprezentované třídou QCanvas lze zobrazovat jen klasické objekty C++, nikoliv objekty tříd Qt, jež využívají rozšíření jazyka C++ uvedených v předchozí sekci. Rozšiřující mechanismy Qt totiž nejsou vhodné pro implementaci grafických objektů s vysokými nároky na rychlost zobrazování (časové a paměťové režie objektového modelu Qt jsou nezanedbatelné). To však znamená poněkud složitější implementaci grafických objektů. Odpadá např. možnost dynamicky zjistit typ objektu nacházejícího se na pozici ukazatele myši, či možnost komunikace grafických objektů s prvky uživatelského rozhraní prostřednictvím signálů a slotů.

Výše uvedený problém identifikace typu objektu řeší třída grafických objektů QCanvasItem, a to staticky zavedením celočíselného jednoznačného indexu, jako datového prvku třídy. Knihovna Qt poskytuje několik tříd odvozených od QCanvasItem, které implementují základní geometrické útvary. Odvozením a agregací těchto tříd implemetujeme jednotlivé grafické elementy reprezentující rozhraní, porty, sběrnice, spoje, jejich řídící body a segmenty. Společné vlastnosti a funkce těchto objektů zahrnuje třída GElement, v níž definujeme textový popis elementu a příslušné operace (editace a zarovnání v rámci geometrie objektu).

Metody těchto objektů definují příslušné editační operace (změna velikosti rozhraní, posun, změna grafické reprezentace při zahrnutí do výběru). Navíc jsou zde zahrnuty také metody pro tvorbu hierarchické struktury sítí GCCS, transformaci do CCS a kontrolu konzistence grafické syntaxe, o nichž se zmíníme dále v popisu implementace funkční části.

Pro implementaci vztahů vzájemné agregace grafických objektů (obrázek gif, strana gif) jsme použili šablony obousměrného seznamu QList. Rozhraní (GBox) obsahuje seznam portů, port (GPort) obsahuje ukazatel na spoj, sběrnice (GBus) obsahuje seznam spojů, spoj (GArc) obsahuje seznam řídících bodů, seznam segmentů a ukazatele na počáteční a koncový element, řídící bod (GControlPoint) obsahuje ukazatel na spoj a segmenty, jež propojuje, a analogicky segment (GArcSegment) obsahuje ukazatele na spoj, jehož je součástí a příslušné řídící body (pokud existují).

Třída vlastního editoru sítě (GEditor) obsahuje seznamy všech rozhraní a sběrnic sítě, seznam všech volných portů (využití viz funkční část), seznam vybraných grafických elementů a metody pro manipulaci s tímto výběrem, dále metody pro import a export sítě do souboru interního formátu. Některé další metody uvedeme při popisu funkční části.   Hierarchická struktura editovaného systému je implementována propojením editoru sítě s rozhraními téhož jména v ostatních sítích, či v sobě sama. Každý editor sítě obsahuje seznam všech editorů sítí, k nimž je připojen jako podsystém některého z jejich rozhraní (seznam otců). Každé rozhraní obsahuje ukazatel na editor podsítě a textový řetězec popisující podsystém v CCS. Při transformaci do CCS potom použit tento řetězec, pokud je ukazatel na editor podsítě nulový. Uvedená struktura implementuje graf hierarchie systému GCCS definovaný v kapitole gif. Příklad této struktury propojených objektů znázorňuje obrázek gif.

  
Figure: Příklad hierarchické struktury editorů sítě


next up previous contents
Next: Uživatelské rozhraní Up: Hlavní koncepce implementace jednotlivých Previous: Hlavní koncepce implementace jednotlivých

David Safranek
Fri Apr 6 23:53:25 MET DST 2001