Sfairadora

  • Referenční příručka

Model zobrazení R-D/C

Pro zobrazování dat je ve Sfairadoře navržen rekurzívní data-control model (R-D/C model). Pomocí něj lze vytvářet vlastní zobrazení v sekci dokumentu Zobrazení, stejně jako modifikovat automaticky vytvořená zobrazení v sekcích Data či Pohledy. O širokých možnostech modelu R-D/C svědčí to, že veškeré uživatelské rozhraní Sfairadory bylo vytvořeno pomocí tohoto modelu v podobě, ve které je dostupný i uživatelům.

Pojem dispelu

Základním pojmem modelu R-D/C je ovládací prvek, neboli dispel (zkratka z display element). Dispely mohou být buď jednoduché – jako editory či tlačítka, nebo složené, obsahující jiné dispely, jako například tabulka. Složené dispely jednak rozvrhují podřízené dispely na obrazovce – jako skupina, která je řadí vedle sebe či pod sebe, jednak umožňují dynamicky organizovat zobrazení, jako přepínač zobrazení.

Velikosti a umístění

Konkrétní zobrazení tak sestává z hierarchicky či stromově uspořádaných dispelů. Na základě tohoto stromového uspořádání se určuje optimální umístění dispelů na obrazovce a jejich velikost. Velikost jednotlivých dispelů se může dynamicky proměňovat, podle toho, jak se mění data, která editují. Změna velikosti může být rovněž způsobena změnou stylů zobrazení, které určují, jak mají být vykreslovány texty obsažené v zobrazeních. Kromě tohoto základního mechanismu určování velikostí, lze určit, že některé dispely mají být zarovnány na určitou pozici či velikost.

Vztah zobrazení a dat

Data, která editují jednotlivé dispely (editory), nejsou obsažena uvnitř dispelů, ale jsou uložena v datových strukturách vně samotného zobrazení. To odpovídá obecnému členění Sfairadory na úrovně dat, pohledu a zobrazení. (Z hlediska návrhu zobrazení není rozdíl mezi daty a pohledem – obojí má povahu dat). Toto uspořádání bývá někdy označováno jako data-control model (nebo data-view, výrazem view se však rozumí zobrazení, nikoli pohled ve smyslu užitém ve Sfairadoře).
Pro každý editor je tak třeba zadat název objektu, ve kterém jsou data uložena a referenci na data v rámci objektu. Pokud je například v sekci dokumentu Data datová položka tabulka, uvede se jako název dat document a reference dat data.tabulka. Podrobnosti o datovém modelu dokumentu lze nalézt v kapitole Datový typ dokumentu.
Situaci lze nahlížet tak, že pro zobrazení jsou poskytována jistá data, a různé dispely tato data přijímají. Sfairadora toto uspořádání rozšiřuje do rekurzívního modelu tak, že dispely jsou nejen příjemci dat, ale zároveň i jejich poskytovateli. Datový objekt, který poskytuje určitý dispel je pak dostupný pro všechny podřízené dispely v hierarchii definice zobrazení. Hlavní okno dokumentu poskytuje datové objekty document (odkazující na celý dokument, jemuž zobrazení náleží – jeho typ je popsán v kapitole Datový typ dokumentu) a system (systémový dokument, jeho typ je popsán v kapitole Datový typ systémového dokumentu). Podřízené dispely se potom mohou odkazovat na data v těchto objektech. Některé dispely mohou rovněž poskytovat další data. Příkladem je tabulka, která pro dispel v každé buňce poskytuje datový objekt s názvem cell_data (název lze změnit v definici tabulky), který reprezentuje data příslušné buňky (je tedy specifický pro každou buňku). V tomto ohledu je význačný dispel poskytovatel dat, který umožňuje vytvořit lokální proměnné zachycující stav zobrazení. Mnohdy může být rovněž užitečné, že lokální proměnné mohou být i počítané položky, jejichž hodnota se automaticky aktualizuje podle stavu jiných dat.
Sfairadora automaticky zajišťuje aktualizaci obsahu editoru při změně předmětných dat. Pokud tedy existují pro jednu datovou položku dva editory, změny provedené v jednom editoru se okamžitě projeví i v druhém editoru. Okamžik, kdy se změna projeví, závisí na tom, kdy editor skutečně zapíše data do datového objektu. Například řádkový editor umožňuje zvolit, zda se mají data zapisovat průběžně po každém napsaném znaku nebo až po ukončení editace.

Obecnost modelu R-D/C, zobrazení jako program

Možnost užití lokálních proměnných je v zobrazení stejně významná jako v programech. V obecnosti lze zobrazení definované pomocí modelu R-D/C chápat jako analogii programu s tím, že běh programu je rozložen v čase, zatímco realizace zobrazení je rozložen v prostoru na obrazovce. Tato idea zobrazení jakožto programu zaručuje, že modelem R-D/C lze navrhnout jakékoli myslitelné zobrazení bez omezení. Korespondence základních konstrukcí programovacích jazyků a prvků modelu R-D/C je následující:
● lokální definice (proměnné, funkce…)
● ukazatel na funkci, virtuální funkce
● numerické výpočty
počítané lokální proměnné v poskytovateli dat

Příkazy

Kromě dat poskytují dispely rovněž příkazy. Příkaz dispelu je potom, stejně jako data, dostupný všem podřízeným dispelům. Například okno dokumentu poskytuje příkaz pro uložení dokumentu a podobně. Příkaz je možné vykonat buď pomocí dispelu tlačítko, nebo z libovolného dispelu pomocí funkce execute_command jazyka Enki. Všechny dostupné příkazy jsou popsány v kapitole Seznam všech příkazů.

