# Tvorba uživatelského rozhraní (GUI)

Skripty definující jednotlivé typy uživatelských rozhraní se nalézají ve složce scripts/GUI. Které uživatelské rozhraní je použito v které fázi experimentu lze nastavit v popisu scénáře. Mimo to ale tato složka obsahuje i speciální soubor launcher.xml ve kterém jsou definovány použitelné jazykové mutace. Každý text v definici uživatelského rozhraní musí být uveden ve všech jazykových mutacích (vždy umístěn do příslušného tagu, např. en, cz a pod.).

Popis uživatelského rozhraní je zahájen tagem gui, který má následující atributy:

- name - jméno uživatelského rozhraní
- standardCursor - kurzor, libovolný obrázek ze složky test-resources/HUD
- focusCursor - kurzor použitý ke zvýraznění je-li nad nějakým objektem
- showModel - má-li se zobrazovat objekt vlevo nahoře (true, implicitní hodnota), nebo ne (false)
- renderBackground - má-li se vykreslovat 3D scéna (true, implicitně), nebo ne (false)
- suspendFirstPerson - má-li být aktivní ovládání myší (false, implicitně), nebo ne (true). Standartně lze přepnout klávesou Esc.

Poté následují specifické texty (v tagu texts), které se mohou v průběhu práce s programem objevit v různých dialogových oknech. Definovat je nutné jen ty texty, které se objeví během fáze používající definované uživatelské rozhraní. Texty se definují v tagech:

- exit - text výzvy, která se objeví při pokusu o ukončení programu ("opravdu chcete..")
- time - text zobrazující se během pauzy mezi přesunem a vybavením (fáze BREAK). Mohou v něm být vnořeny tagy prefix a suffix obsahující text, který se zobrazuje před a za zbývajícím časem.
- save - text na tlačítku "uložit" v okně zobrazujícím výsledky (fáze RESULTS)
- pause, continue - na tlačítku pozastavujícím běh simulace ve fázi COLLISIONS

Nejdůležitější částí definice uživatelského rozhraní je tag items, v nemž jsou obsaženy tagy definující jednotlivé prvky uživatelského rozhraní - popisky (tag label) a tlačítka (tag button). Oba tagy v sobě obsahují příslušný text ve všech jazykových mutacích a mají řadu společných atributů týkajících se umístění na obrazovce:

- alignment - určuje základní umístění a může nabývat libovolné kombinace hodnot TOP, CENTER, BOTTOM a LEFT, CENTER, RIGHT (výsledkem je např. TOP_LEFT značící horní levý roh).
- offsetx - posunutí v x-ové souřadnici vzhledem k základnímu umístění. Kladná hodnota značí posun doprava, záporná doleva.
- offsety - posunutí v y-ové souřadnici, záporné hodnoty značí posun nahoru, kladné dolů.
- width, height - výška a šířka prvku

Navíc tag label obsahuje atributy color (implicitně WHITE) a fontSize (implicitně 10) určující barvu a velikost písma. Oproti tomu tag button obsahuje důležitý atribut command, který určuje jaký příkaz se zavolá po stisknutí tlačítka. Dostupné příkazy jsou následující (některé příkazy mají smysl pouze v určitých fázích experimentu):

- NONE - prázdný příkaz
- END_PHASE - ukončí aktuální fázi
- NEXT_CONFIGURATION - zobrazí další konfiguraci
- PREVIOUS_CONFIGURATION - zobrazí předchozí konfiguraci
- COLLISION - uživatel zaznamenal kolizi
- EXIT_PROGRAM - ukončí program (zobrazí se dotaz "opravdu...")
- CUE_INTERPOSITION, CUE_PROJECTION, CUE_SHADING - přepnou příslušné vodítko
- PAUSE - pozastaví animaci objektů

Poslední částí definice uživatelského rozhraní je tag bindings obsahující vnořené tagy bind, které svazují klávesu danou v atributu key s příkazem v atributu command(k dispozici jsou stejné příkazy jako při definici tlačítka) . Stisknutím této klávesy se pak příslušný příkaz spustí.