home *** CD-ROM | disk | FTP | other *** search
/ AMIGA PD 1 / AMIGA-PD-1.iso / Programme_zum_Heft / Programmieren / Workshops / GadToolsBox / Oberon / AllInOneTest.mod < prev    next >
Text File  |  1993-04-02  |  3KB  |  104 lines

  1. MODULE AllInOneTest;
  2.  
  3. (*** example event-loop for GadTools-GUIs (created with GadToolsBox) ***)
  4. (***               shows some caveats... study carefully             ***)
  5.  
  6. IMPORT
  7.   e: Exec, d: Dos, I: Intuition, gt: GadTools, rt: ReqTools, aio: AllInOne;
  8.  
  9. VAR
  10.   quit: BOOLEAN;
  11.  
  12. PROCEDURE HandleProject0(): BOOLEAN;
  13. VAR
  14.   imsgptr: I.IntuiMessagePtr;
  15.   imsg: I.IntuiMessage;
  16.   item: I.MenuItemPtr;
  17.   done: BOOLEAN;
  18. BEGIN
  19.   done := FALSE;
  20.   LOOP
  21.     imsgptr := gt.GetIMsg (aio.Project0Wnd.userPort);
  22.     IF imsgptr = NIL THEN EXIT END;
  23.     imsg := imsgptr^;
  24.     gt.ReplyIMsg (imsgptr);
  25.  
  26.     IF (I.rawKey IN imsg.class) THEN
  27.       (* imsg.iAddress points to dead key information *)
  28.     END;
  29.     IF (I.idcmpUpdate IN imsg.class) THEN
  30.       (* imsg.iAddress points to taglist *)
  31.     END;
  32.     IF (I.gadgetDown IN imsg.class) THEN
  33.       (* imsg.iAddress points to gadget *)
  34.     END;
  35.     IF (I.gadgetUp IN imsg.class) THEN
  36.       (* imsg.iAddress points to gadget *)
  37.     END;
  38.     IF (I.refreshWindow IN imsg.class) THEN
  39.       gt.BeginRefresh (aio.Project0Wnd);
  40.       aio.Project0Render;
  41.       gt.EndRefresh (aio.Project0Wnd, I.LTRUE);
  42.     END;
  43.     IF (I.menuPick IN imsg.class) THEN
  44.       WHILE imsg.code # I.menuNull DO
  45.         item := I.ItemAddress (aio.Project0Menus^, imsg.code);
  46.         (* do whatever you want *)
  47.         imsg.code := item.nextSelect;
  48.       END; (* WHILE *)
  49.     END;
  50.     IF (I.reqVerify IN imsg.class) THEN
  51.       (* reply soon, be careful, see RKM Libraries *)
  52.     END;
  53.     IF (I.menuVerify IN imsg.class) THEN
  54.       (* reply soon, be careful, see RKM Libraries *)
  55.     END;
  56.     IF (I.sizeVerify IN imsg.class) THEN
  57.       (* reply soon, be careful, see RKM Libraries *)
  58.     END;
  59.     IF (I.newPrefs IN imsg.class) THEN
  60.       (* use 2.0 method! *)
  61.     END;
  62.   END; (* LOOP *)
  63.   RETURN done;
  64. END HandleProject0;
  65.  
  66. PROCEDURE HandleProject1(): BOOLEAN;
  67. VAR
  68.   imsgptr: I.IntuiMessagePtr;
  69.   imsg: I.IntuiMessage;
  70.   item: I.MenuItemPtr;
  71.   done: BOOLEAN;
  72. BEGIN
  73.   done := FALSE;
  74.   LOOP
  75.     imsgptr := gt.GetIMsg (aio.Project1Wnd.userPort);
  76.     IF imsgptr = NIL THEN EXIT END;
  77.     imsg := imsgptr^;
  78.     gt.ReplyIMsg (imsgptr);
  79.  
  80.     IF (I.closeWindow IN imsg.class) THEN
  81.       done := TRUE
  82.     END;
  83.   END; (* LOOP *)
  84.   RETURN done;
  85. END HandleProject1;
  86.  
  87. BEGIN
  88.   rt.Assert (aio.SetupScreen() = 0, "Unable to open screen!");
  89.   rt.Assert (aio.OpenProject0Window() = 0, "Unable to open project window #0");
  90.   rt.Assert (aio.OpenProject1Window() = 0, "Unable to open project window #1");
  91.   quit := FALSE;
  92.   REPEAT
  93.     quit := (d.ctrlC IN e.Wait (LONGSET {aio.Project0Wnd.userPort.sigBit,
  94.                                          aio.Project1Wnd.userPort.sigBit,
  95.                                          d.ctrlC}));
  96.     quit := quit OR HandleProject0();
  97.     quit := quit OR HandleProject1();
  98.   UNTIL quit;
  99. CLOSE
  100.   aio.CloseProject1Window;
  101.   aio.CloseProject0Window;
  102.   aio.CloseDownScreen;
  103. END AllInOneTest.
  104.