4.21. Uživatelská nabídka (menu)
Vlevo dole u plochy pro zápis graffiti je na počítačích Palm Pilot a kompatibilních umístěné tlačítko sloužící k vyvolání uživatelské nabídky. Příklad uživatelské nabídky v programu MemoPad je na obrázku:
Dále budeme pro uživatelskou nabídku používat termín menu, podobně jako v angličtině. Uspořádání menu a jeho definice v souboru prostředků aplikace je podrobně popisováno ve druhé kapitole. Na tomto místě jen připomeneme, že menu je uspořádáno do jednotlivých karet. Každá karta má své jméno a obsahuje seznam příkazů. Vpravo vedle jména příkazu může být uvedena klávesová zkratka. Mezi příkazy menu mohou být vloženy oddělovače, které logicky seskupují příkazy menu patřící k sobě.
Po vyvolání menu na displeji může uživatel vybrat některý z příkazů na jedné z karet menu. Dotkne-li se displeje nebo plochy pro zápis graffiti kdekoliv jinde, PalmOS menu zruší a obnoví zobrazení formuláře.
Definice menu
Menu definujeme v souboru prostředků aplikace. Podrobnosti definice uživatelské nabídky jsou vysvětleny ve druhé kapitole. Příklad definice menu je uveden v následujícím rámečku:
MENU ID MenuHlavni BEGIN PULLDOWN "Program" BEGIN MENUITEM "Tabulka" ID menuPrikazTabulka MENUITEM "O Programu" ID menuPrikazOProgramu END PULLDOWN "Edit" BEGIN MENUITEM "Vyrizni" ID menuPrikazVyrizni "X" MENUITEM "Kopiruj" ID menuPrikazKopiruj "C" MENUITEM "Vloz" ID menuPrikazVloz "P" MENUITEM "Vyber vse" ID menuPrikazVyberVse "P" MENUITEM SEPARATOR MENUITEM "Klavesnice" ID menuPrikazKlavesnice "K" MENUITEM "Graffiti" ID menuPrikazGraffiti "G" END END |
Příkazem MENUID v definici formuláře připojíme k formuláři uživatelskou nabídku. Jedno menu může být použito ve více formulářích. I když jednoznačný identifikátor menu v naší aplikaci nepoužijeme, musíme příslušnou konstantu definovat ve hlavičkovém souboru.
Každý příkaz menu obsahuje svůj identifikátor (za ID). Hodnota identifikátoru je vrácena naší aplikaci, když uživatel zvolí příslušný příkaz menu nebo klávesovou zkratku. Tento identifikátor nemusí být jednoznačný - příkaz "Vyřízni" u všech uživatelských nabídek v programu může mít identifikátor menuPrikazVyrizni.
Menu a zkrácené příkazy
Ke každé položce menu může být přiřazen zkrácený příkaz. Zkrácené příkazy vyvoláme tahem graffiti , za kterým následuje jedno písmeno nebo číslice.
Pro programátora jsou zkrácené příkazy zajímavé hlavně tím, že se jimi nemusí zabývat. Operační systém PalmOS, který řídí zobrazování menu na displeji a reaguje na akce uživatele, zpracuje zkrácený příkaz sám. Pokud uživatel zvolí zkrácený příkaz, je vyvolána událost menuEvent úplně stejně, jako když zvolí příslušný příkaz z uživatelské nabídky. Také to znamená, že nemohou být definovány jiné zkrácené příkazy než ty, které jsou spojeny s příkazy menu.
4.22. Událost menu
Poté, co uživatel zvolí příkaz menu, zašle operační systém naší aplikaci zprávu menuEvent. Zprávu menuEvent budeme většinou zpracovávat ve funkci formuláře, ke kterému je menu připojeno.
menuEvent | |
---|---|
EventType* event; |
|
UInt16 event->data.menu.itemID |
Jednoznačná identifikace položky menu, která byla zvolena. Byl-li zadán zkrácený příkaz, obsahuje tento prvek jednoznačnou identifikaci položky menu, ke které zkrácený příkaz patří. |
Na příkladu zprávy menuEvent si můžeme ukázat, že řada zpráv koluje v operačním systému PalmOS nezávisle na naší aplikaci. Dotkne-li se uživatel tlačítka pro vyvolání uživatelské nabídky, vytvoří PalmOS zprávu keyDownEvent. Parametrem této zprávy je virtuální znak vcharMenu.
Pokud naše aplikace tuto zprávu ignoruje, zpracuje ji operační systém PalmOS v následujícím kole sám. Zobrazí na displeji uživatelskou nabídku. Dotkne-li se uživatel při zobrazení uživatelské nabídky perem displeje, nejsou naší aplikaci zasílány žádné zprávy. Naše aplikace se dozví až to, že byla nějaká položka menu vybrána; v tomto případě zašle operační systém zprávu menuEvent.
Zpráva menuEvent je naší aplikaci zaslána i při volbě zkráceným příkazem. Pokud žádná položka uživatelské nabídky nebyla vybrána, operační systém nezašle naší aplikaci žádnou zprávu - tedy ani ji neinformuje o zrušené volbě.
Příště si povíme něco o tom, jak aplikace zpracovává zprávy zasílané operačním systémem PalmOS při výběru z menu. Navrhneme také a vyzkoušíme uživatelskou nabídku pro naši aplikaci.