home *** CD-ROM | disk | FTP | other *** search
/ DP Tool Club 18 / CD_ASCQ_18_111294_W.iso / dos / prg / c / x_lib10 / demo04.cpp < prev    next >
C/C++ Source or Header  |  1994-10-18  |  5KB  |  256 lines

  1. /*----- demo04.cpp
  2.  
  3.     sujets :
  4.  
  5.         - ajout d'un cadre
  6.         - ajout de cases à cocher
  7.         - ajout d'une étiquette
  8.         - surcharge du membre on_call()
  9.  
  10. */
  11.  
  12. /*-----
  13.     définitions
  14. */
  15. #include    "xe.h"                /* gestionnaire d'événements    */
  16. #include    "xk.h"                /* constantes clavier            */
  17. #include    "xo.h"                /* définitions des objets        */
  18. #include    "xw.h"                /* gestionnaire de fenêtres        */
  19.  
  20. /*-----
  21.     classe de fenêtre MyWin
  22.  
  23.     Constructeur de MyWin :
  24.  
  25.         - titre str.
  26.  
  27.     Destructeur de MyWin :
  28.  
  29.         - aucun destructeur spécifique.
  30.  
  31.     Définition de MyWin :
  32.  
  33.         - largeur de 60 colonnes,
  34.         - hauteur de 13 lignes,
  35.         - fenêtre standard (cadre, titre, ombre, déplaçable, modale).
  36.  
  37.     membre on_call() :
  38.  
  39.         - il est déclenché lorsqu'un objet est appelé pour exécution.
  40.  
  41.         - en paramètre, on_call() apporte l'adresse de l'objet courant
  42.           demandant cette exécution.
  43.  
  44.     Membre on_char() :
  45.  
  46.         - il est déclenché pour tout caractère non reconnu par la fenêtre
  47.           ou ses objets.
  48.  
  49.         - en paramètre, on_char() apporte le code du caractère saisi.
  50.  
  51. */
  52.  
  53. class    MyWin : public XWin
  54.         {
  55.     protected :
  56.         virtual    void    on_call (XObj *obj);
  57.         virtual    void    on_char (int key);
  58.  
  59.     public :
  60.         MyWin (const char *str);
  61.  
  62.         };
  63.  
  64. MyWin::MyWin (const char *str)
  65.         : XWin(60, 13)
  66.         {
  67.         /* associe un titre à la fenêtre
  68.         */
  69.         head(str);
  70.  
  71.         /* ajout du cadre
  72.             identificateur :    1
  73.             style :                enfoncé
  74.         */
  75.         link(new XBox(1, 1, 1, 28, 5, 0, 1));
  76.  
  77.         /* ajout de l'étiquette
  78.             identificater :        2000
  79.             raccourci clavier : ALT-C
  80.         */
  81.         link(new XLabel(2000, 1, 2, "&Checks", xk_aC));
  82.  
  83.         /* ajout des cases à cocher 2001, 2002 et 2003
  84.         */
  85.         link(new XCheck(2001, 2, 3, 24, "Check &1", xk_a1));
  86.         link(new XCheck(2002, 3, 3, 24, "Check &2", xk_a2));
  87.         link(new XCheck(2003, 4, 3, 24, "Check &3", xk_a3));
  88.  
  89.         /* ajout du bouton poussoir Ok
  90.             identificateur :    1000
  91.             raccourci clavier :    ALT-O
  92.         */
  93.         link(new XPush(1000, 7, 45, 10, "&Ok", xk_aO));
  94.  
  95.         /* ajout du bouton poussoir Quitte
  96.             identificateur :    1001
  97.             raccourci clavier :    ALT-Q
  98.         */
  99.         link(new XPush(1001, 9, 45, 10, "&Quitte", xk_aQ));
  100.         }
  101.  
  102. void    MyWin::on_call (XObj *obj)
  103.         {
  104.         int        typ;
  105.  
  106.         /* récupére le type de l'objet
  107.         */
  108.         typ = obj->type();
  109.  
  110.         /* si exécution d'un bouton poussoir
  111.         */
  112.         if (typ == xo_PUSH)
  113.             {
  114.             /* enfonce le bouton
  115.             */
  116.             xo(obj, XPush)->push(1);
  117.  
  118.             /* ferme la fenêtre
  119.             */
  120.             hide();
  121.             }
  122.         /* si exécution d'une case à cocher
  123.         */
  124.         else if (typ == xo_CHECK)
  125.             {
  126.             /* inverse l'état de la case à cocher
  127.             */
  128.             xo(obj, XCheck)->revv(1);
  129.             }
  130.         /* si exécution d'une étiquette
  131.         */
  132.         else if (typ == xo_LABEL)
  133.             {
  134.             /* si étiquette 2000
  135.             */
  136.             if (obj->id() == 2000)
  137.                 /* branche vers la première case à cocher
  138.                 */
  139.                 curr(2001);
  140.  
  141.             }
  142.  
  143.         }
  144.  
  145. void    MyWin::on_char (int key)
  146.         {
  147.         /* si caractère ESCAPE
  148.         */
  149.         if (key == xk_ESC)
  150.             /* alors ferme la fenêtre
  151.             */
  152.             hide();
  153.  
  154.         }
  155.  
  156. /*-----
  157.     app_init() - initialisation de l'application
  158.  
  159.     L'initialisation de l'application passe par :
  160.  
  161.         - l'initialisation globale du gestionnaire de fenêtres,
  162.         - l'affichage du bureau.
  163.  
  164. */
  165.  
  166. void    app_init (void)
  167.         {
  168.         /* initialise tous les gestionnaires en une seule passe
  169.         */
  170.         xw.full(1);
  171.  
  172.         /* affiche le bureau
  173.         */
  174.         xw.desk();
  175.         }
  176.  
  177. /*-----
  178.     app_quit() - terminaison de l'application
  179.  
  180.     La terminaison de l'application passe par :
  181.  
  182.         - la terminaison globale du gestionnaire de fenêtres.
  183.  
  184. */
  185.  
  186. void    app_quit (void)
  187.         {
  188.         /* quitte tous les gestionnaires en une seule passe
  189.         */
  190.         xw.full(0);
  191.         }
  192.  
  193. /*-----
  194.     app_exec() - exécution de l'application
  195.  
  196.     L'exécution de l'application passe par :
  197.  
  198.         - la création d'une fenêtre de type MyWin,
  199.         - l'ouverture de la fenêtre,
  200.         - la lecture de chaque événement,
  201.         - l'évaluation de l'événement récupéré.
  202.  
  203.     L'exécution prend fin lorsque plus aucune fenêtre ne reste ouverte.
  204.  
  205. */
  206.  
  207. void    app_exec (void)
  208.         {
  209.         XEvn    evn;
  210.         MyWin *    win;
  211.  
  212.         /* crée la fenêtre MyWin
  213.         */
  214.         win = new MyWin("MA FENETRE");
  215.  
  216.         /* ouvre la fenêtre créée
  217.         */
  218.         win->topw();
  219.  
  220.         /* boucle de lecture des événements
  221.         */
  222.         while (1)
  223.             {
  224.             /* lit le prochain événement
  225.             */
  226.             xe.next(evn);
  227.  
  228.             /* si aucune fenêtre après évaluation de l'événement récupéré
  229.             */
  230.             if (xw.eval(evn) == 0)
  231.                 /* alors quitte la boucle
  232.                 */
  233.                 break;
  234.  
  235.             }
  236.  
  237.         /* détruit la fenêtre (déjà fermée)
  238.         */
  239.         delete win;
  240.         }
  241.  
  242. void    main (void)
  243.         {
  244.         /* initialisation de l'application
  245.         */
  246.         app_init();
  247.  
  248.         /* exécution de l'application
  249.         */
  250.         app_exec();
  251.  
  252.         /* fin de l'application
  253.         */
  254.         app_quit();
  255.         }
  256.