- 1. Úvod
- 2. Struktura kódu
- 3. Nastavení kontejnerů
- 4. Rozvržení piškotů
- 5. Dodatečné styly
- 6. Definice piškotů
- 6.1. Klíčová slova
- 6.1.1. left
- 6.1.2. center
- 6.1.3. right
- 6.1.4. top
- 6.1.5. middle
- 6.1.6. bottom
- 6.1.7. bold
- 6.1.8. italic
- 6.1.9. underline
- 6.1.10. extra
- 6.1.11. data
- 6.1.12. draw
- 6.1.13. font
- 6.1.14. para
- 6.1.15. wrap
- 6.1.16. no-wrap
- 6.1.17. font-size
- 6.1.18. font-color
- 6.1.19. font-name
- 6.1.20. react
- 6.1.21. loose
- 6.1.22. all-over
- 6.1.23. hidden
- 6.1.24. disabled
- 6.1.25. password
- 6.1.26. tri-state
- 6.1.27. select
- 6.1.28. focus
- 6.1.29. hint
- 6.1.30. rate
- 6.1.31. default
- 6.1.32. with
- 6.2. Datové typy
- 6.3. Aktéři
- 6.1. Klíčová slova
- 7. Panely
- 8. Určování stylu
- 9. Metriky GUI pro různé platformy
VID (Visual Interface Dialect) je jednoduchý dialekt (DSL) pro popis grafického uživatelského rozhranní nad systémem View.
VID umožňuje určení polohy každého grafického elementu a to třemi způsoby:
-
horizontální či vertikální uspořádání
-
umístění elementu do mřížky
-
absolutní zadání pozice
VID automaticky vytvoří kontejnerový piškot pro umístění zadaných piškotů. Implicitně je kontejnerový piškot typu window
.
Tip
|
|
Kód VIDu je vyhodnocen funkcí layout
(jež je interně volána funkcí view
). Kód je poté kompilován do stromu piškotů, vhodného pro přímé zobrazení.
Note
|
|
Typický blok kódu VID má následující strukturu:
[ <nastavení kontejneru> <popis rozvržení> ]
-
nastavení kontejneru: údaje, které ovlivňují objekt kontejneru (jímž může být panel nebo window).
-
popis rozvržení: poziční příkazy, definice stylů a popisy piškotů.
Note
|
Všechny sekce jsou nepovinné; blok VIDu nemá předepsaný obsah. |
Note
|
Klíčové slovo |
Syntaxe
title <text> <text> : text titulku (string!).
Popis
Určí titulek kontejnerového piškotu.
Syntaxe
size <value> <value> : šířka a výška v pixelech (pair!).
Popis
Nastavuje velikost kontejnerového piškotu. Není-li velikost explicitně zadána, je automaticky spočtena tak aby obsáhla vložené elementy.
Syntaxe
backdrop <color> <color> : název nebo hodnota barvy (word! tuple! issue!).
Popis
Nastavuje barvu pozadí kontejnerového piškotu.
Příklad:
view layout [ title "Frontální útok" size 300x60 backdrop 205.180.200 button "Nazdar" ]
V této oblasti kódu je také možné definovat aktéry kontejneru - viz sekci [Actors].
VID umisťuje piškoty do piškotu window podle jednoduchých pravidel:
-
směr řazení piškotů může být horizontální nebo vertikální
-
piškoty jsou v daném směru umisťovány jeden za druhým se zadaným odstupem
Implicitní hodnoty:
-
počátek (origin):
10x10
-
mezera (space):
10x10
-
směr (direction):
across
-
alignment:
top
Takto jsou piškoty rozmisťovány v režimu across
:
Takto jsou piškoty rozmisťovány v režimu below (s použitím implicitního přiřazení left
):
Syntaxe
across <alignment> <alignment> : (optional) possible values: top | middle | bottom.
Popis
Rozmisťování probíhá v horizontálním směru zleva doprava. Implicitní přiřazení piškotů v řadě (top
) lze změnit modifikátorem přiřazení.
Syntaxe
below <alignment> <alignment> : (optional) possible values: left | center | right.
Popis
Rozmisťování probíhá ve vertikálním směru shora dolů. Implicitní přiřazení piškotů ve sloupci (left
) lze změnit modifikátorem přiřazení.
Syntaxe
return <alignment> <alignment> : (optional) possible values: left | center | right | top | middle | bottom.
Popis
Přesouvá pozici na další řádek nebo sloupec piškotů v závislosti na aktuálním směru rozmisťování. Implicitní přiřazení piškotů v řadě či sloupci lze změnit modifikátorem přiřazení.
Syntaxe
space <offset> <offset> : nová hodnota mezery (pair!).
Popis
Udává hodnotu odstupu pro nově umisťované piškoty.
Syntaxe
origin <offset> <offset> : nová hodnota počátku (pair!).
Popis
Udává novou pozici počátku, relativně k rohu kontejnerového piškotu.
Syntaxe
at <offset> at <expr> <offset> : pozice dalšího piškotu (pair!). <expr> : výraz, vracející hodnotou typu pair! jako pozici
Popis
Umisťuje další piškot do absolutně zadané pozice. Tento poziční režim se vztahuje pouze k následujícímu piškotu a nemění zadaný způsob umístění pro piškoty další.
Syntaxe
pad <offset> <offset> : relativní odsazení (pair!).
Popis
Upravuje pozici piškotu o relativní odsazení (offset). Všechny následující piškoty v řadě či sloupci se příslušně posunou také.
Syntaxe
do <body> <body> : prováděný kód (block!).
Popis
Vyhodnotí blok regulérního kódu Redu pro následné "last-minute" inicializační použití. Blok těla je vázán na piškot kontejneru (okno nebo panel), takže je možný přímý přístup k pišotu kontejneru. Na kontejner samotný lze odkazovat klíčovým slovem self
.
View engine poskytuje mnoho vestavěných piškotů. Dialekt VID je rozšiřuje definováním dalších obecně používaných stylů s přiřazenými klíčovými slovy. Lze je použít se stejnými volbami jako jejich výchozí typ piškotu. Mohou byt také redefinovány použitím příkazu style
.
Piškot (face) lze vložit do aktuální pozice rozvržení (layout) jednoduše uvedením jména existujícího typu piškotu nebo dostupného stylu.
Syntaxe
<name>: <type> <options> <name> : název nového komponentu (set-word!). <type> : platný typ piškotu nebo název stylu (word!). <options> : seznam možností
Zadaný název odkazuje na objekt typu face!
, vytvořený dialektem VID z popisu piškotu.
Pro každý styl nebo typ piškotu jsou k dispozici implicitní hodnoty, pročež lze vytvořit nový piškot bez jakýchkoliv specifikací. Případně potřebné specifikace se dělí do těchto skupin:
-
Keywords - klíčová slova
-
Datatypes- datové typy
-
Actors - aktéři
Všechny parametry lze zadávat v libovolném pořadí za názvem piškotu nebo stylu. Nový název piškotu nebo klíčové slovo rozmístění (layoutu) označuje konec seznamu parametrů (options) pro daný piškot.
Note
|
Slovo window nemůže být použito jako typ piškotu.
|
Syntaxe
extra <expr> <expr> : jakákoli hodnota nebo výraz Redu (any-type!).
Popis
Nastaví aspekt piškotu extra
na novou hodnotu.
Syntaxe
data <list> data <expr> <list> : literálový seznam položek nebo výraz Redu (block!). <expr> : výraz, vracející seznam jako block!
Popis
Nastaví aspekt data
piškotu na seznam hodnot. Formát seznamu závisí na požadavcích typu piškotu.
Syntaxe
draw <commands> draw <expr> <commands> : literálový seznam příkazů nebo výraz Redu(block!). <expr> : výraz, vracející blok příkazů (block!).
Popis
Nastaví aspekt draw
piškotu na seznam příkazů dialektu Draw.
Viz link:draw.adoc [Draw dialect].
Syntaxe
font <spec> <spec> : zadání platného fontu (block! object! word!).
Popis
Nastaví aspekt font
piškotu na nový objekt font!
. Objekt font! je popsán zde.
Note
|
Je možné použít |
Syntaxe
para <spec> <spec> : určení platného objektu para (block! object! word!).
Popis
Nastaví aspekt para
novému objektu para!
. Objekt para! je popsán zde.
Note
|
Je možné použít |
Syntaxe
font-size <pt> <pt> : velikost fontu v bodech (integer! word!).
Popis
Nastaví velikost fontu pro zobrazovaný text piškotu.
Syntaxe
font-color <value> <value> : barva fontu (tuple! word! issue!).
Popis
Nastaví barvu aktuálního fontu pro text piškotu.
Syntaxe
font-name <name> <name> : platný název dostupného fontu (string! word!).
Popis
Nastaví název fontu v piškotu.
Toto klíčové slovo lze použít jako možnost piškotu i ve smyslu globálním. Lze použít libovolný počet instancí slova react
.
Syntaxe
react [<body>] react later [<body>] <body> : regulerní kód Redu (block!).
Popis
Vytvoří nový reaktor z těla bloku. Je-li react
použito jako možnost (option) piškotu, může tělo bloku odkazovat na aktuální piškot s použitím slova face
. Je-li slovo react
použito globálně, musí být cílové piškoty volatelné jménem.
Nepovinné klíčové slovo later
přeskočí první událost reakce bezprostředně po provedení těla
bloku.
Note
|
Reaktory jsou součástí reaktivního programování ve View, jehož dokumentace se připravuje. Stručně řečeno, tělo bloku může popisovat jeden či více vztahů mezi vlastnostmi piškotů a to s použitím cest. Nastavení vlastnosti piškotu je zpracováno jako cíl (target) reaktoru (aktualizovaný piškot), zatímco cesta, vedoucí k vlastnosti piškotu je zpracována jako zdroj (source) reaktoru (změna zdroje spustí aktualizaci kódu reaktoru). |
Syntaxe
all-over
Popis
Nastaví flag all-over
, který povoluje příjem všech "myších" událostí over
.
6.1.23. hidden
Syntaxe
hidden
Popis
Činí piškot neviditelným.
Syntaxe
disabled
Popis
Vypíná aktivitu piškotu (piškot nezpracovává žádnou událost).
Syntaxe
select <index> <index> : index vybrané položky (integer!).
Popis
Sets the selected
facet of the current face. Used mostly for lists to indicate which item is pre-selected.
Syntaxe
focus
Popis
Dodává zaměření (focus) aktuálnímu piškotu při prvním zobrazení okna. Zaměření lze udělit pouze jednomu piškotu. Je-li použito několik voleb focus
pro různé piškoty, dostane se zaměření jen tomu poslednímu.
Syntaxe
hint <message> <message> : text návodu (string!).
Popis
Poskytuje text návodu uvnitř polí piškotů, které dosud nemají žádný obsah. Tento text zmizí při zadání nového obsahu (akcí uživatele nebo nastavením parametru face/text
).
Syntaxe
rate <value> rate <value> now <value>: trvání nebo frekvence (integer! time!).
Popis
Nastaví časovač piškotu pro trvání (time!) nebo frekvenci (integer!). Při každém tiku časovače je generována událost time
piškotu. Je-li použita volba now
, je první časová událost generována okamžitě.
Syntaxe
default <value> <value>: impmlicitní hodnota aspektu `data` (any-type!).
Popis
Definuje implicitní hodnotu aspektu data
, když konverze aspektu text
vrací none
. Tato implicitní hodnota je uložena v aspektu options
jako pár key/value.
Note
|
aktuálně používáno pouze u piškotů |
Kromě klíčových slov je možné zadat nastavení piškotů s použitím literálních hodnot následujících typů:
Datatype | Purpose |
---|---|
integer! |
Určuje šířku piškotu. U panelů indikuje počet řad nebo sloupců v uspořádání (layout) v závislosti na aktuálním směru. |
pair! |
Určuje šířku a výšku piškotu. |
tuple! |
Určuje barvu pozadí piškotu (kde je použitelné). |
issue! |
Určuje barvu pozadí piškotu pomocí hexadecimálního zápisu (#rgb, #rrggbb, #rrggbbaa). |
string! |
Určuje text, který má být piškotem zobrazen. |
date! |
Nastavuje aspekt |
percent! |
Nastavuje aspekt |
logic! |
Nastavuje aspekt |
image! |
Určuje obrázek pro pozadí piškotu(tam, kde je použitelné). |
url! |
Načte zdroj, na nějž ukazuje URL a poté jej provede. |
block! |
Udává akci pro implicitní událost piškotu. U panelů určuje jejich obsah. |
get-word! |
Jako aktéra používá existující funkci. |
char! |
(vyhraženo pro budoucí použití). |
Aktér (actor) může být připojen (hooked) k piškotu určením literálové hodnoty bloku nebo názvu aktéra následovaného hodnotou bloku.
Syntaxe
<actor> on-<event> <actor> <actor> : tělo bloku aktéra nebo odkaz na aktéra (block! get-word!). <event> : platný název události (word!).
Popis
Je možné určit aktéra zjednodušeným způsobem poskytnutím pouze bloku jeho těla. Následně je sestavena funkce aktéra a přidána do aspektu actor
piškotu. Takto lze určit několik aktérů.
Úplná specifikace funkce vytvářeného aktéra je:
func [face [object!] event [event! none!]][...body...]
Platný seznam názvů událostí lze nalézt zde.
Je-li zadán blok nebo get-word bez předložky s názvem aktéra, je implicitní aktér pro typ piškotu vytvořen podle definicí zde
Aktér může být rovněž definován mimo VID a odkaz na něj zadán jako get-word argument za tečkou (dot).
Je možné definovat dětské panely pro seskupování piškotů a případně na ně aplikovat specifické styly. Není-li specificky určena, je velikost nového panelu automaticky spočítána podle velikosti jeho obsahu.
Piškoty typu panel ze systému View jsou ve VID podporovány se specifickou syntaxí:
Syntaxe
panel <options> [<content>] <options> : seznam s nastavením panelu <content> : popis obsahu VID panelu (block!).
Popis
Vytvoří dětský panel uvnitř aktuálního kontejneru, jehož obsah je další blok VID. Kromě dalších opcí piškotu lze zadat celočíselný dělitel, ustavujíc tak uspořádání do mřížky (grid-mode layout):
-
je-li zvolený směr
across
, představuje dělitel počet sloupců. -
je-li zvolený směr
below
, představuje dělitel počet řad.
Syntaxe
group-box <divider> <options> [<body>] <divider> : zvolený počet řádků nebo sloupců (integer!). <options> : seznam nastavení pro panel. <body> : popis obsahu VID panelu (block!).
Popis
Vytvoří panel typu group-box uvnitř aktuálního kontejneru, kde obsahem je další blok VID. Eventuelně zadaný dělitel ustavuje uspořádání (layout) do mřížky:
-
je-li zvolený směr
across
, představuje dělitel počet sloupců. -
je-li zvolený směr
below
, představuje dělitel počet řad.
Note
|
Zadaná hodnota typu string! jako opce představuje titulek panelu group-box.
|
Syntaxe
tab-panel <options> [<name> <body>...] <options> : zadaný seznam s nastavením panelu. <name> : titulek karty (string!). <body> : obsah karty (tab) jako popis VID (block!).
Popis
Vytvoří tab-panel
uvnitř aktuálního kontejneru. Specifikační blok musí obsahovat jméno a popis obsahu pro každou kartu (tab). Každé tělo obsahu je nový dětský piškot typu panel, působící jako jakékoliv jiné panely.
Syntaxe
style <new> <old> <options> <new> : název nového stylu (set-word!). <old> : název starého stylu (word!). <options> : volitelný seznam nastavení pro nový styl.
Popis
Nastaví nový styl v aktuálním panelu. Nový styl může být vytvořen z existujících typů piškotů neb z jiných stylů. Nový styl je platný pouze v aktuálním panelu a jeho dětských panelech.
Styly lze kaskádovat od rodičovských panelů k dětským panelům, takže týž styl může být v dětských panelech redefinován nebo rozšířen bez ovlivnění definic v rodičovských panelech.
Aby bylo možné vyhovět odlišným GUI požadavkům různých platforem, vkládá VID přepisovací stroj, schopný dynamické úpravy stromu piškotů (face tree) podle zadaných pravidel. Je zařazen jako poslední stupeň procesu VID.
Pravidla pro Windows:
-
color-backgrounds: color the background of some colorless faces to match their parent’s color
-
color-tabpanel-children: Like color-backgrounds, but tab-panel specific
-
OK-Cancel: buttons ordering rule, puts Cancel/Delete/Remove buttons last
Pravidla pro macOS:
-
adjust-buttons: use standard button sub-classes when buttons are narrow enough
-
capitalize: capitalize widget text according to macOS guidelines
-
Cancel-OK: buttons ordering rule, puts Ok/Save/Apply buttons last
Jednoduchý příklad, který využívá pravidla pro uspořádání tlačítek (buttons) a pro zvětšování písmen:
view [
text "Name" right 50 field return
text "Age" right 50 field return
button "ok" button "cancel"
]
Všimněte si textu a uspořádání tlačítek u zobrazení v macOS a ve Windows.
Popisovaná pravidla pro GUI zajistila, že:
-
tlačítka jsou uspořádána podle pravidel jednotlivých platforem, "Ok" poslední v macOS, "Cancel" poslední ve Windows.
-
popisky tlačítek jsou řádně 'kapitalizované' v macOS.
Pravidla pro GUI lze vypnout nastavením system/view/VID/GUI-rules/active?
na no
.
system/view/VID/GUI-rules/active?: no
Pravidla lze odpojit selektivně úpravou obsahu následujcích seznamů:
system/view/VID/GUI-rules/OS/Windows
== [
color-backgrounds
color-tabpanel-children
OK-Cancel
]
system/view/VID/GUI-rules/OS/macOS
== [
adjust-buttons
capitalize
Cancel-OK
]
Tato procedura umožňuje podřídít se různým požadavkům pro UI bez většího úsilí.