dimarts, d’agost 17, 2004

Introducci� al desenvolupament d'aplicacions per a Palm OS (5a part).


Categoria: Programaci�

Gestionant els events.

Per v�ries raons el llenguatge de programaci� C ha esdevingut el m�s
utilizat alhora de desenvolupar aplicacions per Palm OS, per tant
utilitzarem el C per mostrar els mecanismes basics de la gesti� d'events. En propers capitols d'aquesta serie ja presentarem altres alternatives la llenguatge C.

Per altre banda el que veurem a continuaci� �s un exemple de la relativa facilitat amb que gestionem els events i desenvolupem el cor

de la nostra aplicaci�, no obstant per comen�ar a crear una aplicaci�
en C, necessitarem encara algunes coses m�s que veurem en el proper
capitol, on ja ens podrem posar amb la part pr�ctica del
desenvolupament.

Com ja vaig comentar en el capitol anterior: "La
nostra aplicaci� estar� funcionant per� no reaccionar� fins que rebi un
event concret. D'aquesta manera l'aplicaci� est� pendent de quan
l'usuari la comen�a a utilitzar"


Per tal de que aix�
sigui posible, totes les aplicacions Palm OS, han d'utilitzar unes
funcions concretes que s'encarreguen de la tasca d'escoltar events i inicialitzar recursos basics de l'aplicaci�. Aix� siginifica que tindrem sempre un mateix conjunt de funcions que seran el cor de la nostra aplicaci�, i que utilitzarem de la mateixa manera en qualsevol altre aplicaci� que desenvolupem.

Dit d'un altre manera, ens podem crear el que s'anomena un esquelet de codi, que reciclem i adaptem d'una aplicaci� a una altre.

Aquest esquelet,

amb els canvis necessaris, esdevindra el fitxer principal de
l'aplicaci� i �s per tant on habitualment situarem el codi que gestiona
els events.

La principal funci�, �s PilotMain que fa tasques similars a la main() tradicional del C

UInt32 PilotMain(UInt16 launchCode, MemPtr cmdPBP, UInt16 launchFlags)
{
Err err = 0;

if (launchCode == sysAppLaunchCmdNormalLaunch) {
if ((err = StartApplication()) == 0) {
EventLoop();
StopApplication();
}
}

return err;
}

Podem observar que utilitzem tres funcions m�s:

- StartApplication()
Encarregada de gestionar les tasques necesaries en el moment que s'engega l'aplicaci�

- StopApplication()
Encarregada
de gestionar les tasques de quan es tanca l'aplicaci�. Es a dir quan
l'usuari salta a un altre aplicaci� o torna al men� inicial
d'aplicacions del Palm. Per exemple si volem assegurar que abans de
tancar l'aplicaci� es guarden les dades que l'usuari ha estat
utilitzant, en aquesta funci� posariem el codi encarregat de fer-ho.

- EventLoop()
La funci� encarregada directament de la gesti� d'events i per tant la que ens interessa ara.

Podeu
observar que utilitzo noms de les funcions en angles, b� aix� es aixi
per costum i herencia, per� les podem escriure perfectament en catal�.
L'important no �s el nom si no el que fan. El que no podem cambiar �s
el nom de la funci� principal PilotMain.

El codi d'abans podria ser perfectament:

UInt32 PilotMain(UInt16 launchCode, MemPtr cmdPBP, UInt16 launchFlags)
{
Err err = 0;

if (launchCode == sysAppLaunchCmdNormalLaunch) {
if ((err = IniciAplicacio()) == 0) {
GestioEvents();
FinalAplicacio();
}
}

return err;
}

Ens centrem ara en la funci� de gesti� d'events anomenada EventLoop(), en el meu exemple:

static void EventLoop()
{
EventType event;
UInt16 error;
do {
EvtGetEvent(&event, evtWaitForever);

if (!SysHandleEvent(&event)) {
if (!MenuHandleEvent(0, &event, &error)) {
if (!ApplicationEventHandler(&event)) {
FrmDispatchEvent(&event);
}
}
}
}
while (event.eType != appStopEvent);
}

Aquesta funci� utilitza funcions propies de Palm OS com EvtGetEvent i MenuHandleEvent encarregades de rebre el fluxe d'events. De totes elles la que ens interessa ara en concret �s ApplicationEventHandler() que �s la nostra funci� per gestionar nomes els events que ens interessen.

Aquesta funci� tindra l'aspecte seg�ent:

static Boolean ApplicationEventHandler(EventPtr event)
{
Boolean handled = false;

switch (event->eType) {
case frmLoadEvent: {
FormPtr pForm = FrmInitForm(event->data.frmLoad.formID);
FrmSetActiveForm(pForm);
FrmSetEventHandler(pForm, MostraFontsEventHandler);
handled = true;
break;
}

case menuEvent:
switch (event->data.menu.itemID) {

case Tipo0:
CanviFont(stdFont);
break;

case Tipo1:
CanviFont(boldFont);
break;

case Tipo2:
CanviFont(largeFont);
break;

case Tipo7:
CanviFont(largeBoldFont);
break;

case HelpMenuAbout:
FrmAlert(AboutAlert);
break;
}

handled = true;
break;

default:
break;
}

return handled;
}

