Vzhled aplikace

Grafické uživatelské rozhraní (Graphical User Interface — GUI) způsobilo nejen revoluci ve způsobu práce s počítačem, ale i zásadní změny ve tvorbě aplikací grafické rozhraní využívající. Na rozdíl od programů pracujících v textovém módu s příkazovým řádkem, kdy se uživatel musí dopředu seznámit s příkazy a možnostmi aplikace, grafické uživatelské rozhraní nabízí své funkce uživateli v podobě menu, tlačítek a jiných grafických prvků.

Tomu se musí přizpůsobit i konstrukce aplikace. Program nemůže prostě analyzovat data zadaná uživatelem, provést akci a skončit nebo čekat na další povel. Množství akcí uživatele je totiž obrovské a nelze je podchytit v jediném algoritmu. Řešení se ukázalo v podobě tzv. událostmi řízených programů. V aplikaci neběží žádný "hlavní program", namísto toho existuje množství malých podprogramů reagujících na specifické události, např. na stisk klávesy nebo pohyb myši. Tyto podprogramy jsou vždy spojeny s jednotlivými grafickými objekty zobrazenými na obrazovce — jinak reaguje na stisk klávesy povelové tlačítko a jinak reaguje editační řádek. Vizuální struktura aplikace je tedy důsledně svázána s její funkčností nebo alespoň s funkčností jejího uživatelského rozhraní.

Jednotlivé grafické prvky tvořící vizuální podobu aplikace mají zpravidla obdélníkový obrys. Vzhledem ke komplexnosti dnešních aplikací není možné prostě uspořádat elementy uživatelského rozhraní na obrazovku. Taková aplikace by byla jen těžko použitelná. Proto už od počátků vývoje GUI byly jednotlivé prvky umísťovány hierarchicky, do víceúrovňové stromové struktury.

Kořenem stromu je vždy plocha obrazovky (desktop). Protože moderní operační systémy dokáží spouštět více aplikací najednou, bývá uživatelské rozhraní každé aplikace soustředěno do tzv. oken (windows).

Okno aplikace Control Web a
Palety přístrojů

Okno aplikace Control Web a Palety přístrojů

Každý uživatel operačního systému využívajícího GUI je s pojmem "okno" dobře seznámen. Dokáže okno přesouvat myší, měnit jeho velikost (pokud to aplikace dovolí), zvětšit okno na celou obrazovku nebo je naopak minimalizovat. Prohlédnete-li si okno vývojového prostředí systému Control Web, naleznete na jeho ploše řadu dalších obdélníkových prvků tvořících uživatelské rozhraní — lištu menu a nástrojů, stavový řádek, strom zobrazující strukturu aplikace či plochu grafického editoru apod. Každý tento prvek přitom reaguje na uživatelské akce jinak, specificky podle svého účelu. Z pohledu operačního systému se jedná o další okna, tentokráte ale neumístěná na ploše obrazovky, ale v ploše jiného okna. Z uživatelského hlediska je situace jiná — podokna nemají titulek ani je nelze maximalizovat nebo minimalizovat.

Jestliže uživatel provede nějakou akci nad patřičným oknem (např klikne na tlačítko myši), operační systém nezkoumá, jak by mělo konkrétní okno reagovat. Prostě tuto událost (kliknutí myši) zašle danému oknu (vyvolá proceduru s ním spojenou), ať procedura okna událost zpracuje.

Málokterá aplikace je omezena na jediné okno. Např. okno "Paleta přístrojů" je taktéž součástí aplikace Control Web, přesto je ale zcela samostatné.

Aplikace systému Control Web mají grafické uživatelské rozhraní

Je dobré mít na paměti, že nejen samotné vývojové prostředí systému Control Web, ale i aplikace v něm vytvořené používají GUI. Návrh GUI aplikací je ale na vás.

Na rozdíl od naprosté většiny průmyslových vizualizačních systémů vás Control Web nenutí dodržet jistou předepsanou formu aplikace. Především aplikace nemusí být jen na ploše předem připraveného okna s vámi neovlivnitelným titulkem (zpravidla obsahujícím jméno systému), menu a lišty s nástroji. V návrhu aplikace máte naprostou svobodu a můžete ji přizpůsobit požadavkům vašich zákazníků.

