Příklady užití Hypothesis                                                 15. 5. 2015 © Tilioteo Ltd  1  1. Úvod Dokument popisuje na příkladech scén využitelnost platformy Hypothesis  Jednotlivé šablony obsahují společné prvky, které jsou zdokumentovány v obecném manuálu                    k platformě Hypothesis. Tento manuál se soustředí na praktické použití dostupných prvků a                        jejich sestav či jejich vzájemnou provázanost. Některé příklady obsahují původní algoritmy                      vytvořené pro dosažení komplexnějšího chování a interakce s uživatelem. Nejedná se tedy o                        jediné možné řešení, ale o jeden ze způsobů, jak docílit požadované funkcionality v rámci slidy.  Detailní popis šablony a obsahu každého příkladu se věnuje tomu, co je v nich nové a nebylo                                popsáno v rámci jiných příkladů.      2    2. Načtení sady obrázků do mezipaměti s jejich postupným zobrazováním, použití masky 2.1. Šablona slidy definuje základní strukturu komponent a naprogramovanou funkční logiku                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        3                                                                                                                                                                                                        ​map​­>unmask()                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              4                                                                                ​map​­>mask()        ​tilesCount​=​seqLayer​­>getTilesCount()                    ​key​=1                            ​key​=2                            ​key​=3                            ​key​=4                                                                                                                                                                                                                                                  5                                                                                                                                                                  Navigator­>next()                    ​result​=​rightCount​/​tilesCount​                    ​okMarker​­>setHidden(true)        ​failMarker​­>setHidden(true)                    ​keysDisabled​=true                    ​keysDisabled​=false                    ​okMarker​­>setHidden(false)                            ​failMarker​­>setHidden(false)                            ​markerTimer​­>start()                            ​index​=​seqLayer​­>getTileIndex()        ​answerKey​=​answerKeys​­>get(​index​)                              !​keysDisabled​                                                ​answerKey​==​key​                6                  ​rightCount​=​rightCount​+1                                                                                                                                              ​index​<;​tilesCount​­1                      ​seqLayer​­>nextTile()                                                                                  ​result​        2.2. Obsah slidy definuje jednotlivé obrázky a k nim přiřazené kódy tlačítek se správnou odpovědí                                                                                                                                                                                                    7                                    2.3. Popis funkcionality Pro vytvoření požadované funkcionality je použita mapová komponenta (​Map​), která má vloženy                        dvě vrstvy. První (podkladová) je ​ImageSequenceLayer ­ a nad ní je umístěna                        FeatureLayer​. ​ImageSequenceLayer slouží k načtení a zobrazování požadovaných              obrázků, ​FeatureLayer​ umožňuje vytvářet a zobrazovat vektorové objekty.  Při ​inicializaci slidy dojde k zamaskování mapové komponenty a spustí se načítání všech                        definovaných obrázků. Ve chvíli, kdy jsou ​všechny obrázky připraveny​, je komponenta                      odmaskována a zobrazí se první v pořadí určený obrázek.    Zobrazení prvního (dalšího) obrázku vyvolá akci ​tile_change*, ve které se aktivují klávesy,                          do proměnné ​tilesCountje načten počet obrázků a do proměnné ​answerKeyje přiřazena                          hodnota prvního (dalšího) prvku pole ​answerKeys​.  Slide nyní očekává stisknutí jedné z definovaných kláves. V šabloně jsou použity reakce na                        klávesy “​šipka vlevo​”, “​šipka vpravo​”, “​šipka nahoru​” a “​šipka dolů​”. Po stisku klávesy je uložen                              předem určený kód a přechází se na akci ​key_press​.  V akci ​key_pressse zjišťuje stav proměnné ​keysDisabled​, která v případě hodnoty ​true                      (klávesy deaktivovány) neprovede nic. Pokud jsou klávesy aktivní, dojde následně k jejich                      deaktivaci a vyhodnocuje se kód klávesy uložený v proměnné ​keypři jejím stisku oproti kódu                            uloženém v proměnné ​answerKey​.  Pokud byla stisknuta správná klávesa, inkrementuje se počet správných odpovědí v proměnné                      rightCount a volá se akce ​show_ok_marker pro zobrazení značky správné odpovědi.                      V případě stisku špatné klávesy se volá akce ​show_fail_marker pro zobrazení značky                      špatné odpovědi.  V obou případech dojde ke spuštění čítače ​markerTimers přednastaveným intervalem 1500                    ms. ​Po odpočtu je volána akce ​next_tile​, která skryje zobrazenou značku a zjišťuje, zda je                              aktuální obrázek poslední v pořadí.  V případě posledního obrázku je spočítán výsledek (poměr správných odpovědí) a volána akce                        nextSlide​, která ukončí zpracování aktuální slide. V opačném případě je ve vrstvě                      ImageSequenceLayer zobrazen další obrázek v pořadí. Změna obrázku opět vyvolá akci                    tile_change​ a zpracování přejde do stavu jako po prvním obrázku ​(*)​.        8  3. Výběr linie z existujících linií ve vizuálním poli 3.1. Šablona slidy                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       9                                                                                                                      ​                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                10                                                                                                                                                                                                                                                                                                                                                                      Navigator­>next()                    result=1                            result=2                            result=3                            result        3.2. Obsah slidy                                                       11                                                                                                                                                                                                    3.3. Popis funkcionality V šabloně slidy jsou definovány vektorové objekty (Feature) s identifikátory ​path1​, ​path2a                      path3s obsluhou události ​Click​. Objekty mají rovněž nastaven klidový vizuální styl a vizuální                          styl při přejetí kurzorem myši (vlastnosti ​Style a ​HoverStyle​). V obsahu slidy jsou                        jednotlivým objektům přiřazeny geometrie (zde typu ​LINESTRING​). Kliknutí na vektorové                    objekty zavolá příslušnou akci, která nastaví do výstupní proměnné slidy danou hodnotu, kterou                          lze následně vyhodnotit při zpracování výsledků.        12  4. Zákres polygonu, ukončení dvojklikem 4.1. Šablona slidy                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       13                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                14                              Navigator­>next()                    ​poly​­>activate()                    bufferCounter=bufferCounter+1                    clickCounter=clickCounter+1                    bufferCounter >;= (0.8*clickCounter)          result=1                                                                result        4.2. Obsah slidy                                                                                                                                                         15                      4.3. Popis funkcionality Mapová komponenta obsahuje sekci ​Controls​, ve které se nachází nástroj ​DrawPolygon​.                      Vlastnost ​FinishStrategy nastavuje způsob ukončení zadávaného polygonu. Výchozím                nastavením je ​AltClickpro ukončení kliknutím s přidrženou klávesou Alt. V příkladu je však                            použit ​DoubleClick​, kterým se ukončuje zadávání polygonu (poslední bod) dvojitým                    kliknutím. Aby bylo možné polygon zadávat, musí být ovládací prvek aktivován, což se                          v příkladu provede při zobrazení slidy nastavenou obsluhou události ​Show​. Dokončený polygon                      získává vizuální styl definovaný pro vektorovou vrstvu, se kterou je spjat.        16  5. Zákres více typů polygonů 5.1. Šablona slidy                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       17                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    18                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            19                                                                                                                                                                                                                                                                                                                            Navigator­>next()                    ​polyA​­>activate()                    ​polyA​­>deactivate()                    ​polyB​­>activate()                    ​polyB​­>deactivate()                    vysledek        5.2. Obsah slidy                                             20                                                                                            5.3. Popis funkcionality Tento slide definuje v šabloně dva mapové nástroje ​DrawPolygon (id ​draw_polyA​,                    draw_polyB​). Nástroje jsou ve výchozím stavu neaktivní a pro jejich aktivaci jsou použita                          tlačítka “​Zákres polygonu typ 1​” a “​Zákres polygonu typ 2​”, přičemž každé tlačítko pomocí                            obsluhy události ​Clickaktivuje jeden z nástrojů. K deaktivaci právě aktivního nástroje dojde po                        dokončení zadávání polygonu, o což se stará akce ​deactivatePolyA (či                    deactivatePolyB​) volaná v obsluze události ​Draw​ každého nástroje.  Nástroje mají definovanou vlastnost ​FeatureStyle​, která určuje vizuální styl vektorového                    objektu vytvořeného tímto nástrojem bez ohledu na vizuální styl nastavený pro danou                        vektorovou vrstvu. Takto je mimo jiné možné vizuálně odlišit objekty zadané různými nástroji                          stejného typu.        21  6. Dotazníkové šetření, označení více polí 6.1. Šablona slidy                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         22                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  23                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      Navigator­>next()              6.2. Obsah slidy                                                                                                                                                                 Musí být vybrána jedna z odpovědí              24                                                                                                                      Musí být vybrána jedna z odpovědí                                                                                                                                  Musí být vybrána jedna z odpovědí                                                                                                                                                                                                                    6.3. Popis funkcionality Dotazník je tvořen komponentami ​SelectPanel​, kterým se nastavením ​Captionsurčí počet                      a popisky jednotlivých výběrových prvků. ​SelectPanel ve výchozím nastavení umožňuje                    výběr právě jedné položky (radio button), ale nastavením vlastnosti ​MultiSelectna hodnotu                        25  truebudou položky tvořeny zaškrtávacím políčkem (check box) a vybráno tak lze mít více                            položek najednou. Komponenta generuje událost ​Clicka index stisknutého prvku získáme                      v rámci obsluhy události z proměnné ​ComponentData­>getButtonIndex() (pořadí je              číslováno od 1).  SelectPanelmůže mít dále nastavenou kontrolu vybrané (alespoň jedné) položky pomocí                      validátoru ​Empty​ (viz obsah slidy).        26  7. Spouštění testů na platformě Hypothesis 7.1. Způsoby spouštění Spuštění testu se provádí tak, že v okně s přehledem dostupných testových baterií (položka                        Veřejné nebo ​Moje balíčky​), se po nastavení kurzoru nad panel zobrazí ovládací panel                          s popisem a tlačítky. Popisek upřesňuje, který ze způsobů spuštění testu je pro danou baterii                            dostupný. Přehled testových baterií se po přihlášení uživatele nebo pokračování jako host                        nachází na adrese ​http://​​:8080/hypothesis/​.  Dostupné způsoby spuštění testu pro danou baterii nastavuje manager. V případě, že je                        povolen jen rozšířený režim spuštění testu a není instalováno běhové prostředí Java, potom se                            místo tlačítek zobrazí informace, že test nelze spustit.    1. Tlačítkem ​rozšířený režim testu dojde ke spuštění testu v okně speciálního browseru,                      které je roztaženo na celou obrazovku. Pro správnou funkčnost je třeba mít                        nainstalované běhové prostředí Java.    2. Tlačítkem ​základní režim testu dojde ke spuštění testu v novém vyskakovacím (pop­up)                      okně browseru.  Po startu testu přechází otevřené okno do režimu zobrazení na celou obrazovku                        (fullscreen). Zde je potřeba v browseru povolit tento režim pro danou adresu. Režim celé                          obrazovky lze kdykoliv ukončit stiskem klávesy “Esc”.    3. Poslední variantou je výběr právě jedné konkrétní testové baterie pro spuštění v jednom                        z předchozích režimů. Tento způsob umožňuje spuštění testů na bateriích, které nejsou                      zveřejněny v seznamu dostupných baterií, popřípadě chceme­li uživatele snadno navést                  ke konkrétní testové baterii prostřednictvím jednoznačného odkazu. Abychom takto                  zobrazili testovou baterii, musíme znát její databázové id. Složením slova ​hypothesis a                        id testové baterie vznikne klíčové slovo, které je třeba zakódovat algoritmem MD5 na                          hash.  Příklad: uvažujeme testovou baterii s databázovým id 6.  Sestavíme klíčové slovo ​hypothesis6 a provedeme zakódování. K tomu lze využít                    on­line služby, např. ​http://www.md5.cz/​. Výsledný hash, v tomto případě                1b1a9b6c94da806aca9398c45209193d​, použijeme jako parametr v url adrese:    http://​​:8080/hypothesis/?pid=1b1a9b6c94da806aca9398c45209193d    7.2. Souhrn vlastností jednotlivých variant 1. Výběr z dostupných testových baterií, ​rozšířený​ režim (SWT browser)  url: ​http://​​:8080/hypothesis/  způsob: ​stisk tlačítka “rozšířený”  výhody: ​kontrolované podmínky provádění testu  27  nevýhody: ​potřeba nainstalovaného běhového prostředí Java  poznámka: ​SWT browser vždy používá pro běh testu jádro systémového browseru  bez ohledu na to, v jakém typu browseru byl test spuštěn ­ na platformě Windows  se jedná o Internet Explorer    2. Výběr z dostupných testových baterií, nové pop­up okno  url: ​http://​​:8080/hypothesis/  způsob: ​stisk tlačítka “základní”  výhody: ​netřeba Java  nevýhody: ​lze manipulovat s oknem, ve kterém běží test, browser může být zavřen  a test přerušen  poznámka: ​test se provádi ve stejném druhu browseru, ze kterého byl spuštěn    3. Přímý odkaz na jednu testovou baterii, rozšířený nebo základní režim  url: ​http://​​:8080/hypothesis/?pid=​  způsob: ​dle varianty 1 nebo 2  výhody: ​přímé odkázání na jednu konkrétní testovou baterii  nevýhody: ​potřeba znalosti databázového id baterie        28    8. Generování čísla v zadaném rozsahu, konverze řetězce na číslo 8.1. Šablona slidy                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               29                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  Musí být vyplněno.                                                                                            Musí být celé číslo.                                                                                                                                                            Musí být mezi 1 a 50.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      30                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              31                                                                                                                                                        Navigator­>next()                              ​pupilCount​­>isValid()                      ​str​=​pupilCount​­>getValue()            ​count​=​convert​­>stringToInt(​str​)            ​number​=​generator​­>getInteger(​count​)            ​number​=​number​+1            ​genNum​­>setValue(​number​)            ​nextButton​­>setEnabled(true)                                ​nextButton​­>setEnabled(false)                                8.2. Obsah slidy                                                                                                                   32                                                                                                                                              8.3. Popis funkcionality Generátor náhodného čísla je dodán prostřednictvím instance funkčního objektu třídy                    com.tilioteo.hypothesis.core.RandomGenerator​. Instance je vytvořena při          inicializaci proměnné ​generator​. Stejným způsobem je také použita třída pro konverzi                      datových typů ​com.tilioteo.hypothesis.core.Convertor​, jejíž instance je vytvořena              s proměnnou ​convert​.  Slide vyžaduje zadání celočíselné hodnoty do textového pole ​pupil_countuvedeného textem                      “Interval generování”. Pole má nastaveny validátory, které vyžadují zadání celého čísla                      v rozsahu <1, 50>. Stiskem tlačítka “​Generovat​” dojde k provedení akce ​generate​.  V této akci se nejprve vyhodnotí platnost zadaného čísla a pokud není zadání správné, bude                            deaktivováno tlačítko “​Další​”. V opačném případě se načte aktuální řetězec z pole                    pupil_countpomocí referencované proměnné ​pupilCountdo proměnné ​str​. Řetězec je                    zkonvertován na celé číslo pomocí metody ​stringToInt()objektové proměnné ​converta                      přiřazen do proměnné ​count​. Číslo v proměnné ​count slouží jako vstup metody                      getInteger() volané na objektové proměnné ​generator​. Metoda vrací náhodné číslo                    v intervalu <0, count­1>, které je předáno do proměnné ​number​. Následně je přičtena 1, aby se                              srovnal rozsah generovaného čísla se vstupním intervalem. Výsledné číslo je předáno do pole                          gen_num prostřednictvím referencované proměnné ​genNum a metody ​setValue()​.                V posledním kroku je aktivováno tlačítko “​Další​”.        33  9. Struktura exportu Exportovat data může přihlášený uživatel s rolí MANAGER nebo SUPERUSER, vždy však jen u                            těch testů a balíčků, které náleží skupině, jejímž je členem. Data jsou stažena ve formě                              tabulkového souboru xlsx. Jeden řádek představuje jednu událost, ke které během vykonávání                        testu došlo.   9.1. Popis exportovaných sloupců 9.1.1. Mandatorní sloupce Následující sloupce jsou v exportu přítomné vždy a to v pevném pořadí zleva.    test_id  id realizace testu, neměnné u všech událostí v rámci jednoho testu  date  datum a čas (serverový) události  user_id  id (číslo) přihlášeného uživatele, který test vykonal, v případě                  nepřihlášeného hosta bude prázdné, neměnné u všech událostí                v rámci jednoho testu  event_id  id (číslo) události, unikátní v rámci systému  pack_id  id (číslo) testové baterie na které byl test realizován  pack_name  název testové baterie  branch_id  id (číslo) větve (branche) v testové baterii, u některých systémových                    událostí může být prázdné  branch_name  textová poznámka větve, doplňuje id větve  task_id  id (číslo) úlohy (tasku) v testové baterii, u některých systémových                  událostí může být prázdné  task_name  textová poznámka úlohy, doplňuje id úlohy  slide_id  id (číslo) slidy v testové baterii, u některých systémových událostí                  může být prázdné  slide_name  textová poznámka slidy, doplňuje id slidy  branch_order_pack  absolutní pořadí větve v rámci realizace testu  branch_order  relativní pořadí (počet průchodů) větví s daným branch_id  task_order_pack  absolutní pořadí úlohy v rámci realizace testu  slide_order_task  pořadí slidy v rámci úlohy  34  slide_order  relativní pořadí (počet průchodů) slidou s daným slide_id v rámci                    tasku  event_timestamp  relativní čas události v ms vztažený k času startu testu  event_time_diff  rozdílový čas v ms vztažený k času předchozí události  client_timestamp  časové razítko klienta při vzniku události (pouze u některých událostí)  event_type  id (číslo) typu události  event_name  id (text) typu události  event_data  textový výpis všech informací o události v XML formátu  output_value1  první volitelná výstupní hodnota ze slidy  output_value2  druhá volitelná výstupní hodnota ze slidy  output_value3  třetí volitelná výstupní hodnota ze slidy  output_value4  čtvrtá volitelná výstupní hodnota ze slidy  output_value5  pátá volitelná výstupní hodnota ze slidy  output_value6  šestá volitelná výstupní hodnota ze slidy  output_value7  sedmá volitelná výstupní hodnota ze slidy  output_value8  osmá volitelná výstupní hodnota ze slidy  output_value9  devátá volitelná výstupní hodnota ze slidy  output_value10  desátá volitelná výstupní hodnota ze slidy    Volitelné výstupní proměnné (​output_value1 až ​output_value10​) se uplatňují jen u                    událostí typu ​ACTION​ a ​FINISH_SLIDE​.  V rámci pokračujícího vývoje softwaru došlo k optimalizaci databázových tabulek a v exportu se                      proto již nevyskytuje sloupec ​slide_output​, jehož funkci plní některý ze sloupců                      output_valueX(nejčastěji 1. v pořadí) a sloupec ​slide_data​, jehož funkci plní obsahově                      shodný sloupec ​event_data​.    9.1.2. Občasné sloupce Přítomnost těchto sloupců v exportu je závislá na definici jednotlivých slidů, které jsou zahrnuty                          v exportovaném souboru. Jedná se o sloupce generované z XML obsahu sloupce ​event_data                      událostí typu ​FINISH_SLIDE​. Název je dán identifikátorem komponent typu ​TextField​,                    ComboBox​, ​SelectPanelapod. Pořadí občasných sloupců je dáno jejich prvním výskytem                      35  v exportovaném souboru a nelze ho předem stanovit. Hodnoty z komponent se stejným                      identifikátorem napříč všechny slidy v exportu jsou ukládány do stejného sloupce.        36  10. Identifikace stavových proměnných v exportu v případě využití CAT 10.1. CAT na úrovni slidy Adaptivní funkce ve slidu jsou zabezpečovány větvením pomocí konstrukcí ​IF­THEN­ELSEa                      SWITCH­CASE​. Pro přehlednost algoritmů implementovaných v rámci XML definice slidy je                      doporučeno využívat pro každou větev volání předdefinovaných subrutin ​ACTION​. Tyto                    umožňují před začátkem svého vykonávání uložit libovolná data do výstupních proměnných                      OutputValue1 až ​OutputValue10​, které jsou následně v exportu přepsány do sloupců                      output_value1​ a ​output_value10​.     10.1.1. Příklad Předpokládejme, že máme definovány proměnné ​pocetCelkem​, ​pocetSpravne​,              pocetSpatneceločíselného typu a při volání akce ​vyberexistují hodnoty proměnných ​neco                        a ​spravne​.        ...                  pocetCelkem=pocetCelkem+1                    neco==spravne                                                                                pocetSpravne=pocetSpravne+1            ...      ...                      pocetSpatne=pocetSpatne+1            ...      ...        ...    37  Při každém volání akce ​vyber je inkrementována hodnota proměnné ​pocetCelkem a                      výsledek uložen do výstupní proměnné ​OutputValue2​. Dle výsledku vyhodnocení výrazu                    neco==spravne je následně volána akce ​spravnyVyber nebo ​spatnyVyber​. Každá                  z těchto akcí si inkrementuje svoji vlastní proměnou ​pocetSpravne či ​pocetSpatne a                      rovněž výsledek uloží do výstupní proměnné ​OutputValue2​.  Tímto způsobem lze zaznamenat stav při větvení v rámci slidy.    10.2. CAT na úrovni úloh (task) Do exportu testů byl zařazen sloupec ​slide_order​, který uchovává počet opakování slidů se                          stejným id v rámci jedné úlohy.    10.3. CAT na úrovni větví (branch) Do exportu testů byl zařazen sloupec ​branch_order​, který uchovává pořadí průchodu větví                        se stejným id v rámci jedné testové realizace. Z informací uložených v exportovaných sloupcích                      branch_id​, ​branch_order_packa ​branch_orderlze jednoznačně identifikovat stav při                  větvení pomocí branche i v případě cirkularit.          38  11. Ukončení zadávání lomené linie a polygonu, stylování   Varianty pro ukončení zadávání lomené linie a polygonu jsou nyní dvě. Tvůrce slidy je může                              zvolit pomocí vlastnosti ​FinishStrategy​ v definici nástroje ​DrawPath​ nebo ​DrawPolygon​.    a. Základní a výchozí nastavení je strategie ​AltClick​. Zadávání lomené linie je ukončeno                        kliknutím myši do prostoru mapové komponenty za současného přidržení klávesy “Alt”.                      Posledním vrcholem lomené linie je místo, ve kterém došlo k ukončení zadávání.  Lomenou linii lze ukončit také jejím uzavřením. Toho lze docílit kliknutím myši v okolí                          počátečního bodu zadávané lomené linie se současným přidržením klávesy “Shift” (“⇧”).                      Rozhodné okolí počátečního bodu je zvýrazněno kružnicí kolem tohoto bodu. Poloměr                      okolí může být nastaven změnou stylu (viz dále).  Zadávání polygonu je znázorněno rovněž lomenou linií a ukončení jeho zadávání se                        provádí stejným způsobem. Rozdíl je pouze v tom, že vždy dojde k uzavření lomené                        linie, a to pouze při zadání 3 a více bodů. Uzavřít polygon lze při této strategii dvěma                                  způsoby. Při použití klávesy “Alt” je vytvořen nový vrchol v místě kliknutí a od tohoto                            vrcholu je dokončeno uzavření linie ­ polygonu. Za použití klávesy “Shift” v okolí prvního                          bodu se další vrchol nevytvoří a dojde k uzavření od předchozího zadaného vrcholu.  b. Novým nastavením je strategie ​DoubleClick​. Zadávání lomené linie je vždy ukončeno                      dvojitým kliknutím tlačítka myši v prostoru mapové komponenty. Posledním vrcholem                  lomené linie je místo, ve kterém došlo ke dvojkliku.  Lomená linie může být také ukončena jejím uzavřením, a to provedením dvojkliku myši                          v okolí počátečního bodu zadávané lomené linie se současným přidržením klávesy                    “Shift”.  Zadávání polygonu lze opět ukončit dvěma způsoby, při kterých dojde automaticky                      k uzavření linie za předpokladu splnění podmínek pro polygon. První způsob je                      dvojklikem v prostoru mapové komponenty, při kterém dojde k vytvoření nového vrcholu                    a dokončení uzavření polygonu. Za použití klávesy “Shift” a dvojkliku v okolí prvního                        bodu se další vrchol nevytvoří a dojde k uzavření od předchozího zadaného vrcholu.    Příklad:  Nastavení strategie ​DoubleClick​ pro zadávání lomené linie:      …                                      ​                          ...                    ...  39          V rámci mapové komponenty lze nastavovat různé styly pro vektorové objekty. ​Style je                        definován jako samostatná datová struktura s několika položkami.        ...                                                                      ...          Přehled atributů pro definování stylů:  Název  Typ  Výchozí  hodnota  Platné hodnoty  Popis  StrokeColor  řetězec  black  CSS barvy  Barva čáry, ohraničení; barvy můžou být zadány jménem dle  CSS, nebo jako hex hodnota #000000 ­ #ffffff  (http://www.w3schools.com/cssref/css_colorsfull.asp)  StrokeWidth  celé číslo  1  >= 0  Tloušťka čáry, ohraničení; 0 = bez ohraničení  StrokeOpacity  číslo  1,0  0,0 ­ 1,0  Průhlednost čáry, ohraničení; 1 ­ úplně neprůhledná  FillColor  řetězec  white  CSS barvy  Barva výplně plošných objektů  FillOpacity  číslo  1,0  0,0 ­ 1,0  Průhlednost výplně plošných objektů  TextColor  řetězec  black  CSS barvy  Barva písma  TextStrokeColor  řetězec    CSS barvy  Barva ohraničení písma  TextStrokeWidth  celé číslo  0  >= 0  Tloušťka ohraničení písma  TextOpacity  číslo  1,0  0,0 ­ 1,0  Průhlednost písma  TextFillOpacity  číslo  1,0  0,0 ­ 1,0  Průhlednost výplně písma  FontFamily  řetězec  Arial  systémové fonty  Druh fontu písma; může se lišit v závislosti na systému  FontSize  celé číslo  20  > 0  Velikost písma  PointRadius  celé číslo  5  >= 0  Poloměr kruhu, který prezentuje bod; pouze ve spojení s  tvarem Circle; 0 = žádný bod  PointShape  řetězec  Circle  Circle, Square,  Cross, XCross,  Asterisk,  Tvar bodu; ○, □, +, ×, ✳, △, ▽, ◇  40  TriangleUp,  TriangleDown,  Diamond  PointShapeScale  číslo  5,0  > 0,0  Měřítko tvaru    Styl lze přiřadit vektorové vrstvě i jednotlivým vektorovým objektům. Styly jsou základní nebo                          zvýrazňovací. Dále je možno pomocí stylu přiřazeného nástrojům pro zadávání bodu, lomené                        linie a polygonu změnit vzhled zadávaného objektu a styl zvýraznění kurzoru myši při                          aktivovaném nástroji.     Příklad:  Nastavení stylu vektorové vrstvy      ...                            ​          ​          ...                        Příklad:  Nastavení stylu vektorového objektu      ...                                                ...                                                    ​              ​              ...                                                          41  Vlastnost ​Style definuje základní styl, zatímco vlastnost ​HoverStyle definuje přechodný styl                      objektu, nad kterým se nachází kurzor myši. Hodnota ​Value představuje id stylu definovaného                          v mapové komponentě.  Všechny vektorové objekty, které jsou umístěné ve vektorové vrstvě a nemají definovány své                          vlastní styly, přejímají tyto z vektorové vrstvy.    Příklad:  Nastavení stylu zvýraznění kurzoru při aktivovaném nástroji pro zadávání vektorového objektu      ...                                      ​          ...                        Pro nastavení stylu kurzoru jsou relevantní jen atributy ​StrokeColor​, ​StrokeWidth​,                    StrokeOpacity​, ​FillColor​, ​FillOpacity a ​PointRadius​. Kurzor se vždy vykresluje jako kruh, při                        nastavení ​PointRadius​ na hodnotu 0 nebude tento kruh zobrazen.    Výchozí styl zobrazení kurzoru vychází z výchozích hodnot atributů a má přepsány následující                        hodnoty atributů:  Název  Hodnota  StrokeColor  blue  FillColor  cyan  FillOpacity  0,3    Příklad:  Nastavení stylů zadávané lomené linie (polygonu)      ...                                                ​          ​          ​          ...                    42      Vlastnost ​StartPointStyle určuje styl zobrazení počátečního bodu zadávané lomené linie                    (polygonu). Relevantní jsou atributy stylu ​StrokeColor​, ​StrokeWidth​, ​StrokeOpacity​,                FillColor​, ​FillOpacity a ​PointRadius​. Nastavení hodnoty ​PointRadius zde má také význam pro                        definování ​poloměru okolí pro funkci uzavření lomené linie​.    Výchozí styl zobrazení počátečního bodu lomené linie má přepsány následující atributy:  Název  Hodnota  FillColor  cyan  FillOpacity  0,3      Vlastnost ​LineStyle určuje styl zobrazení spojnice zadávané lomené linie. Relevantní jsou                      atributy ​StrokeColor​, ​StrokeWidth​ a ​StrokeOpacity​.    Výchozí styl zobrazení spojnice lomené linie má přepsány následující atributy:  Název  Hodnota  StrokeColor  cyan  FillOpacity  0      Vlastnost ​VertexStyle určuje styl zobrazení vrcholů zadávané lomené linie (polygonu).                    Relevantní jsou atributy stylu ​StrokeColor​, ​StrokeWidth​, ​StrokeOpacity​, ​FillColor​,                FillOpacity a ​PointRadius​. Nastavením atributu ​PointRadius na hodnotu 0 nebudou vrcholy                      zvýrazněny.    Výchozí styl zobrazení vrcholů lomené linie má přepsány následující atributy:  Název  Hodnota  StrokeColor  blue  FillOpacity  0  PointRadius  2      43