/*
 *  CREATECHECKBOX.C
 */

#include "newlook.h"

extern void CopyMem(APTR,APTR,ULONG);

static SHORT hook_pairs[2*10]= {
  7,5,    /*.......................*/
  10,8,   /*................***....*/
  12,8,   /*...............**......*/
  18,2,   /*..............**.......*/
  19,2,   /*......***....**........*/
  17,2,   /*.......***..**.........*/
  11,8,   /*........*****..........*/
  8,5,    /*.........***...........*/
  9,5,    /*.......................*/
  11,7    /*.......................*/
};

struct Gadget *CreateCheckbox(x,y,pn,id)
SHORT x,y;
BOOL pn;
USHORT id;
{
  struct Gadget *g;
  struct Border *b0, *b1, *c0, *c1;

  ULONG UserHandle= SetNewLookHandle(PRIVATE_HANDLE);

  if(g= (struct Gadget *)SmartAllocate(GADGETSIZE))
  {
    if(b0= CreateBorder(0,0,CHECKBOX_WIDTH,CHECKBOX_HEIGHT,FALSE))
    {
      if(b1= (struct Border *)SmartAllocate(BORDERSIZE))
      {
        if(c0= (struct Border *)SmartAllocate(BORDERSIZE))
        {
          if(c1= (struct Border *)SmartAllocate(BORDERSIZE))
          {
            CopyMem((APTR)b0, (APTR)b1, BORDERSIZE);

            c0->LeftEdge     = 0;
            c0->TopEdge      = 0;
            c0->FrontPen     = 0;
            c0->BackPen      = 0;
            c0->DrawMode     = JAM2;
            c0->Count        = 10;
            c0->XY           = &hook_pairs[0];
            c0->NextBorder   = b0;

            c1->LeftEdge     = 0;
            c1->TopEdge      = 0;
            c1->FrontPen     = 1;
            c1->BackPen      = 0;
            c1->DrawMode     = JAM1;
            c1->Count        = 10;
            c1->XY           = &hook_pairs[0];
            c1->NextBorder   = b1;

            g->NextGadget    = (struct Gadget *)NULL;
            g->LeftEdge      = x;
            g->TopEdge       = y;
            g->Width         = CHECKBOX_WIDTH;
            g->Height        = CHECKBOX_HEIGHT;
            g->Flags         = pn ? GADGHIMAGE|SELECTED : GADGHIMAGE;
            g->Activation    = GADGIMMEDIATE|RELVERIFY|TOGGLESELECT;
            g->GadgetType    = BOOLGADGET;
            g->GadgetRender  = (APTR)c0;
            g->SelectRender  = (APTR)c1;
            g->GadgetText    = (struct IntuiText *)NULL;
            g->MutualExclude = (LONG)0L;
            g->SpecialInfo   = (APTR)NULL;
            g->GadgetID      = id;
            g->UserData      = (APTR)NULL;

            MakePrivateHandlePublic(UserHandle);
            return g;
          }
        }
      }
    }
  }

  if(UserHandle != PRIVATE_HANDLE)
  {
    SmartFreeAll(PRIVATE_HANDLE);
    (void)SetNewLookHandle(UserHandle);
  }
  return (struct Gadget *)NULL;
}