Hi ha molts tipus d'events per aix� el tractament tamb� �s una mica diferent entre ells. En la nostra funci� ApplicationEventHandler() Podeu observar que s'utilitza l'estructura switch/case propia de C, per bifurcar entre events de men� menuEvent i altres events frmLoadEvent (recordeu que els noms d'events estant definits en el SDK de Palm OS i es poden consultar en els manuals de referencia).

Com tamb� podeu observar en el event menuEvent tornem a utilitzar un switch/case per esbrinar quina opci� de men� ha escollit l'usuari.

Aix�
�s posible fer-ho d'aquesta manera tant senzilla ja que els events a
m�s a m�s de notificar-nos una acci� concreta de l'usuari, sovint tamb�
porten dades de l'acci� realitzada.

En concret el event menuEvent ve acompanyat del identificador de l'opci� del men� escollida. Per accedir-hi utilitzem event->data.menu.itemID dins un switch.

A partir d'aqui ja posem les funcions i codi necessari per tal de que es realitzi una tasca concreta.

En
aquest exemple esteu veient codi de l'aplicacio mostrafonts.prc, on
gestionem un men� de quatre opcions que permet canviar el tipus de
tipografia. Tamb� gestionem el HelpMenuAbout que �s l'identificador de l'opci� de men� que mostra la pantalla de cr�dits de l'aplicaci�.

Quan
l'usuari selecciona una opci� del men� de mostrafonts.prc, Palm OS
envia un event que finalment arriba a aquesta funci� on es determina
que s'ha de fer d'acord a l'opci� escollida per l'usuari.

En el proper capitol aprofundirem una mica m�s en les parts esencials de la funci� ApplicationEventHandler(), i ens preparem ja per desenvolupar de manera pr�ctica, la nostra primera aplicaci� Palm OS.

Seg�ent: Introducci� al desenvolupament d'aplicacions per a Palm OS (6a part).
Anterior: Introducci� al desenvolupament d'aplicacions per a Palm OS (4a part)

4 Comentaris:

Blogger Paco va dir...

Per a quines versions del sistema operatiu i per a quins compiladors serveix aquest exemple?
Per altra banda, suposo que per afer servir funcions en catal�, aquestes funcions s'hauran de definir en algun lloc, si �s aix�, creus que valdria la pena fer una llista de les principals funcions, traduir-les per a tots els programadors catalans, i preparar un arxiu de definicions estandar?

1:46 p. m.  
Blogger Daniel va dir...

Com avan�o en l'article, en el proper capitol veurem com desenvolupar tot aix� ja d'un amanera practica i �s on precisament comentare els temes de versions, compiladors i entorns en que ja ens podem posar a treballar per crear quelcom.

Pel que fa als noms de funcions, podem posar noms propis a unes funcions molt concretes, i aix� sovint �s un tema molt personal de cada programador que no se fins a quin punt valdria la pena fer-ne una llista. No obstant agafant la teva idea si que el que es podria fer �s un esquelet de codi on tant les funcions d'aquest esquelet que es puguin personalitzar com els comentaris, estiguin en catal�

6:13 p. m.  
Blogger Daniel va dir...

Com avan�o en l'article, en el proper capitol desenvoluparem de manera practica aquestes tecniques i sera quan concreterem compilador, versions, ... i ens posarem a desenvolupar una aplicaci� concreta.

Pel que fa al noms de les funcions en catal�, les indispensables que es poden "personalitzar" son molt poques i sovint cada programador te les seves propies "manies" i metodes al respecte, no se fins a quin punt un llistat de funcions en catal� seria practic. No obstant agafant aquesta idea el que si es pot fer �s l'esquelet basic d'una aplicaci� Palm, amb comentaris i funcions en catal� (les que es poden modificar de nom).

8:33 p. m.  
Blogger Daniel va dir...

Com avan�o en l'article, en el proper capitol desenvoluparem de manera practica aquestes tecniques i sera quan concreterem compilador, versions, ... i ens posarem a desenvolupar una aplicaci� concreta.

Pel que fa al noms de les funcions en catal�, les indispensables que es poden "personalitzar" son molt poques i sovint cada programador te les seves propies "manies" i metodes al respecte, no se fins a quin punt un llistat de funcions en catal� seria practic. No obstant agafant aquesta idea el que si es pot fer �s l'esquelet basic d'una aplicaci� Palm, amb comentaris i funcions en catal� (les que es poden modificar de nom).

8:34 p. m.  

Publica un comentari a l'entrada

Nota: Només un membre d'aquest bloc pot publicar entrades.

|

Enllaços cap aquí­:

Crear un enllaç

<< Torna a la Portada