Systém View (View engine) je grafický systém jazyka Red. Jeho cíle lze shrnout do těchto bodů:
-
Minimální, datově orientované API
-
Virtuální strom objektů (strom piškotů) jako programovací rozhraní
-
Okamžitá (realtime) nebo odložená synchronizace mezi virtuálním stromem a zobrazovacím systémem
-
Vytvoření jednoduše podporované dvoucestné vazby (two-way binding)
-
Schopnost mít různé backendy pro různé platformy
-
Podpora OS a uživatelských sad widgetů
-
Malé provozní nároky
Virtuální strom se skládá z piškotů. Každý piškot koresponduje s příslušnou zobrazenou grafickou komponentou dvojcestným propojením.
Piškoty (tvář neboli face - od slova interface), jsou základní stavební kameny grafického rozhraní. Interní součástí každého piškotu je sada 23 aspektů (facets), jimiž jsou určovány jednotlivé parametry piškotu. Těmito parametry je určován nejen vzhed piškotů, ale i jejich odezva na různé události a souvislost s jinými piškoty.
Nový piškot (face) se vytvoří klonováním prototypu face! a zadáním alespoň platného názvu typu.
button: make face! [type: 'button]Dalšími deklarovanými prototypy v systému View jsou font!, para!, reactor! a deep-reactor!. Datovým typem prototypů je object!.
Piškot typu base je nejzákladnějším a nejvšestrannějším typem piškotů. Implicitně zobrazí pouze pozadí barvy 128.128.128.
| Facet | Popis |
|---|---|
type |
|
image |
Lze určit hodnotu typu |
color |
Lze určit barvu pozadí, kanál alfa je podporován. |
text |
Uvnitř piškotu lze zobrazit libovolný text. |
draw |
Transparentnost je plně podporována pro primitiva systému Draw. |
|
Note
|
|
Tento typ piškotu může být použit pro zavedení libovolné grafické komponenty.
Typ text tvoří statický popisek.
| Facet | Popis |
|---|---|
type |
|
text |
Text popisku. |
data |
Hodnota, zobrazená jako text. |
options |
Podporovaná pole: |
Facet data je synchronizován v reálném čase s facetem text s použitím následujících pravidel:
-
při změně facetu
textje facetdatanastaven na načítanou (load) hodnotutextnebononenebo naoptions/default, je-li určeno -
při změně facetu
dataje facettextnastaven na utvářenou (form) hodnotu facetudata
Facet options přijímá následující vlastnosti:
-
default: může být nastaven na libovolnou hodnotu, bude použit facetemdata, vrací-li konverze facetutexthodnotunone, stejně jako u nenačítatelných řetězců.
Tento typ piškotu představuje jednoduché tlačítko.
| Facet | Popis |
|---|---|
type |
|
text |
Popisek tlačítka. |
image |
Uvnitř tlačítka se zobrazí obrázek. Lze kombinovat s textem.. |
| Typ události | Ovladač | Popis |
|---|---|---|
click |
|
Spustí se při poklepu na tlačítko. |
Tento typ reprezentuje tlačítko, které si zachovává svůj stav i po stisknutí. This type represents a button that retains its state after being pushed.
| Facet | Description |
|---|---|
|
|
|
Text popisku pro toggle. |
|
Řídí svislé a vodorovné přiřazení textu. |
|
|
|
Uvnitř přepínacího tlačítka se zobrazí obrázek. Lze kombinovat s textem. |
| Typ události | Ovladač | Popis |
|---|---|---|
|
|
Spustí se při změně stavu přepínače aktivitou uživatele. |
Tento typ představuje zatržítko s volitelným popiskem na levé či právé straně.
| Facet | Popis |
|---|---|
type |
|
text |
Text popisku. |
para |
Pole |
data |
|
|
Zapnout tří-stavové zatržíko (word!). |
Podporované flagy:
-
tri-state: umožňuje třetí, neurčený stav, který je reprezentován hodnotounoneaspektudata.
| Event type | Ovladač | Popis |
|---|---|---|
change |
|
Spustí se změnou stavu zatržení uživatelem. |
Tento typ představuje výběrové tlačítko s popiskem na levé či pravé straně. Ve skupině tlačítek na jednom panelu může být zvoleno pouze jedno tlačítko.
| Facet | Popis |
|---|---|
type |
|
text |
Text popisku. |
para |
Pole |
data |
|
| Event type | Ovladač | Popis |
|---|---|---|
change |
|
Spustí se změnou stavu po akci uživatele. |
Tento typ představuje jednořádkové vstupní pole.
| Facet | Popis |
|---|---|
type |
|
text |
Vkládaný text, hodnota read/write. |
data |
Hodnota, zobrazená jako text. |
selected |
Vybraný text (pair! none!). |
options |
Podporovaná pole: |
flags |
Zapnout či vypnout některé speciální vlastnosti polí (block!). |
Vybraný (selected) piškot řídí zvýraznění textu (read/write). Hodnota typu pair! označuje první a poslední vybraný znak. Hodnota none indikuje, že v poli není vybrán žádný text.
Podporované flagy:
-
no-border: odstraní dekoraci okraje, vytvořenou výchozím frameworkem GUI. -
password: místo zadávaných znaků se zobrazují (\*).
Facet data je synchronizován v reálném čase s facetem text s použitím následujících pravidel:
-
při změně facetu
textje facetdatanastaven na načítanou hodnotutextnebononenebo naoptions/default, je-li určeno -
při změně facetu
dataje facettextnastaven na utvářenou hodnotudata
Facet options přijímá následující vlastnosti:
-
default: může být nastaven na libovolnou hodnotu, bude použit facetemdata, vrací-li konverze facetutexthodnotunone, stejně jako u nenačítatelných řetězců.
| Typ události | Ovladač | Popis |
|---|---|---|
enter |
|
Vyskytne se při každém stisku klávesnice Enter v poli. |
change |
|
Vyskytne se při každém vložení hodnoty do pole. |
select |
|
Vyskytne se při každém výběru textu myší nebo klávesnicí. |
key |
|
Vyskytne se při každém stisku libovolné klávesnice v poli. |
Tento typ představuje víceřádkové vstupní pole.
| Facet | Popis |
|---|---|
type |
|
text |
Zadávaný text, hodnota read/write. |
selected |
Vybraný text (pair! none!) |
flags |
Zapnout či vypnout některé speciální vlastnosti (block!). |
Aspekt selected řídí zvýraznění textu (read/write). Hodnota typu pair! označuje první a poslední vybraný znak. Hodnota none indikuje, že v poli není vybrán žádný text.
Podporované flagy:
-
no-border: odstraní dekoraci okraje, vytvořenou výchozím frameworkem GUI.
|
Note
|
|
| Event type | Ovladač | Popis |
|---|---|---|
change |
|
Vyskytne se při každém vložení hodnoty do oblasti. |
select |
|
Vyskytne se po každém výběru textu myší nebo klávesnicí. |
key |
|
Vyskytne se v dané oblasti při každém stisku klávesy. |
Tento typ představuje svislý seznam textových řetězců, zobrazený v pevném rámečku. Automaticky se objeví vertikální posuvník, jestliže se všechny řádky nevejdou do rámečku.
| Facet | Popis |
|---|---|
type |
|
data |
Seznam zobrazovaných řetězců (block! hash!). |
selected |
Index vybraného řetězce nebo hodnota none, není-li žádný vybrán (read/write). |
| Event type | Ovladač | Popis |
|---|---|---|
select |
|
Vyskytne se při výběru položky seznamu. Facet |
change |
|
Vyskytne se po události |
|
Note
|
|
Tento typ představuje vertikální seznam textových řetězců, zobrazený ve svinutelném rámečku. Automaticky se objeví svislý posuvník, přesahuje-li obsah velikost rámečku.
| Facet | Popis |
|---|---|
type |
|
data |
Seznam zobrazovaných řetězců (block! hash!). |
selected |
Index vybraného řetězce nebo hodnota none, není-li žádný vybrán (read/write). |
Facet data přijímá libovolné hodnoty, avšak pouze hodnoty typu string jsou zařazeny do seznamu a zobrazeny. Neřetězcové hodnoty lze použít pro vytvoření asociativní řady (array) v níž řetězce slouží jako klíče. Facet selected je celočíselný index, počínající jedničkou, indikující pozici vybraného řetězce v seznamu, nikoliv ve facetu data.
Podporované flagy:
|
Dosud nezavedeno
|
|
| Event type | Ovladač | Popis |
|---|---|---|
select |
|
Vyskytne se při výběru položky v seznamu. Facet selected odkazuje na index starší vybrané položky. |
change |
|
Vyskytne se po události |
|
Note
|
|
Tento typ představuje editovatelné pole s vertikálním seznamem zobrazeným ve svinovacím rámečku. Automaticky se objeví svislý posuvník, překračuje-li obsah velikost rámečku.
| Facet | Popis |
|---|---|
type |
|
data |
Seznam zobrazovaných řetězců (block! hash!). |
selected |
Index vybraného řetězce nebo hodnota none, není-li žádný vybrán (read/write). |
Facet data přijímá libovolné hodnoty avšak pouze hodnoty typu string jsou zařazeny do seznamu a zobrazeny. Neřetězcové hodnoty lze použít pro vytvoření asociativní řady, v níž řetězce slouží jako klíče. Facet selected je celočíselný index, počínající jedničkou, indikující pozici vybraného řetězce v seznamu.
Podporované flagy:
-
scrollable: Ručně povolit vertikální scroll-bar.
| Event type | Ovladač | Popis |
|---|---|---|
select |
|
Vyskytne se při výběru položky v seznamu. Facet selected odkazuje na index starší vybrané položky. |
change |
|
Vyskytne se po události |
|
Note
|
|
Tento typ představuje měsíční Gregoriánský kalendář pro období od 1-Jan-1601 do 31-Dec-9999.
| Facet | Description |
|---|---|
|
|
|
hodnota |
| Event type | Handler | Description |
|---|---|---|
|
|
Vyskytne se při výběru data v kalendáři. |
|
Note
|
|
Tento typ představuje horizontální nebo vertikální průběhovou lištu.
| Facet | Popis |
|---|---|
type |
|
data |
Hodnota, představující průběh postupu (hodnota percent! nebo float!). |
|
Note
|
|
Tento typ představuje kurzor, posuvný podél horizontální nebo vertikální osy.
| Facet | Popis |
|---|---|
type |
|
data |
Hodnota, představující pozici kurzoru (percent! nebo float!). |
|
Note
|
|
Tento typ se používá k zobrazení "video camera feed".
| Facet | Popis |
|---|---|
type |
|
data |
Seznam názvů kamer jako blok řetězců. |
selected |
Vybraný název kamery ze seznamu |
|
Note
|
|
Panel je kontejner pro další piškoty.
| Facet | Popis |
|---|---|
type |
|
pane |
Blok dětských piškotů. Pořadí v bloku určuje jejich zetové pořadí při zobrazení. |
|
Note
|
|
Tab-panel je seznam karet (panelů), z nichž pouze jedna může být v daném okamžiku viditelná. Seznam názvů těchto karet je zobrazen jako "tabs" a používá se k přepínání mezi kartami.
| Facet | Popis |
|---|---|
type |
|
data |
Blok názvů karet (hodnoty string). |
pane |
Seznam panelů, odpovídající seznamu karet (block!). |
selected |
Index vybraného panelu nebo hodnota none (integer!, read/write). |
| Event type | Ovladač | Popis |
|---|---|---|
change |
on-change |
Vyskytne se při výběru nové karty. Facet |
|
Note
|
|
Reprezentuje okno, zobrazené na monitoru počítače.
| Facet | Popis |
|---|---|
type |
|
text |
Název okna (string!). |
offset |
Odsazení okna od levého horního rohu obrazovky, nezahrnujíce v to dekoraci rámečku okna (pair!). |
size |
Velikost okna bez dekorací rámečku (pair!). |
flags |
Zapíná či vypíná některé speciální vlastnosti okna (block!). |
menu |
Zobrazí nabídkovou lištu v okně (block!). |
pane |
Seznam piškotů, zobrazených uvnitř okna (block!). |
selected |
Výběr piškotu, jež se stane nositelem zaměření (object!). |
Podporované flagy:
-
modal: učiní okno modálním, zneplatňujíce všechna předtím otevřená okna -
resize: umožní změnu velikosti okna (implicitní je pevná velikost, nikoliv měnitelná). -
no-title: nezobrazovat název okna -
no-border: odebrat dekorace rámečku okna -
no-min: odebrat tlačítko 'minimalizovat' z přesuvné lišty okna -
no-max: odebrat tlačítko 'maximalizovat' z přesuvné lišty okna -
no-buttons: odebrat všechna tlačítka z přesuvné lišty okna -
popup: alternativní menší dekorace rámečku (jen u Windows).
|
Note
|
|
Představuje grafickou zobrazovací jednotku, připojenou k počítači (obvykle monitor).
| Facet | Popis |
|---|---|
type |
|
size |
Velikost zobrazení monitoru v pixelech. Nastaveno při startu prostředím View engine (pair!). |
pane |
Seznam zobrazovaných oken na monitoru (block!). |
Všechny zobrazené piškoty oken musí být dětmi piškotu screen.
Group-box je kontejner pro jiné piškoty s viditelným rámečkem. Tento dočasný formát bude odebrán až bude k dispozici podpora pro facet `edge`.
| Facet | Popis |
|---|---|
type |
|
pane |
Blok s dětskými piškoty. Pořadí v bloku určuje zetové pořadí (z-order) při zobrazení. |
|
Note
|
|
Piškoty jsou organizovány do stromu, který vyjadřuje hierarchii jejich vztahů v zobrazení. Vztahy u stromu jsou odvozeny z:
-
facetu
pane: výpis jednoho či více dětí piškotu v bloku. -
facetu
parent: odkaz na rodičovský piškot.
Pořadí piškotů v bloku pane je důležité - odvozuje se z něj zetové uspořádání grafických objektů (piškot v čele seznamu pane je zobrazen jako poslední, piškot na konci seznamu je zobrazen nad všemi ostatními).
Kořenem stromu piškotů je piškot screen. Piškot screen může zobrazit pouze piškoty window z bloku ve svém poli pane.
Aby mohl být kterýkoli piškot zobrazen na obrazovce, musí být spojen s piškotem screen přímo (pro okna) nebo nepřímo (přes piškot window pro jiné typy piškotů).
-
Piškot (face) je vytvořen pomocí prototypu
face!. -
Je vložen do stromu piškotů spojeného s piškotem screen.
-
Je zobrazen na monitoru příkazem
show.-
v tomto okamžiku jsou přiděleny systémové zdroje
-
blok
face/stateje nastaven.
-
-
Odebráním piškotu z aspektu pane je odebrán ze zobrazení.
-
Vymizí-li odkazy na piškot, postará se garbage collector o uvolnění obsazených zdrojů.
|
Note
|
|
Pole piškotu zvané facet (aspekt) určuje jeho různé vlastnosti.
Seznam vytvořených aspektů:
| Facet | Datatype | Povinné? | Použití | Popis |
|---|---|---|---|---|
type |
word! |
yes |
all |
Interně používané pro ověření, že je objekt strukturován jako piškot. |
offset |
pair! |
yes |
all |
Odsazení od piškotu rodiče vlevo nahoře. |
size |
pair! |
yes |
all |
Velikost piškotu. |
text |
string! |
no |
all |
Text, zobrazený v piškotu. Atributy textu jsou určeny facety |
image |
image! |
no |
some |
Obraz na pozadí piškotu. |
color |
tuple! |
no |
some |
Barva pozadí piškotu ve formátu R.G.B nebo R.G.B.A. |
menu |
block! |
no |
all |
Lišta nabídky (menu) nebo kontextuálního menu. |
data |
any-type! |
no |
all |
Data o stavu piškotu a další relevantní informace. |
enabled? |
logic! |
yes |
all |
Umožnit nebo znemožnit události vstupu v piškotu. |
visible? |
logic! |
yes |
all |
Zobrazit či skrýt piškot. |
selected? |
integer!, pair!, object! |
no |
some |
Index aktuálně vybraného elementu seznamu. |
flags |
block!, word! |
no |
some |
Seznam speciálních klíčových slov, měnících zobrazení nebo chování piškotu. |
options |
block! |
no |
some |
Další vlastnosti piškotu ve formátu [name: value]. |
parent |
object! |
no |
all |
Odkaz na rodičovský piškot (pokud existuje). |
pane |
block! |
no |
some |
Seznam dětí (child faces), zobrazených uvnitř piškotu. |
state |
block! |
no |
all |
Informace o interním stavu piškotu (používané pouze prostředím View engine). |
rate |
integer! time! |
no |
all |
Časovač piškotu. Periodicky spouští událost |
edge |
object! |
no |
all |
(vyhrazeno pro budoucí použití) |
para |
object! |
no |
all |
Nastavení úpravy textu v odstavci - počátek, okraje, odsazení, tabulátor, rolování textu a další. |
font |
object! |
no |
all |
Nastavení vlastností fontu (style, velikost, barva, zarovnání, a jiné) pro piškot. |
actors |
object! |
no |
all |
Uživatelsky vytvořené ovladače událostí. |
extra |
any-type! |
no |
all |
Volitelná uživatelská data připojená k piškotu. |
draw |
block! |
no |
all |
Seznam příkazů Draw, jež mají být provedeny v piškotu. |
Seznam globálně použitelných flagů pro facet flags:
| Flag | Popis |
|---|---|
all-over |
Poslat všechny události |
Ostatní specifické flagy piškotů jsou dokumentovány v příslušných sekcích.
|
Note
|
|
Objekt font je klonem šablony
Objekt font je instance prototypu font!. Instance prototypu se vytvoří příkazem:
font: make font! [field: value ...]Na jeden objekt font mohou odkazovat aspekty font více piškotů, což umožňuje ovládat vlastnosti fontu z jednoho místa pro celou skupinu piškotů.
Při deklaraci se název atributu uvádí za pomlčkou, například font-name.
| Field | Datatype | Mandatory? | Popis |
|---|---|---|---|
name |
string! |
no |
Platný název fontu, instalovaného v OS. |
size |
integer! |
no |
Velikost fontu v bodech (points). |
style |
word!, block! |
no |
Styl nebo blok stylů. |
angle |
integer! |
yes |
Sklon textu ve stupních (default is |
color |
tuple! |
yes |
Barva fontu ve formátu R.G.B nebo R.G.B.A. |
anti-alias? |
logic!, word! |
no |
Režim vyhlazení (active/inactive or special mode). |
shadow |
(reserved) |
no |
(reserved for future use) |
state |
block! |
no |
Informace o interním stavu piškotu (používané pouze prostředím View. |
parent |
block! |
no |
Interní odkaz na rodičovský piškot (používané pouze prostředím View). |
|
Note
|
|
Nabízené styly fontů:
-
bold -
italic -
underline -
strike
Nabízené režimy vyhlazení:
-
active/inactive (
anti-alias?: yes/no) -
ClearType mode (
anti-alias?: 'ClearType)
Objekt para je instance prototypu para!. Instance prototypu se vytvoří příkazem:
para: make para! [field: value ...]Na jeden objekt para mohou odkazovat aspekty para více piškotů, což umožňuje ovládat vlastnosti odstavce z jednoho místa pro celou skupinu piškotů.
| Field | Datatype | Description |
|---|---|---|
origin |
(reserved) |
(reserved for future use) |
padding |
(reserved) |
(reserved for future use) |
scroll |
(reserved) |
(reserved for future use) |
align |
word! |
Nastavení horizontálního přiřazení textu: left, center, right. |
v-align |
(reserved) |
Nastavení vertikálního přiřazení textu: top, middle, bottom. |
wrap? |
logic! |
Povolit zarovnání (wrapping) textu. |
parent |
block! |
Interní odkaz na rodičovský piškot. |
|
Note
|
|
Aspekt options obsahuje volitelné parametry, kterými se zadává specifické chování piškotu:
| Option | Popis |
|---|---|
drag-on |
Možné volby jsou: |
offset |
Odsazení okna od levého horního rohu obrazovky v pixelech ve formátu |
size |
Velikost okna v pixelech ve formátu |
Následující informace je uváděna jen pro úplnost, při normálním používání by aspekt state neměl být používán. Lze jej ovšem použít, když uživatel volá OS API přímo nebo když je zapotřebí změnit chování View engine.
| Position/Field | Popis |
|---|---|
1 (handle) |
Na operačním systému závislý ovladač pro grafický objekt ( |
2 (changes) |
'Bit flags array' označení, který facet byl změněn od posledního volání fce |
3 (deferred) |
Seznam odložených změn od posledního volání funkce |
4 (drag-offset) |
Uchovává výchozí pozici kurzoru myši při vstupu do režimu vlečení piškotu ( |
|
Note
|
|
Syntaxe
show <face> <face>: klon prototypu face!
Popis
Tato funkce se používá pro aktualizaci piškotu nebo seznamu piškotů na monitoru. Řádně zobrazen může být ten piškot, na který odkazuje strom piškotů, spojený s piškotem screen. Při prvním volání jsou přiřazeny systémové zdroje, je nastaven facet state a grafický komponent je zobrazen na monitoru. Následná volání budou na monitoru reflektovat jakoukoliv změnu piškotu. Je-li definován facet pane, bude funkce show rekurzivně aplikována i na piškoty dětí.
View engine má dva různé režimy pro aktualizaci zobrazení po úpravě stromu piškotů:
-
Aktualizace v reálném čase: jakákoli změna piškotu je okamžitě zobrazena v monitoru.
-
Odložená aktualizace: žádné změny nejsou přeneseny na monitor, dokud se pro piškot nebo pro jeho rodiče nezavolá funkce
show.
Přechod mezi těmito dvěma režimy je řízen slovem system/view/auto-sync? : je-li nastaveno na yes, realizuje se aktualizace v reálném čase (implicitní nastavení), je-li nastaveno na no, View engine odloží všechny aktualizace.
Motivací pro implicitně nastavenou aktualizaci v reálném čase jsou:
-
Jednodušší a kratší zdrojový kód, neboť není zapotřebí volat
showpo každé změně piškotu. -
Menší penzum k pamatování pro začátečníky.
-
Postačující pro jednoduché či prototypové aplikace.
-
Zjednodušuje experimentování z konzoly.
Odložená aktualizace realizuje mnoho změn na monitoru zároveň, což vede ke snížení zádrhelů a je rychlejší.
|
Note
|
|
Piškoty se při svém propojení s řadami (series), použitými ve facetech, opírají o vlastnický systém Redu. Jakákoli změna v některém z facetu je piškotem detekována a vyřízena ve shodě s aktuálně nastaveným režimem aktualizace ( realtime or deferred).
Na druhé straně změny, provedené v zobrazených grafických objektech, jsou okamžitě reflektovány v odpovídajících facetech. Například, zápis do piškotu field reflektuje vstup do facetu text v živém režimu.
Toto dvojsměrné propojení zjednodušuje programování interakce s grafickými objekty bez potřeby jakéhokoliv specifického API. Zcela postačí úprava facetů s použitím akcí pro řady (series).
Příklad:
view [
list: text-list data ["John" "Bob" "Alice"]
button "Add" [append list/data "Sue"]
button "Change" [lowercase list/data/1]
]
| Jméno | Typ vstupu | Příčina |
|---|---|---|
down |
mouse |
Left mouse button pressed. |
up |
mouse |
Left mouse button released. |
mid-down |
mouse |
Middle mouse button pressed. |
mid-up |
mouse |
Middle mouse button released. |
alt-down |
mouse |
Right mouse button pressed. |
alt-up |
mouse |
Right mouse button released. |
aux-down |
mouse |
Auxiliary mouse button pressed. |
aux-up |
mouse |
Auxiliary mouse button released. |
drag-start |
mouse |
A face dragging starts. |
drag |
mouse |
A face is being dragged. |
drop |
mouse |
A dragged face has been dropped. |
click |
mouse |
Left mouse click (button widgets only). |
dbl-click |
mouse |
Left mouse double-click. |
over |
mouse |
Kurzor myši přechází přes piškot. Tato událost vzniká jednou, když kurzor vstupuje na piškot a jednou, když jej opouští. Pokud facet |
move |
mouse |
A window has moved. |
resize |
mouse |
A window has been resized. |
moving |
mouse |
A window is being moved. |
resizing |
mouse |
A window is being resized. |
wheel |
mouse |
The mouse wheel is being moved. |
zoom |
touch |
A zooming gesture (pinching) has been recognized. |
pan |
touch |
A panning gesture (sweeping) has been recognized. |
rotate |
touch |
A rotating gesture (sweeping) has been recognized. |
two-tap |
touch |
A double tapping gesture has been recognized. |
press-tap |
touch |
A press-and-tap gesture has been recognized. |
key-down |
keyboard |
A key is pressed down. |
key |
keyboard |
Byl zadán znak nebo stisknuta speciální klávesa (kromě control, shift a nabídkové klávesy). |
key-up |
keyboard |
A pressed key is released. |
enter |
keyboard |
Enter key is pressed down. |
focus |
any |
A face just got the focus. |
unfocus |
any |
A face just lost the focus. |
select |
any |
A selection is made in a face with multiple choices. |
change |
any |
Vyskytla se změna v piškotu, přijímající vstup uživatele (text nebo výběr ze seznamu). |
menu |
any |
A menu entry is picked. |
close |
any |
A window is closing. |
time |
timer |
Proběhla prodleva, nastavená facetem |
|
Note
|
|
Hodnota události je opaktní objekt, obsahující všechny informace o dané události. K polím události se přistupuje pomocí cesty (path notation).
| Field | Returned value |
|---|---|
type |
Typ události ( |
face |
Piškot, ve kterém došlo k události ( |
window |
Piškot okna, ve kterém došlo k události ( |
offset |
Odsazení kurzoru myši od piškotu při vzniku události ( |
key |
Stisknutá klávesa ( |
picked |
Nová položka, vybraná v piškotu ( |
flags |
Vrací seznam s jedním či více flagy (viz list níže) ( |
away? |
Vrací |
down? |
Vrací true při stisknutí levého tlačítka myši ( |
mid-down? |
Vrací true při stisknutí prostředního tlačítka myši ( |
alt-down? |
Vrací true při stisknutí pravého tlačítka myši ( |
ctrl? |
Vrací true při stisku klávesy CTRL ( |
shift? |
Vrací true při stisku klávesy SHIFT ( |
Seznam možných flagů z event/flags:
-
away -
down -
mid-down -
alt-down -
aux-down -
control -
shift
[NOTE] Všechna pole (kromě type) jsou pouze pro čtení. Nastavení pole type je používáno pouze interně prostředím View.
Zde je seznam specielních kláves, vracených jako slova polem event/key:
-
page-up -
page-down -
end -
home -
left -
up -
right -
down -
insert -
delete -
F1 -
F2 -
F3 -
F4 -
F5 -
F6 -
F7 -
F8 -
F9 -
F10 -
F11 -
F12
Následující názvy kláves mohou být vráceny polem event/key pouze pro sdělení key-down a key-up:
-
left-control -
right-control -
left-shift -
right-shift -
left-menu -
right-menu
Aktéři (actors) jsou ovládací funkce pro události View engine. Jsou definovány v objektu, vytvořeném volnou formou (nemají prototyp) a odkazuje na ně facet actors . Všichni aktéři mají stejný blok specifikací.
Syntaxe
on-<event>: func [face [object!] event [event!]] <event> : jakýkoliv platný název události (viz tabulka výše) face : piškot, který je příjemcem události event : hodnota události.
Kromě událostí GUI je také možné definovat aktéra on-create, který je volán při prvním zobrazení piškotu, ještě před tím, než jsou pro něj alokovány systémové zdroje. Na rozdíl od jiných aktérů má on-create pouze jeden argument a to face.
Vratná hodnota
'stop : opustí smyčku událostí. 'done : zabrání události přetéci do jiného piškotu.
Ostatní vratné hodnoty nemají žádný účinek.
Události jsou obvykle generovány pro určitou pozici na obrazovce a jsou přiřazeny k nejbližšímu čelnímu (front) piškotu. Událost ovšem cestuje od jednoho piškotu ke druhému v hierarchii předchůdců ve dvou směrech, obecně známých jako:
-
odchycení (capturing) události: událost postupuje od piškotu
windowk čelnímu (front) piškotu, kde vznikla. Pro každý piškot je generována událostdetecta volán odpovídající ovladač (handler), pokud existuje. -
probublávání (bubbling) události: událost postupuje od piškotu k rodičovskému oknu. Pro každý piškot je volán lokální ovladač události.
Typická cesta toku událostí:
-
Na tlačítku je generována událost
click, zpracovávají se globální ovladače (viz další odstavec). -
Začíná etapa odchycení události:
-
Nejprve se událost dostane k piškotu
window, je volán jeho ovladačon-detect. -
Poté se událost dostane k piškotu
panel, je volán jeho ovladačon-detect. -
Nakonec se událost dostane k piškotu
button, je volán jeho ovladačon-detect.
-
-
Začíná etapa probublávání události:
-
Nejprve se událost dostane k piškotu
button, je volán jeho ovladačon-click. -
Poté se událost dostane k piškotu
panel, je volán jeho ovladačon-click. -
Nakonec se událost dostane k piškotu
windowa je volán jeho ovladačon-click.
-
|
Note
|
|
Před vstupem do cesty toku událostí je možné zajistit specifické předzpracování použitím takzvaných "globálních ovladačů událostí". Jsou k disposici následující API pro jejich přidání a odebrání.
Syntaxe
insert-event-func <handler> <handler> : funkce ovladače nebo blok kódu pro předzpracování události specifikace funkce ovladače:: func [face [object!] event [event!]]
Vratná hodnota
Nově přidaná funkce ovladače (function!).
Popis
Instaluje funkci globálního ovladače, která umí předzpracovat události před tím, než se dostanou k ovladačům piškotu. Pro každou událost jsou volány všechny globální ovladače, takže kód těla ovladače potřebuje být optimalizován na rychlost a využití paměti. Je-li jako argument poskytnut blok, je konvertován na funkci s použitím konstruktoru function.
Vratná hodnota funkce ovladače:
-
none: událost může být zpracována jinými ovládači (none!). -
'done: jiné globální ovladače jsou přeskočeny ale událost je šířena k dětským piškotům (word!). -
'stop: opustit smyčku událostí (word!).
Vrací se odkaz na funkci ovladače a ten by měl být uložen, má-li být ovladač později odebrán.
| Word | Popis |
|---|---|
screens |
Seznam piškotů |
event-port |
reserved for future use |
metrics |
reserved for future use |
platform |
Nízko úrovňový platformní kód prostředí View (includes backend code). |
VID |
Procesní kód VIDu. |
handlers |
Seznam globálních ovladačů událostí |
reactors |
Interní asociativní tabulka pro reaktivní piškoty a jejich akční bloky. |
evt-names |
Interní tabulka pro konverzi události na název aktéra. |
init |
Inicializační funkce z View engine; případně může být volána i uživatelem. |
awake |
Funkce vstupního bodu pro hlavní 'high-level' události. |
capturing? |
|
auto-sync? |
|
debug? |
|
silent? |
|
Komponenta View není implicitně připojena při kompilaci. Za účelem jejího připojení musí hlavní skript Redu deklarovat svou závislost v záhlaví použitím pole Needs :
Red [
Needs: 'View
]
[NOTE] Při použití konzol, automaticky generovaných binárkou red, je komponenta View implicitně připojena na podporujících platformách; pole Needs v záhlaví tedy není požadováno ve skriptech, spouštěných z těchto konzol.
| Function | Popis |
|---|---|
view |
Zobrazit na monitoru okno ze stromu poškotů nebo z bloku kódu VID. Zavede smyčku událostí, pokud není použito upřesnění (refinement) |
unview |
Zruší jedno či více oken. |
layout |
Přemění blok kódu VID na strom piškotů. |
center-face |
Vystředí piškot relativně ke svému rodiči. |
dump-face |
Poskytne kompaktní popis stromové struktury piškotů (pro účely ladění). |
do-actor |
Vyhodnotí ručně aktéra piškotu. |
do-events |
Spustí smyčku událostí (optionally just process pending events and return). |
draw |
Vykreslí blok dialektu Draw do obrázku. |
to-image |
Přemění jakýkoliv vykreslovaný piškot na obrázek. |
set-focus |
Nastaví focus na určený piškot (face). |
size-text |
Změří v pixelech velikost textu v piškotu (berouce v úvahu vybraný font). |

