Programování pro PalmOS počítače krok za krokem (59)

Dnes si do naší aplikace zařadíme kompletní obsluhu menu a drobným domácím úkolem ukončíme čtvrtou kapitolu.

4.30 Obsluha menu v naší aplikaci

V minulém dílu jsme si napsali funkci, která ošetřila položky menu na kartě Editace. Zbývá jen začlenit ji do aplikace. V každé funkci formuláře musíme zpracovat všechny příkazy uživatelské nabídky, která je s formulářem spojena. Navrhovaný způsob samozřejmě není jediný možný, ale pro uživatele je nejpřehlednější. Příklad zapojení funkce FunkceMenuKartyEditace() do jedné funkce formuláře je v tabulce:

static Boolean UdalostVystupnihoFormulare(EventPtr udalost)
{
    Boolean zpracovano = false;
    Int16 rozdil;

    switch(udalost->eType)
    {

    ...

        case menuEvent:

            zpracovano = FunkceMenuKartyEditace(udalost->data.menu.itemID);

            if(!zpracovano)
            {
                    // Byla zvolena polozka menu, ale neslo 
                    // o polozku na karte "Editace"

                switch(udalost->data.menu.itemID)
                {
                    case PolozkaMenuOProgramu:

                            // Po zvoleni prislusne polozky menu zavolame
                            // funkci napovedy

                        FrmHelp(TextOProgramu);
                        zpracovano = true;
                        break;

                    default:
                        break;
                }
            }
            break;

    ...

    }

    return zpracovano;
}

V každé funkci formuláře, ve které se vyskytuje karta Editace (a to i neúplná), nejprve vyhodnotíme, zda uživatel nezvolil některý z příkazů na této kartě. Pokud naše aplikace obsahuje více společných karet uživatelské nabídky, provedeme jejich vyhodnocení a pak teprve budeme zpracovávat ty příkazy menu, které jsou v každém formuláři jiné.

Druhý způsob zpracování společných položek v menu je umístění funkce FunkceMenuKartyEditace() přímo do smyčky zpracování událostí. Tento způsob je jednodušší, ale není natolik názorný jako explicitní volání funkce FunkceMenuKartyEditace() v každé funkci formuláře, ve které je potřeba.

static Boolean UdalostZpracovanaAplikaci(EventPtr udalost)
{
    Boolean zpracovano = false;
    UInt16 cisloFormulare;
    FormPtr formular;

    if(udalost->eType == frmLoadEvent)
    {
        ...
    }
    else if(udalost->eType == menuEvent)
    {
        zpracovano = FunkceMenuKartyEditace(udalost->data.menu.itemID);
    }

    return zpracovano;
}

Doplněním obsluhy menu je naše jednoduchá šifrovací aplikace ukončena. Zdrojový text poslední verze aplikace si můžete stáhnout zde.

31. Uložení stavu programu jako domácí úkol

Zbývá doplnit šifrovací program o poslední důležitou vlastnost: uložení stavu programu tak, aby měl uživatel pocit multitaskingu. V předchozí kapitole jsme si uvedli funkce PrefGetAppPreferences() a PrefSetAppPreferences() pro čtení a zapisování stavu programu. V první části domácího úkolu doplňte aplikaci o uložení a čtení stavu programu. Nápověda:

  1. přesuňte všechny globální proměnné do jedné struktury
  2. definujte v zdrojovém textu konstanty tvůrce aplikace a verze stavu programu
  3. doplňte do funkce ZacatekAplikace() kód pro přečtení stavu programu; nezapomeňte na všechny kontroly správnosti dat
  4. pokud nebyl přečten stav programu, je potřeba inicializovat globální proměnné
  5. doplňte do funkce KonecAplikace() kód pro uložení stavu programu

Doplníme-li do naší aplikace předchozích pět bodů, bude mít uživatel při přepínání aplikací pocit multitaskingu. Práce s počítačem Palm Pilot se tím ještě více přiblíží režimu, na který je uživatel zvyklý.


Tak skončila čtvrtá kapitola. V kapitole páté si povíme jednak o seznamech, které jsou velmi silným nástrojem pro uživatelský vstup, a jednak se naučíme ovládat černobílý grafický výstup na displej Palm Pilota. Ke kreslení se pak vrátíme ještě v sedmé kapitole, kdy si povíme o pokročilých prvcích grafiky a barvách. Zatím budeme postupně vytvářet jednoduchý černobílý kreslicí program.