GUI - Události a aktéři
Události - events:
Stisk klávesy na klávesnici či myši, přejíždění kurzorem přes zaměřené pole na obrazovce, výběr položky - to všechno jsou události, které lze podchytit vhodně napsanou definicí piškotu a spojit je s nějakou aktivitou - implicitně definovanou nebo uživatelsky určenou. V následující tabulce je výpis aktuálně použitelných názvů událostí:
Jméno |
Prostředek |
Akce |
down |
mouse |
Stisknuté levé tlačítko myši. |
up |
mouse |
Uvolněné levé tlačítko myši. |
mid‑down |
mouse |
Stisknuté prostřední tlačítko myši. |
mid‑up |
mouse |
Uvolněné prostřední tlačítko myši. |
alt‑down |
mouse |
Stisknuté pravé tlačítko myši. |
alt‑up |
mouse |
Uvolněné pravé tlačítko myši. |
aux‑down |
mouse |
Stisknuté pomocné tlačítko myši. |
aux‑up |
mouse |
Uvolněné pomocné tlačítko myši. |
drag‑start |
mouse |
Piškot začíná být tažen. |
drag |
mouse |
Piškot je tažen. |
drop |
mouse |
Od tažení piškotu bylo upuštěno. |
click |
mouse |
Klik levým tlačítkem myši (pouze pro button). |
dbl‑click |
mouse |
Dvojklik levým tlačítkem myši. |
over |
mouse |
Kurzor myši přechází přes piškot. K této události dochází nejprve když kurzor vstupuje na piškot a poté když jej opouští. Pokud aspekt flags obsahuje flag all‑over, potom jsou rovněž produkovány všechny mezilehlé události. |
move |
mouse |
Došlo k pusunu okna. |
resize |
mouse |
Byla změněna velikost okna. |
moving |
mouse |
Okno je posouváno. |
resizing |
mouse |
Mění se velikost okna. |
wheel |
mouse |
Otáčí se kolečko myši. |
zoom |
touch |
A zooming gesture (pinching) has been recognized. |
pan |
touch |
A panning gesture (sweeping) has been recognized. |
rotate |
touch |
A rotating gesture 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 |
Stisknutá klávesa klávesnice. |
key |
keyboard |
Byl zadán znak nebo stisknuta speciální klávesa (kromě kláves Ctrl, Shift a Menu). |
key‑up |
keyboard |
Uvolněná klávesa klávesnice. |
enter |
keyboard |
Stisknutá klávesa Enter. |
focus |
any |
Piškot právě přešel do režimu focus. |
unfocus |
any |
Piškot právě ztratil focus. |
select |
any |
V piškotu je prováděn výběr z více možností |
change |
any |
V piškotu došlo ke změně v důsledku vstupu uživatele (vložení textu nebo výběr ze seznamu). |
menu |
any |
Výběr položky z menu. |
close |
any |
Zavření okna. |
time |
timer |
Proběhla prodleva, nastavená aspektem rate piškotu. |
Některé události jsou definičně spojeny s daným piškotem, případně aspektem (například aspekt rate má časovač on-time). Každý piškot je schopen akceptovat jenom vymezenou sadu událostí. Uživatelsky definované připojení události k piškotu se provádí za výčtem aspektů:
Příklady některých událostí
Všechny příklady si vyzkoušejte v konzole. Termín např. on-down je spojení obecné předpony on- a názvu události z tabulky.
down, over :
Red [needs: view]
view [
t: area 40x40 blue
on-down [quit]
on-over [either t/color = red [t/color: blue][t/color: red]]
]
wheel :
Red [needs: view]
list: ["first" "second" "third" "fourth"]
view [
t: text "Place your cursor over here and roll the wheel"
on-wheel [
t/text: first list
list: next list
if tail? list [list: head list]
]
]
key-down :
Red [needs: view]
list: ["key" "another key" "one more key"]
view [
below
text "Click inside field and press a key"
t: text 100
a: field
on-key-down [
t/text: first list
list: next list
if tail? list [list: head list]
]
]
time :
V tomto příkladě bliká zadaný text zadanou frekvencí (zde jednou za vteřinu - viz kapitola GUI- Pokročilá témata):
Red [needs: view]
view [
t: text "Now you see..." rate 1
on-time [either t/text = "" [t/text: "Now you see..."][t/text: ""]]
]
close :
- událost okna (kontejneru) - při zavření okna se má v konzole vytisknout "bye!" - (ale nevytiskne)
Red [needs: view]
view [
button [print "click"]
on-close [print "bye!"]
]
Aktéři - actors
Slovo actors (aktéři) je název jednoho z aspektů a rovněž společné označení funkcí pro ošetření událostí. Tyto funkce jsou definovány v bloku za návěstím on-<event> . Výpis případných událostí je uveden v tabulce na začátku této kapitoly.
Red [Needs: view]
view [
t: area 40x40 blue on-down [print t] ;click to quit
on-over [either t/color = red [t/color: blue][t/color: red]]
]
Spuštění tohoto kódu v konzole je doprovázeno obsáhlým tiskovým výstupem. Ke konci tohoto výstupu vidíme deklaraci hodnoty aspektu actors:
(...)
edge: none
para: none
font: none
actors: make object! [
on-down: func [face [object!] event [event! none!]][print t]
on-over: func [face [object!] event [event! none!]][either t/color = red [t/color: blue] [t/color: red]]
]
extra: none
draw: none
(...)
Tiskový výstup do konzoly reprezentuje vnitřní náhled interpreta na skladbu realizovaného kontejneru. Jde o výpis všech aspektů (type, offset, size, text, image, color, menu, data, enabled?. visible?, selected, flags, options, parent, pane, state, rate, edge, para, font, actors, extra a draw) i s příslušejícími hodotami.
Vidíme, že první aspekt parent má ve svém definičním bloku rovněž kompletní sestavu aspektů, stejně jako jeho zanořený další aspekt parent.
Poznámka:
- Dotekové (touch) události nejsou realizovatelné ve Windows XP.
- Jedna či více pohybových událostí vždy předchází událost move.
- Jedna či více událostí měnících rozměr vždy předchází událost resize.