Stavová data, nástroje, dispely druhé úrovně

Uspořádání, kdy ovládací prvky data nejen přijímají, ale i poskytují, umožňuje elegantně vyřešit funkci nástrojů. Nástrojem se rozumí ovládací prvky, jejichž funkce se nevztahuje přímo na data, ale na právě aktivní ovládací prvek. Nástroje jsou tak jakýmisi ovládacími prvky druhé úrovně. K typickým nástrojům se tak řadí ovládací prvky nabídky, nástrojové lišty a zvláštních nástrojových oken (jako například formát znaků).
Základním problémem návrhu nástrojů je způsob jejich interakce s právě aktivním dispelem. K tomu byl ve Sfairadoře navržen mechanismus externalizace dat. Externalizací dat se rozumí posbírání všech dat, které jsou k dispozici právě aktivnímu dispelu a jejich poskytnutí všem nástrojům (tj. dispelům druhé úrovně – nabídkám, prvkům nástrojové lišty a nástrojovým oknům), jako by tyto nástroje byly podřízené právě aktivnímu dispelu (ačkoli nejsou). Kromě dat jsou takto externalizovány přirozeně i příkazy.
Většina editorů vytváří a poskytuje za účelem interakce s nástroji stavový datový objekt. V tomto objektu je průběžně zaznamenávám stav editoru – například pozice kurzoru, aktuálně použitý formát znaků a pod. Tento objekt je rovněž externalizován nástrojům. Nástroje tak jednak mohou zobrazovat stav editoru, jednak změnou dat stavového objektu mohou práci editoru ovlivnit. Názvy a typy stavových objektů jsou popsány v kapitole Stavové objekty.

Definiční objekt dispelu, vlastnosti zadávané výrazem

Každý dispel je zadán svým definičním objektem. Definiční objekt je datový objekt jako každý jiný datový objekt ve Sfairadoře a lze s ním tak nakládat. Definovat zobrazení tedy znamená vytvořit příslušný definiční objekt a nastavit v něm požadované vlastnosti. K vytváření a úpravám definičních objektů dispelů slouží editor definice ovládacích prvků, jehož případy pro jednotlivé třídy dispelů jsou popsány dále v příslušných kapitolách.
Definiční objekt dispelu není totožný se samotným dispelem, dispel je podle něj pouze vytvářen. Je možné, aby existoval definiční objekt a neexistoval k němu žádný dispel, nebo může k jednomu definičnímu objektu existovat více dispelů (jako v případě editoru sekvence, kde existuje jen jeden definiční objekt pro dispel položky, vlastních dispelů je však tolik, kolik je prvků sekvence.)
Každé třídě (druhu) dispelu náleží jeden typ definičního objektu. V tomto typu jsou datové položky, které zachycují všechny vlastnosti dispelu příslušné třídy. Každou vlastnost lze určit buď přímo zvolenou hodnotou anebo pomocí funkce v jazyce Enki. V editorech definičních objektů k tomu slouží tlačítko s ikonou fn ( ) před každou hodnotou. Pokud je vlastnost zadána funkcí, která závisí na nějakých datech, je znovu vyhodnocena při každé změna dat, takže hodnota vlastnosti je neustála udržována aktuální vzhledem k datům.

Vzhled dispelu

Kritériem rozčlenění dispelů do tříd je jejich funkce, nikoli jejich vzhled. Například zaškrtávací tlačítko může mít nastavenu podobu tlačítka, přesto však jde o zaškrtávací tlačítko, protože je určeno k nastavování hodnoty do dat, nikoli tlačítko, které je určeno k provedení nějaké akce při stisknutí.
S tím souvisí i skutečnost, že některé vlastnosti podoby dispelu nemusejí být zadány – a typicky by ani zadány být neměly – a budou určeny automaticky podle umístění dispelu. Na základě tradiční podoby ovládacích prvků se rozlišují následující umístění:
●
v okně
●
v poli (např. v tabulce, obecně kdekoli v okně, ke je bílé pozadí a nikoli šedé)
●
v nástrojové liště
●
v okně nabídky
●
ve stavovém řádku
Například tlačítko, je-li umístěno v okně, má běžný trojrozměrný vzhled, je-li umístěno v nástrojové liště, je ploché, ale zdvihne se při najetí myší, je-li umístěno v nabídce, má podobu položky nabídky a po najetí myší změní barvu pozadí.

Chyby v dispelu

Vzhledem k tomu, že vlastnosti dispelu mohou být určeny funkcemi, může při jejich vyhodnocování dojít k běhovým chybám. K usnadnění diagnostiky jsou údaje o chybách shromažďovány u dispelů, kde vznikly. Pokud na nějakém dispelu vznikla chyba, je to indikováno malým červeným čtverečkem v levém horním rohu dispelu . V kontextové nabídce dispelu je potom položka Chyby, pod kterou je seznam popisů všech chyb. Protože jedna chyba může vést k další chybě na vyšší úrovni, jsou chyby zřetězeny podle vztahu příčinnosti. V nabídce je potom uvedena na nejvyšší pozici poslední chyba, pod ní řetězec příčin až k prvopočátku chyby. Pokud je s chybou svázáno nějaké konkrétní místo v dokumentu (např. pozice ve zdrojovém textu funkce nebo datová položka), lze klepnutím myší na vybranou chybu zobrazit jí náležející místo v dokumentu.