home *** CD-ROM | disk | FTP | other *** search
/ Vectronix 2 / VECTRONIX2.iso / FILES_07 / ACS.ZIP / ACS / MENUE / MENUE.C < prev    next >
C/C++ Source or Header  |  1992-01-28  |  3KB  |  115 lines

  1. /*
  2.     Beispielapplikation    für ACS
  3.  
  4.     "Menu"
  5.  
  6.     3.9.91        (c)    Stefan Bachert
  7.  
  8. */
  9.  
  10. #include    <acs.h>
  11. #include    <menue.h>        /* nicht wirklich notwendig in diesem Beispiel */
  12.  
  13. static Awindow *menu_make (void *not_used);
  14. static int menu_service (Awindow *window, int task, void *in_out);
  15.  
  16. #define OBJ_1    (1)
  17. #define OBJ_2    (2)
  18. #define OBJ_3    (3)
  19. #define OBJ_4    (4)
  20.  
  21. #include    <menue.ah>
  22.  
  23.  
  24. static void set_menu (Awindow *window)
  25.     /*
  26.      *    Setze Menüeinträge je nach selektiertem Objekt
  27.      */
  28. {
  29.   AOBJECT *aob;
  30.   OBJECT *menu;
  31.   int nr;
  32.   int count;
  33.   int o1, o2, o3, o4;
  34.  
  35.   count = o1 = o2 = o3 = o4 = 0;
  36.  
  37.   Aselect. next = 0;
  38.   while ((nr = Adr_next ()) >= 0) {        /* ermittele Zustand */
  39.     count ++;
  40.  
  41.     aob = (AOBJECT *) window-> work + nr + 1;
  42.     switch (aob-> type) {
  43.       case OBJ_1: o1 = 1; break;
  44.       case OBJ_2: o2 = 1; break;
  45.       case OBJ_3: o3 = 1; break;
  46.       case OBJ_4: o4 = 1; break;
  47.       default:
  48.         break;
  49.     };
  50.   };
  51.  
  52.   menu = window-> menu;
  53.   if (count == 0) menu [SEL_0]. ob_state &= ~DISABLED; else menu [SEL_0]. ob_state |= DISABLED;
  54.   if (count == 1) menu [SEL_1]. ob_state &= ~DISABLED; else menu [SEL_1]. ob_state |= DISABLED;
  55.   if (count > 0)  menu [SEL_ANY]. ob_state &= ~DISABLED; else menu [SEL_ANY]. ob_state |= DISABLED;
  56.  
  57.   if (o1)  menu [OBJ1]. ob_state &= ~DISABLED; else menu [OBJ1]. ob_state |= DISABLED;
  58.   if (o2)  menu [OBJ2]. ob_state &= ~DISABLED; else menu [OBJ2]. ob_state |= DISABLED;
  59.   if (o2 && o3)  menu [OBJ23]. ob_state &= ~DISABLED; else menu [OBJ23]. ob_state |= DISABLED;
  60.   if (! o4)  menu [OBJnot4]. ob_state &= ~DISABLED; else menu [OBJnot4]. ob_state |= DISABLED;
  61.   if (o3 ^ o4)  menu [OBJxor34]. ob_state &= ~DISABLED; else menu [OBJxor34]. ob_state |= DISABLED;
  62. }
  63.  
  64. static int menu_service (Awindow *window, int task, void *in_out)
  65.     /*
  66.      *    service Routine
  67.      */
  68. {
  69.   switch (task) {
  70.     case AS_TERM:                /* fenster freigeben */
  71.       Awi_delete (window);
  72.       break;
  73.     case AS_SELECTDEL:
  74.     case AS_SELECTADD:
  75.       set_menu (window);
  76.       break;
  77.     case AS_DELETE:
  78.       Adr_unselect ();
  79.       break;
  80.     default:
  81.     return FAIL;
  82.   };
  83.   return TRUE;
  84. }
  85.  
  86.  
  87. static Awindow *menu_make (void *not_used)
  88.     /*
  89.      *    Erzeuge Hello World Fenster
  90.      */
  91. {
  92.   Awindow *wi;
  93.  
  94.   wi = Awi_create (&DEMO);
  95.   if (wi == NULL) return NULL;
  96.   
  97.   (wi-> open) (wi);                    /* öffne gleich */
  98.   return wi;
  99. }
  100.  
  101.  
  102. int ACSinit (void)
  103.     /*
  104.      *    Doppelklick auf NEU erzeugt ein neues Fenster
  105.      */
  106. {
  107.   Awindow *window;
  108.  
  109.   window = Awi_root ();                        /* root window */
  110.   if (window == NULL) return FAIL;            /* lege NEU Icon an */
  111.   (window-> service) (window, AS_NEWCALL, &DEMO. create);
  112.  
  113.   return OK;
  114. }
  115.