/**************************************
 *                                    *
 * Program : OnOff-gaggets.c          *
 * ================================== *
 *                                    *
 * Author:  Date:      Comments:      *
 * ------  ----------  ----------     *
 * Wgb     10/16/1988  for testing    *
 *                     only           *
 *                                    *
 **************************************/


#include <exec/types.h>
#include <intuition/intuition.h>


struct IntuitionBase *IntuitionBase;
struct Window        *FirstWindow;
struct IntuiMessage  *message;


SHORT SelectPairs[] =
   {
   0, 0, 61, 0, 61, 21, 0, 21, 0, 0,
   };

struct Border SelectBorder =
   {
   -1, -1, 1, 0, JAM1, 5, SelectPairs, NULL,
   };

struct IntuiText SelectText =
   {
   1, 0, JAM2, 4, 7, NULL, (UBYTE *)"Select" ,NULL,
   };

struct Gadget SelectGadget =
   {
   NULL,                /* NextGadget          */
   10, 40,              /* LeftEdge, TopEdge   */
   60, 20,              /* Width, Height       */
   GADGHCOMP,           /* Flags               */
   RELVERIFY,           /* Activation          */
   BOOLGADGET,          /* Gadget Type         */
   (APTR)&SelectBorder, /* GadgetRender        */
   NULL,                /* Select Render       */
   &SelectText,         /* GadgetText          */
   NULL,                /* MutualExclude       */
   NULL,                /* SpecialInfo         */
   2,                   /* GadgetID            */
   NULL,                /* UserData            */
   };

SHORT GadgetPairs[] =
   {
   0, 0, 61, 0, 61, 21, 0, 21, 0, 0
   };

struct Border GadgetBorder =
   {
   -1, -1, 1, 0, JAM1, 5, GadgetPairs, NULL
   };

struct IntuiText BoolText =
   {
   3, 0, JAM2, 4, 7, NULL, (UBYTE *)"BoolGad" ,NULL
   };

struct Gadget BoolGadget =
   {
   &SelectGadget,       /* NextGadget          */
   120, 40,             /* LeftEdge, TopEdge   */
   60, 20,              /* Width, Height       */
   GADGHBOX,            /* Flags               */
   RELVERIFY |          /* Activation          */
   TOGGLESELECT,
   BOOLGADGET,          /* Gadget Type         */
   (APTR)&GadgetBorder, /* GadgetRender        */
   NULL,                /* Select Render       */
   &BoolText,           /* GadgetText          */
   NULL,                /* MutualExclude       */
   NULL,                /* SpecialInfo         */
   1,                   /* GadgetID            */
   NULL                 /* UserData            */
   };

struct NewWindow FirstNewWindow =
   {
   160, 50,             /* LeftEdge, TopEdge   */
   320, 150,            /* Width, Height       */
   0, 1,                /* DetailPen, BlockPen */
   CLOSEWINDOW |        /* IDCMP Flags         */
   GADGETUP |
   GADGETDOWN,
   
   WINDOWDEPTH |        /* Flags               */
   WINDOWSIZING |
   WINDOWDRAG |
   WINDOWCLOSE |
   SMART_REFRESH,
   
   &BoolGadget,         /* First Gadget        */
   NULL,                /* CheckMark           */
   
   (UBYTE *)"System programming test",
   
   NULL,                /* Screen              */
   NULL,                /* BitMap              */
   
   100, 50,             /* Min Width, Height   */
   640, 200,            /* Max Width, Height   */
   
   WBENCHSCREEN         /* Type                */
   };


main()
   {
   ULONG MessageClass;
   USHORT code, selectmode, GadgetNr;

   struct Message *GetMsg();
   struct Gadget *GadgetPtr;
   
   Open_All();
   
   RefreshGadgets(&BoolGadget, FirstWindow, NULL);
   
   
   FOREVER
      {
      if ((message = (struct IntuiMessage *)
          GetMsg(FirstWindow->UserPort)) == NULL)
         {
         Wait(1L << FirstWindow->UserPort->mp_SigBit);
         continue;
         }
      MessageClass = message->Class;
      code = message->Code;
      GadgetPtr = (struct Gadget *) message->IAddress;
      GadgetNr  = GadgetPtr->GadgetID;
      selectmode= GadgetPtr->Flags & SELECTED;
      
      ReplyMsg(message);
      switch (MessageClass)
         {
         case GADGETUP    :
         
         case GADGETDOWN  :
         
            switch (GadgetNr)
               {
               case 2     : printf("selected!\n");
                            break;
         
               case 1     : if (selectmode)
                               {
                               printf("activated ");
                               OnGadget(&SelectGadget, FirstWindow,NULL);
                               RefreshGadgets(&SelectGadget, FirstWindow,NULL);
                               }
                            else
                               {
                               printf("deactivated\n");
                               OffGadget(&SelectGadget, FirstWindow,NULL);
                               }
                            break;
               }
               break;
               
         case CLOSEWINDOW : Close_All();
                            exit(TRUE);
                            break;
         }
      }
   }


Open_All()
   {
   void *OpenLibrary();
   struct Window *OpenWindow();
   
   if (!(IntuitionBase = (struct IntuitionBase *)
         OpenLibrary("intuition.library", 0L)))
      {
      printf("Intuition Library not found!\n");
      Close_All();
      exit(FALSE);
      }
   
   if (!(FirstWindow = (struct Window *)OpenWindow(&FirstNewWindow)))
      {
      printf("Window will not open!\n");
      Close_All();
      exit(FALSE);
      }
   }

Close_All()
   {
   if (FirstWindow)     CloseWindow(FirstWindow);
   if (IntuitionBase)   CloseLibrary(IntuitionBase);
   }

