GUI - Pokročilá témata
VID DLS style
Někdy je zapotřebí nadefinovat si vlastní piškot. Pro tento účel použijeme funkci style. Pěknou ukázku tohoto postupu lze nalézt (anglicky) zde .
Deklarace nového piškotu má formát: style <nový název> <stávající piškot> <parametry>
Red [Needs: view]
view [
style myface: base 70x40 cyan [quit]
myface "Click to quit" ; hodnota pro aspekt text
myface "Here too"
panel red 90x110 [
below
myface "And here"
myface "Also here" blue ; změna hodnoty aspektu color
]
]
function! view a unview
Vícero oken v obrazovce
Funkci view lze také použít k zobrazení oken, jež byla definována v jiné části kódu. Ovšemže, funkce unview zobrazení (view) ruší. Následující kód vytvoří dvě identická, ale nezávislá okna (rozdílné face trees) v různých místech obrazovky:
Red [needs: view]
my-view: [button {click to "unview"} [unview]]
; face string actor
print "something" ; do something else
print "biding my time" ; do something else
view/options/no-wait my-view [offset: 30x100]
view/options/no-wait my-view [offset: 400x100]
unview s upřesněním /only se zaměří pouze na zadané okno:
Red [needs: view]
v1: view/options/no-wait [
backdrop blue
button "unview blue"[unview/only v1]
button "unview yellow" [unview/only v2] ]
[offset: 30x100] ; option
v2: view/options/no-wait [
backdrop yellow
button "unview blue"[unview/only v1]
button "unview yellow" [unview/only v2] ]
[offset: 400x100] ; option
Upřesnění pro funkci view:
/tight => nulový odstup od výchozího bodu
/options =>
/flags =>
/no-wait => žádné čekání
Upřesnění pro funkci unview:
/all => Zavře všechna zobrazení
/only => Zavře zadané zobrazení
VID DLS loose
Klíčové slovo (příslovce) loose umožňuje vlečení piškotu myší po okně:
Red [needs: view]
view [
size 150x150
base blue 50x50 "Drag me" loose
] ; piškot; aspekty color, size, text; příslovce
VID DLS all-over
K události on-over normálně dochází v okamžiku, když kurzor "vstupuje" nebo "opouští" plochu piškoutu. Zadáte-li flag (příslovce) all-over , potom všechny události, k nimž dojde v situaci, kdy je kurzor v ploše piškotu (např. pohyby nebo kliknutí), generují událost on-over.
V následující ukázce mění levý čtverec barvu pouze při "vstupu" či "opuštění" piškotu kurzorem, avšak pravý čtverec mění barvu také při kliknutí nebo pohybu kurzoru v ploše piškotu:
Red [needs: view]
view [
a: base 40x40 blue
on-over [either a/color = red [a/color: blue][a/color: red]]
b: base 40x40 blue all-over
; proměnná, piškot, aspekt, aspekt, příslovce
on-over [either b/color = red [b/color: blue][b/color: red]]
] ; událost, aktér s variantními reakcemi
VID DLS hidden
Příslovce hidden činí piškot neviditelným. Možné použití je pro vytvoření skrytého piškotu s využitým aspektem rate (zde není použito), takže lze mít časování bez zobrazení piškotu.
Red [needs: view]
view [
button "I'm here"
button "I'm not" hidden
button "Here too"
]
VID DLS disabled
Příslovce disabled deaktivuje piškot (nedojde k žádné události, dokud není enabled).
Red [needs: view]
view [
button "I should quit, but I don't" disabled [quit]
button "Quit" [quit]
]
VID DLS select
Příslovce select označí přednastavený výběr v piškotu text-list.
Red [needs: view]
view [
tl: text-list 100x100 data [
"Nenad" "Gregg" "Qtxie" "Rebolek"
"Speedy G." "Myke" "Toomas"
"Alan" "Nick" "Peter" "Carl"
] select 6
[print tl/selected]
]
VID DLS focus
Příslovce focus dodá implicitní zaměření označenému piškotu při prvním zobrazení okna. Zaměření může mít pouze jeden piškot. Je-li deklarováno více focusů, má implicitní zaměření ten poslední.
Red [needs: view]
view [
field
field focus
field focus
field
]
VID DLS hint
Příslovce hint zprostředkuje textové sdělení uvnitř piškotu field. Při zadání nového obsahu (editací pole nebo aspektu face/text) stávající text zmizí.
Red [needs: view]
view [
field
field hint "hint here"
]
VID DLS default
příslovce default definuje počáteční hodnotu pro aspekt data, vrací-li konverze hodnoty aspektu text hodnotu none. Aktuálně chodí pouze pro piškoty text a field. Nepochopil.
Red [needs: view]
view [
a: field 100 default "My default"
b: field 100 "My text default" ; piškot, délka, hodnota aspektu text
do [
print a/text
print a/data ; přiřazeno příslovcem "default"
print b/text
print b/data ; error: hodnota aspektu data nebyla určena
] ]
My default
My default
My text default
*** Script Error: My has no value
*** Where: print
*** Stack: view layout do-safe
VID DLS with
Řekněme, že chcete vytvořit piškot s hodnotami aspektů, které se vyhodnocují při realizaci piškotu. Vyhodnocení nemůžete uskutečnit coby argumenty piškotu, tudíž je zadáte pomocí slova with .
Toto nechodí:
Red [needs: view]
a: 2
b: 3
view [
base a * 30x40 b * 8.20.33
]
Toto chodí:
Red [needs: view]
a: 2
b: 3
view [
base with [
size: a * 30x40
color: b * 8.20.33
]
]
VID DLS rate
rate je aspekt s časovačem. Když časovač (timer) "tikne", generuje se událost on-time. Pamatujte, že argumentem rate je "kolikrát za vteřinu", takže rate 20 je rychlejší než rate 5.
Tento kód způsobí blikání textu:
Red [needs: view]
view [
t: text "" rate 2
on-time [either t/text = "" [t/text: "Blink"] [t/text: ""]]
]
Tento kód vytvoří jednoduchou animaci, kde modrý piškot base cestuje napříč oknem:
Red [Needs: 'View]
view[
size 150x150
b: base 40x40 blue "I move" rate 20
on-time [b/offset: b/offset + 1x1]
]
Pomalejší frekvence:
Pro časové úseky delší než 1 vteřinu, použijte pro rate argument typu time!:
Red [Needs: view]
view[
t: text "" rate 0:0:3
on-time [either t/text = "" [t/text: "Blink" print now/time][t/text: "" print now/time]]
]
function! react
react je klíčové slovo (funkce), které spojuje chování jednoho piškotu s daty jiného piškotu.
Klasický příklad:
Red [Needs: view]
view[
progress 100x20 20% react [face/data: s/data]
s: slider 100x20 20%
]
Piškot progress reaguje na pohyb posuvníku piškotu slider:
Upřesnění funkce react
/link => Spojí objekty reaktivním vztahem.
/unlink => Zruší existující reaktivní vztah.
/later => Spustí reakci při příští změně.
/with => Určí vybraný pišktot (interní použití).
function! layout
Funkce layout se používá k vytvoření grafických útvarů bez jejich bezprostředního použití. Funkce definuje blok s popisem útvaru a s aktérem 'unview' nebo 'view'. Je aktivována pozdějším odkazem na její jméno.
Následující kód například zobrazí jedno okno a po jeho zavření zobrazí druhé:
Red [needs: view]
my-view: layout [button {click to "unview"} [unview]]
print "something" ;do something else
print "biding my time" ;do something else
view/options my-view [offset: 30x100]
view/options my-view [offset: 200x100]
Zobrazení přes celou obrazovku:
Následující skript vytvoří zobrazení přes celou obrazovku :
Red [needs: view]
view [size system/view/screens/1/size]