home *** CD-ROM | disk | FTP | other *** search
- /*----- demo06.cpp
-
- sujets :
-
- - ajout d'un bloc de caractères
- - ajout d'une zone statique
- - surcharge du membre on_goto()
-
- */
-
- /*-----
- définitions
- */
- #include "xe.h" /* gestionnaire d'événements */
- #include "xk.h" /* constantes clavier */
- #include "xo.h" /* définitions des objets */
- #include "xw.h" /* gestionnaire de fenêtres */
-
- /*-----
- classe de fenêtre MyWin
-
- Constructeur de MyWin :
-
- - titre str.
-
- Destructeur de MyWin :
-
- - aucun destructeur spécifique.
-
- Définition de MyWin :
-
- - largeur de 60 colonnes,
- - hauteur de 15 lignes,
- - fenêtre standard (cadre, titre, ombre, déplaçable, modale).
-
- Membre on_call() :
-
- - il est déclenché lorsqu'un objet est appelé pour exécution.
-
- - en paramètre, on_call() apporte l'adresse de l'objet courant
- demandant cette exécution.
-
- Membre on_char() :
-
- - il est déclenché pour tout caractère non reconnu par la fenêtre
- ou ses objets.
-
- - en paramètre, on_char() apporte le code du caractère saisi.
-
- Membre on_goto() :
-
- - il est déclenché à chaque arrivée sur le nouvel objet courant
- de la fenêtre.
-
- */
-
- class MyWin : public XWin
- {
- protected :
- virtual void on_call (XObj *obj);
- virtual void on_char (int key);
- virtual void on_goto (XObj *obj);
-
- protected :
- XStatic * o_msg;
-
- public :
- MyWin (const char *str);
- };
-
- MyWin::MyWin (const char *str)
- : XWin(60, 15)
- {
- /* associe un titre à la fenêtre
- */
- head(str);
-
- /* ajout du cadre
- identificateur : 1
- style : enfoncé
- */
- link(new XBox(1, 1, 1, 28, 5, 0, 1));
-
- /* ajout du cadre
- identificateur : 2
- style : enfoncé
- */
- link(new XBox(2, 1, 29, 28, 5, 0, 1));
-
- /* ajout du bloc de caractères
- identificateur : 3
- style : normal
- */
- link(new XChar(2, 11, 1, 56, 1, 196, 0));
-
- /* ajout de l'étiquette
- identificateur : 2000
- raccourci clavier : ALT-C
- */
- link(new XLabel(2000, 1, 2, "&Checks:", xk_aC));
-
- /* ajout des cases à cocher 2001, 2002 et 2003
- */
- link(new XCheck(2001, 2, 3, 24, "Check &1", xk_a1));
- link(new XCheck(2002, 3, 3, 24, "Check &2", xk_a2));
- link(new XCheck(2003, 4, 3, 24, "Check &3", xk_a3));
-
- /* ajout de l'étiquette
- identificateur : 3000
- raccourci clavier : aucun
- */
- link(new XLabel(3000, 1, 30, "Radios:", 0));
-
- /* ajout des boutons radio 3001, 3002 et 3003
- */
- link(new XRadio(3001, 2, 31, 24, "Radio &A", xk_aA));
- link(new XRadio(3002, 3, 31, 24, "Radio &B", xk_aB));
- link(new XRadio(3003, 4, 31, 24, "Radio &C", xk_aC));
-
- /* bouton radio 3001 déjà enfoncé
- */
- xo(addr(3001), XRadio)->setv(0);
-
- /* ajout de la zone statique
- identificateur : 9000
- style : aligné à gauche
- */
- o_msg = (XStatic *)link(new XStatic(9000, 12, 1, 56, -1));
-
- /* ajout du bouton poussoir Ok
- identificateur : 1000
- raccourci clavier : ALT-O
- */
- link(new XPush(1000, 7, 45, 10, "&Ok", xk_aO));
-
- /* ajout du bouton poussoir Quitte
- identificateur : 1001
- raccourci clavier : ALT-Q
- */
- link(new XPush(1001, 9, 45, 10, "&Quitte", xk_aQ));
- }
-
- void MyWin::on_call (XObj *obj)
- {
- int typ, idt;
-
- /* récupére le type de l'objet
- */
- typ = obj->type();
-
- /* récupère l'identificateur de l'objet
- */
- idt = obj->id();
-
- /* si exécution d'un bouton poussoir
- */
- if (typ == xo_PUSH)
- {
- /* enfonce le bouton
- */
- xo(obj, XPush)->push(1);
-
- /* ferme la fenêtre
- */
- hide();
- }
- /* si exécution d'une case à cocher
- */
- else if (typ == xo_CHECK)
- {
- /* inverse l'état de la case à cocher
- */
- xo(obj, XCheck)->revv(1);
- }
- /* si exécution d'un bouton radio
- */
- else if (typ == xo_RADIO)
- {
- /* enfonce le bouton
- */
- xo(obj, XRadio)->setv(1);
- }
- /* si exécution d'une étiquette
- */
- else if (typ == xo_LABEL)
- {
- /* si étiquette des cases à cocher
- */
- if (idt == 2000)
- curr(2001);
- /* si étiquette des boutons radio
- */
- else if (idt == 3000)
- curr(3001);
-
- }
-
- }
-
- void MyWin::on_char (int key)
- {
- /* si caractère ESCAPE
- */
- if (key == xk_ESC)
- /* alors ferme la fenêtre
- */
- hide();
-
- }
-
- void MyWin::on_goto (XObj *obj)
- {
- char * str;
-
- /* selon identificateur de l'objet courant
- */
- switch(obj->id())
- {
- case 1000 : /* boutons poussoir */
- str = "XPush Ok";
- break;
-
- case 1001 :
- str = "XPush Quitte";
- break;
-
- case 2001 : /* cases à cocher */
- str = "XCheck 1";
- break;
-
- case 2002 :
- str = "XCheck 2";
- break;
-
- case 2003 :
- str = "XCheck 3";
- break;
-
- case 3001 : /* boutons radio */
- str = "XRadio A";
- break;
-
- case 3002 :
- str = "XRadio B";
- break;
-
- case 3003 :
- str = "XRadio C";
- break;
-
- default :
- str = 0;
- break;
-
- }
-
- if (str != 0)
- o_msg->defs(1, str);
-
- }
-
- /*-----
- app_init() - initialisation de l'application
-
- L'initialisation de l'application passe par :
-
- - l'initialisation globale du gestionnaire de fenêtres,
- - l'affichage du bureau.
-
- */
-
- void app_init (void)
- {
- /* initialise tous les gestionnaires en une seule passe
- */
- xw.full(1);
-
- /* affiche le bureau
- */
- xw.desk();
- }
-
- /*-----
- app_quit() - terminaison de l'application
-
- La terminaison de l'application passe par :
-
- - la terminaison globale du gestionnaire de fenêtres.
-
- */
-
- void app_quit (void)
- {
- /* quitte tous les gestionnaires en une seule passe
- */
- xw.full(0);
- }
-
- /*-----
- app_exec() - exécution de l'application
-
- L'exécution de l'application passe par :
-
- - la création d'une fenêtre de type MyWin,
- - l'ouverture de la fenêtre,
- - la lecture de chaque événement,
- - l'évaluation de l'événement récupéré.
-
- L'exécution prend fin lorsque plus aucune fenêtre ne reste ouverte.
-
- */
-
- void app_exec (void)
- {
- XEvn evn;
- MyWin * win;
-
- /* crée la fenêtre MyWin
- */
- win = new MyWin("MA FENETRE");
-
- /* ouvre la fenêtre créée
- */
- win->topw();
-
- /* boucle de lecture des événements
- */
- while (1)
- {
- /* lit le prochain événement
- */
- xe.next(evn);
-
- /* si aucune fenêtre après évaluation de l'événement récupéré
- */
- if (xw.eval(evn) == 0)
- /* alors quitte la boucle
- */
- break;
-
- }
-
- /* détruit la fenêtre (déjà fermée)
- */
- delete win;
- }
-
- void main (void)
- {
- /* initialisation de l'application
- */
- app_init();
-
- /* exécution de l'application
- */
- app_exec();
-
- /* fin de l'application
- */
- app_quit();
- }
-