Elementárním stavebním kamenem aplikace systému Control Web je virtuální přístroj. Virtuální přístroje tvoří nejen funkční kostru celé aplikace (viz také Shrnutí 1.`dílu), ale i jednotlivé elementy grafického uživatelského rozhraní aplikace. Ne každý virtuální přístroj ale musí být viditelný a některé přístroje ani viditelné být nemohou.

Dekorace okna

Historickým vývojem GUI se zhruba ustálil vzhled oken aplikací a dnes se mění jen zvolna, neboť znalosti uživatelů, jak manipulovat s okny, jsou cenné a není možné v nových verzích systémů provádět příliš radikální změny.

Jednotlivé součásti rámečku okna jsou navrženy pro snadnou manipulaci s aplikacemi. Pokud taková manipulace není žádoucí (což může být případ průmyslové vizualizační a řídicí aplikace), je možné v rámci systému Control Web vytvářet virtuální přístroje zcela bez rámečku. Virtuálním přístrojem bez rámečku pak lze manipulovat pouze algoritmy aplikace, nikoliv uživatelskými zásahy (myší nebo klávesnicí).

Přístroj v okně a bez okna

Přístroj v okně a bez okna

Jestli bude přístroj v okně nebo ne rozhoduje klíčové slovo window před vlastním jménem třídy přístroje:

meter m1; (* tento přístroj nebude orámován dekorací okna *)
  owner = background;
  ...
end_meter;

window meter m2; (* přístroj bude mít titulek a rámeček okna *)
  owner = background;
  ...
end_meter;

V titulku okna je implicitně přiřazeno jméno přístroje. Protože toto jméno mnohdy nebývá příliš ilustrativní, každý přístroj má možnost definovat text, který se zobrazí v titulku okna namísto jména přístroje pomocí parametru win_title.

window meter m1;
  ...
  win_title = "Tlak v potrubí";
  ...
end_meter;

Omezení manipulace s oknem

S oknem může uživatel manipulovat rozličnými způsoby. Pokud by taková manipulace byla v dané aplikaci nežádoucí, pomocí parametru win_disable lze jednotlivé akce omezit. Pokud parametr win_disable není uveden, jsou všechny akce s oknem povoleny. Uvedením předdefinovaných identifikátorů lze jednotlivé akce zakázat

window meter m1;
  ...
  win_disable = zoom, minimize, maxinize;
  ...
end_meter;

Přípustné identifikátory jsou následující:

Procedura OnWindowClose()

Běžná okna lze ukončit kliknutím na tlačítko s křížkem v pravém horním rohu rámečku okna. Pokud se jedná o hlavní okno, celá aplikace je zpravidla ukončena. Pokud se jedná o pomocné okno (např. "Paleta přístrojů" systému Control Web), vždy aplikace nabízí způsob, jak je znovu otevřít.

V případě oken aplikace systému Control Web tomu tak ale standardně není. Navrhnete-li aplikaci rozmístěnou do více oken, sama aplikace neobsahuje způsob, jak případné zavřené okno opět otevřít. Navíc operace zavření i z hlediska programu vskutku odpovídá zrušení okna a odstranění všech jeho součástí z paměti. V případě aplikace Control Web by to ale mohlo znamenat fatální zásah do aplikace a systém by vůbec nepracoval.

Z výše zmíněných důvodů okna aplikace systému Control Web vůbec nelze zavírat. Lze je minimalizovat nebo i skrývat, vždy ale zůstávají součástí aplikace. Tlačítko s křížkem na pravé straně titulku je stále zneplatněné, nelze na něj kliknout.

Ačkoliv dobře zdůvodněno, přesto je toto chování poněkud v rozporu s uživatelskou zkušeností. Proto existuje v systému způsob, jak povolit zavírací tlačítko okna. Stačí deklarovat událostní proceduru OnWindowClose(). Pokud je tato procedura v přístroji deklarována, na zavírací tlačítko okna lze kliknou, kliknutí však okno nezavře, ale způsobí zavolání této procedury. Pak je na vás, autorovi aplikace, jak se zachováte — je možno okno na místo zavření minimalizovat nebo skrýt. Vždy je ale potřeba pamatovat, že pokud uživateli povolíte akci vedoucí ke zmizení okna, je nutno umožnit mu okno opět zviditelnit.

Panely, uzly vizuálního stromu

V úvodu kapitoly byla zmínka, že jednotlivá okna lze uspořádávat hierarchicky, že tedy lze okno umístit přímo na pozadí (desktop) nebo do jiného okna. Do plochy virtuálních přístrojů systému Control Web ale již žádný jiný přístroj nelze umístit. Ve vizuálním stromu reprezentujícím uspořádání prvků GUI jsou virtuální přístroje listy, konečné prvky.

Výjimkou z tohoto pravidla je systémový virtuální přístroj panel, navržený speciálně jako kontejner pro jiné virtuální přístroje. Přístroj panel tak slouží jako uzel vizuálního stromu aplikace. Samotný panel může být umístěn na pozadí (desktop) nebo na jiném panelu.

Vlastník virtuálního přístroje

O tom, kam bude virtuální přístroj (panely nevyjímaje) umístěn (zaregistrován), rozhoduje parametr owner. Hodnotou tohoto parametru je vždy jméno panelu, na jehož plochu má být přístroj zaregistrován.

Vyhrazené klíčové slovo background použité na místo jména existujícího panelu způsobí umístění přístroje přímo na pozadí obrazovky (desktop).

Při tvorbě aplikace v grafickém režimu se nemusíte jmény panelů příliš zaobírat. Přístroje rozmístíte myší a systém ustaví vazby sám.

Pozice virtuálního přístroje

Každý viditelný virtuální přístroj je součástí grafické podoby aplikace a zabírá určitou obdélníkovou plochu. Při práci v grafickém editoru tuto plochu určujete manipulací s přístrojem myší. V textové podobě je plocha definována parametrem position. Tento parametr obsahuje souřadnice levého horního rohu přístroje a u přístrojů s definovatelnými rozměry také jeho šířku a výšku.

meter m1;
  owner = panel1;
  position = 10, 10, 120, 30;
  ...
end_meter;

Jednotkou souřadnic jsou vždy obrazovkové body. Souřadnice jsou vždy vztaženy k vlastníkovi přístroje. Změní-li tedy souřadnice vlastník, přesunou se s ním i všechny v něm vložené virtuální přístroje, aniž by se měnila jejich pozice vůči vlastníkovi.

Oba přístroje meter mají stejné
souřadnice, liší se svým vlastníkem

Oba přístroje meter mají stejné souřadnice, liší se svým vlastníkem

Souřadný systém má vždy počátek (souřadnice 0, 0) v levém horním rohu. Osa X (vodorovná) roste směrem doprava, Osa Y (svislá) roste směrem dolů.

Viditelnost virtuálních přístrojů

Pojem "vlastnictví" virtuálního přístroje s sebou přináší nejen relativitu souřadnic. Vlastník virtuálního přístroje ovlivňuje taktéž jeho viditelnost. Ačkoliv nic nebrání tomu, aby souřadnice virtuálního přístroje byly záporné nebo větší než je rozměr panelu, jakákoliv část přístroje přesahující rozměry jeho vlastníka nebude viditelná.

Virtuální přístroj nemůže
přesahovat vlastníka

Virtuální přístroj nemůže přesahovat vlastníka

Z-souřadnice

Mezi virtuálními přístroji na stejné úrovni (se stejným vlastníkem) existuje ještě jeden vztah — pořadí v jakém jsou ve svém vlastníkovi umístěny, nazývané Z-souřadnice (Z-order). Pokud jsou virtuální přístroje vedle sebe (jejich obdélníky se nepřekrývají), není toto pořadí příliš důležité. Pokud se ale překrývají, je pořadí rozhodující pro vykreslování.

Panel se dvěma překrývajícími
se přístroji

Panel se dvěma překrývajícími se přístroji

Obecně platí, že přístroj, který je výše, překrývá přístroje, které jsou níže. Z-souřadnice virtuálních přístrojů lze v grafickém editoru měnit z menu i pomocí kláves <PageUp> a <PageDown>.

Z-souřadnice je zejména důležitá u průhledných přístrojů, tedy přístrojů ne zcela překreslujících svou plochu a spoléhajících na to, že jejich podklad je správně překreslen. O takových přístrojích bude podrobnější zmínka dále v této kapitole.

Pozadí panelu, DataView

Nedílnou součástí vizualizačních aplikací bývají technologická schémata, tvořící podklad pro umístění zobrazovacích i ovládacích prvků nebo jen ilustrujících skutečné uspořádání technologie. Protože panely pracují v systému Control Web jako obecné kontejnery, na jejichž ploše virtuální přístroje pracují, jsou vybaveny taktéž schopností zobrazovat na své ploše rozmanité datové soubory — bitmapové obrázky, vektorové kresby nebo HTML dokumenty.

Pro programové komponenty schopné pracovat s nějakým typem datového souboru a zobrazovat jeho obsah je v systému Control Web použito označení DataView. DataView má schopnost zavést patřičný soubor a zobrazit jeho obsah na své ploše, případně tento soubor i editovat.

Každé DataView je určeno svým typem, odvozeným od datového typu, se kterým pracuje. Typ DataView je identifikován čtyřpísmenovým řetězcem začínajícím tečkou. Tak např. '.TXT' je identifikátor DataView schopného pracovat ASCII textovými soubory, '.IMG' označuje DataView pracující bitmapovými obrázky, '.HTM' je DataView zobrazující HTML dokumenty apod.

I když označení DataView připomíná označení přípony souborů a původně z označení přípony základního souboru i vycházelo, ve skutečnosti nemá toto označení se soubory, s nimiž DataView pracuje, mnoho společného. Například DataView '.IMG' pracuje mimo souborů IMG i s bitmapovými soubory PCX, GIF, TIFF, JPEG, BMP, PNG, XBM a dalšími.

Virtuální přístroj panel má schopnost vytvořit na své ploše libovolnou v systému dostupnou DataView komponentu. Tím je zaručena maximální flexibilita, systém není omezen na konkrétní skupinu podporovaných souborů ale může být libovolně rozšiřován. DataView momentálně přítomná v systému nabízí např. Inspektor přístroje panel.

Inspektor nabízí přítomná DataView

Inspektor nabízí přítomná DataView

Přiřazení jednotlivých DataView jednotlivým typům souborů je zcela dynamické. Každé DataView poskytne systému informaci, se kterými soubory umí pracovat. Tedy pokud je zapotřebí otevřít soubor '.tiff', systém ví, že má použít DataView '.IMG'. Existují dva způsoby, jako přístroji panel předepsat, že má na své ploše vytvořit DataView a zobrazit v něm patřičný soubor.

Mnohé manipulace s DataView jsou společné, např. nastavení zobrazovaného výřezu pomocí rolovacích lišt. Proto není toto rolování součástí každého DataView, ale realizuje je komponenta společná pro všechna DataView, tzv. DataView kontejner. Kontejner vyčte z DataView informace, jestli potřebuje zobrazit rolovací lišty a jaké další pomocné prvky jsou zapotřebí (např. označení řádků a sloupců u tabulkového kalkulátoru) a sám zajišťuje jejich vykreslování a obsluhu.

Funkci kontejneru nejlépe ilustruje např. aplikace "Editor", dodávaná spolu se systémem Control Web. Editor je vlasně pouze prázdné okno, na jehož ploše je kontejner s DataView typu '.TXT'. Celá funkčnost včetně zobrazení menu a nástrojů, rolování, otevírání a zavírání souborů apod. je zajišťována výhradně DataView a univerzálním kontejnerem.

Některá DataView dokáží rozpoznat, jestli jsou umístěna v kontejneru nebo ne a podle toho přizpůsobit své chování. Například '.IMG' DataView se přizpůsobí velikosti, kterou na obrazovce zabírá a zvětší nebo zmenší bitovou mapu, aby tuto plochu vyplňovala. Pokud je ale v kontejneru, zobrazuje bitovou mapu vždy 1:1 a případně nechá kontejner zobrazit rolovací lišty.

Obrázek bez kontejneru a v kontejneru

Obrázek bez kontejneru a v kontejneru

V rámci přístroje panel existuje mimo parametrů dv_id a dv_file ještě řada parametrů ovlivňující chování vložených DataView. Podrobně jsou tyto parametry vysvětleny v referenční části popisující přístroj panel, zde je uveden jen přehled.

Následující parametry se uplatní, jen pokud je použit kontejner.

S obsahem DataView i s DataView samotnými lze za běhu rozličnými způsoby manipulovat. Tato manipulace ale vyžaduje znalost práce s procedurami. Nativní procedury přístroje panel pro práci s DataView jsou podrobně vysvětleny v referenční části popisující přístroj panel.

Manipulace s panelem

S panelem lze za běhu manipulovat různými způsoby. V principu existují dva způsoby manipulace. Tyto dva způsoby vlastně reprezentují dva základní principy konstrukce aplikace v systému Control Web a proto si zaslouží bližší vysvětlení.

Průhledné přístroje

Zvláštní pozornost zaslouží průhledné přístroje, např. přístroj label zobrazující pouze text, bez vykreslení pozadí. Na pozadí musí být vidět obsah prvku pod průhledným přístrojem. V programovacích pravidlech grafických uživatelských rozhraní je jasně definováno, že každý prvek odpovídá za překreslování svého obdélníku. Jestliže tomu tak není, musí být nějakým způsobem zajištěno, aby se vždy napřed vykreslil podklad a teprve poté se musí vykreslit průhledný prvek.

Naneštěstí je systém Control Web v tomto odkázán na operační systém Windows, pod kterým pracuje. Ve Windows sice existuje atribut okna TRANSPARENT (průhledný), překreslování ale přesto nepracuje za všech okolností správně. Problém je, že pokud vznikne požadavek na překreslení části obrazovky, jednotlivým oknům (prvkům grafického rozhraní) jsou posílány zprávy s požadavkem na překreslení. Má-li se překreslit průhledný přístroj, musí být zaručeno, že zpráva s požadavkem na překreslení dorazí nejprve jeho podkladu a teprve poté do průhledného přístroje. Ve Windows tomu tak ale není. Nezbývá než služby Windows obejít.

Módy překreslování panelů

Mimo informace o každém prvku grafického uživatelského rozhraní, kterou si udržuje aplikace (v tomto případě Control Web), existuje ještě o každém prvku záznam v operačním systému, který je využíván např. při distribuci událostí apod. Čím více virtuálních přístrojů, tím více záznamů ve vlastním operačním systému. Při výskytu každé události musí Windows prohledat více paměti a odezva systému se zpomaluje. Ve Windows9X je navíc celkový počet těchto záznamů omezen na asi 32`000.

Windowless panely

Máte-li v aplikaci panel se spoustou nepřekrývajích se přístrojů, můžete přepnout panel do módu, ve kterém nebude pro každý virtuální přístroj v něm zaregistrovaný vytvářet odpovídající okno systému Windows.

panel p1;
  ...
  mode = window_less;
  ...
end_panel;

Z hlediska Windows se takový panel jeví jen jako jedno okno bez vložených dalších podoken, i když jsou do něj vloženy další virtuální přístroje. Veškeré funkce dříve vykonávané operačním systémem, jako např. distribuce událostí, vyvolávání překreslování apod. přebírá Control Web sám.

I když do panelu ve window_less módu samozřejmě lze zaregistrovat i překrývající se přístroje, bude jejich překreslování problikávat, protože všechny objekty ve window_less módu jsou překreslovány postupně od nejspodnějšího po nejvrchnější.

Na druhé straně tato vlastnost je velmi vhodná pro zobrazování průhledných přístrojů. Překreslování je čistě v režii systému Control Web a správné pořadí kreslení je zajištěno.

Off-screen panely

Není-li s každým prvkem uživatelského rozhraní spojen záznam v operačním systému a probíhá-li překreslování celého podstromu z hlediska Windows jako kreslení jediného okna, je možné využít schopnosti grafického rozhraní Windows GDI kreslit nikoliv přímo na obrazovku, ale do neviditelné oblasti paměti (nazývané off-screen buffer). Teprve až je celá kresba dokončena, je tato oblast paměti jediným povelem přenesena na obrazovku.

Na první pohled se zdá, že přenesení celého obrazu musí být velmi pomalá operace. Dříve tomu skutečně tak bylo, proto se výrobci grafických čipů zaměřili právě na urychlení těchto operací — vznikly tzv. Windows akcelerátory, i když tyto grafické čipy samozřejmě urychlovaly nejen Windows, ale jakékoliv grafické rozhraní využívající jejich služeb. S akcelerátory do dopadlo podobně jako s mikroprocesory — dokud byl procesor na jediném čipu spíše výjimka než pravidlo, předpona mikro- se používala jako zdůraznění této vlastnosti. Dnes prakticky jiné procesory než jednočipové neexistují a předpona mikro- zmizela. Stejně tak neexistují jiné grafické čipy než akcelerované, tedy schopné zcela samostatně vykonávat velmi rychle velmi komplexní operace bez zátěže procesoru, i když pojem Windows akcelerátor prakticky zmizel. Přenesení off-screen bufferu na obrazovku je nepostřehnutelně rychlá operace.

Přesto je překreslení mimo obrazovku a následné přenesení hotového obrazu pomalejší než přímé kreslení. Má ale jednu obrovskou výhodu — uživatel nevidí proces tvorby obrazu, problikávání jednotlivých prvků při postupném kreslení. Veškeré zobrazování off_screen panelů je tedy naprosto plynulé bez jakýchkoliv rušivých efektů, což velmi podstatně ovlivňuje dobrý dojem uživatele. Panely v módu off_screen jsou vhodné pro zobrazování animovaných dějů, kdy se jednotlivé virtuální přístroje vzájemně přesouvají a překrývají.

V jistých situacích může být překreslování takového panelu i rychlejší, a to tehdy, pokud se obsah kresby panelu nezměnil a je pouze zapotřebí ho překreslit např. po odkrytí jeho části jiným oknem. V tomto případě se pouze přenese patřičná část off-screen bufferu na obrazovku. Mějte ale na paměti, že k zajištění této funkce je zapotřebí v operační paměti udržet grafickou podobu celého panelu. Například panel o rozměru 800×600 bodů v pravých barvách zabere více jak 1,8 MB prostoru.

Panel v módu off_screen je implicitně taktéž v režimu window-less, jinak by mechanizmus kreslení mimo obrazovku nepracoval.