
/*Source for gadtools.lib V0.20.*/
/*Provides a library of routines to help with creating gadgets with*/
/*gadtools.library*/

/*Kinds currently supported:*/
/*BUTTON*/
/*STRING*/
/*CHECK*/

#include "graphics/displayinfo.h"
#include "libraries/gadtools.h"
#include <proto/gadtools.h>

/* Prototypes for functions defined in gadtools.c */
struct Gadget *MakeButtonGadgets(struct Gadget *Header,
				 struct NewGadget *Buttons,
				 APTR VisInfo,
				 struct TextAttr *Font,
				 UWORD NumOfGadgets,
				 UWORD Add);
struct Gadget *MakeStringGadgets(struct Gadget *Header,
				 struct NewGadget *New,
				 APTR VisInfo,
				 struct TextAttr *Font,
				 UWORD NumOfGadgets,
				 struct StrStrings *StrInfo,
				 UWORD Add);
struct Gadget *MakeCheckGadgets(struct Gadget *Header,
				struct NewGadget *New,
				APTR VisInfo,
				struct TextAttr *Font,
				UWORD NumOfGadgets,
				BOOL *States,
				UWORD Add);

struct TagItem StringTag[] =
{
   {GTST_String,NULL},
   {GTST_MaxChars,79},
   {TAG_DONE,NULL}
};


struct TagItem ButtonTag[] =
{
   {TAG_DONE,NULL}
};

struct TagItem CheckTag[] =
{
   {GTCB_Checked,FALSE},
   {TAG_DONE,NULL}
};

struct Gadget *MakeButtonGadgets();
struct Gadget *MakeStringGadgets();
struct Gadget *MakeCheckGadgets();


/*Create gadgets based on the NewGadget BUTTON_KIND*/

struct Gadget *MakeButtonGadgets(Header,Buttons,VisInfo,Font,NumOfGadgets,
				 Add)
struct Gadget *Header;
struct NewGadget Buttons[];
APTR VisInfo;
struct TextAttr *Font;
UWORD NumOfGadgets;
UWORD Add;
{
   register UWORD gad;
   register struct Gadget *Cur=(struct Gadget *)Header;

   for(gad=0;gad<NumOfGadgets;gad++)
   {
      Buttons[gad].ng_VisualInfo=(APTR)VisInfo;
      Buttons[gad].ng_TextAttr=(struct TextAttr *)Font;
      Buttons[gad].ng_TopEdge+=Add;
      Cur=(struct Gadget *)CreateGadgetA(BUTTON_KIND,Cur,&Buttons[gad],
					 ButtonTag);
      Buttons[gad].ng_TopEdge-=Add;
   }

   return(Cur);
}

struct StrStrings
{
   char *String;
   UWORD Length;
};

/*Create gadgets based on the NewGadget STRING_KIND*/

struct Gadget *MakeStringGadgets(Header,New,VisInfo,Font,NumOfGadgets,
				 StrInfo,Add)
struct Gadget *Header;
struct NewGadget New[];
APTR VisInfo;
struct TextAttr *Font;
UWORD NumOfGadgets;
struct StrStrings *StrInfo;
UWORD Add;
{
   register UWORD gad;
   register struct Gadget *Cur=(struct Gadget *)Header;

   for(gad=0;gad<NumOfGadgets;gad++)
   {
      New[gad].ng_VisualInfo=(APTR)VisInfo;
      New[gad].ng_TextAttr=(struct TextAttr *)Font;
      New[gad].ng_TopEdge+=Add;
      StringTag[0].ti_Data=StrInfo[gad].String;
      StringTag[1].ti_Data=StrInfo[gad].Length;
      Cur=(struct Gadget *)CreateGadgetA(STRING_KIND,Cur,&New[gad],
					 StringTag);
      New[gad].ng_TopEdge-=Add;
   }

   return(Cur);
}


/*Create gadgets based on the NewGadget CHECKBOX_KIND*/

struct Gadget *MakeCheckGadgets(Header,New,VisInfo,Font,NumOfGadgets,
				States,Add)
struct Gadget *Header;
struct NewGadget New[];
APTR VisInfo;
struct TextAttr *Font;
UWORD NumOfGadgets;
BOOL States[];
UWORD Add;
{
   register UWORD gad;
   register struct Gadget *Cur=(struct Gadget *)Header;

   for(gad=0;gad<NumOfGadgets;gad++)
   {
      New[gad].ng_VisualInfo=(APTR)VisInfo;
      New[gad].ng_TextAttr=(struct TextAttr *)Font;
      New[gad].ng_TopEdge+=Add;
      CheckTag[0].ti_Data=States[gad];

      Cur=(struct Gadget *)CreateGadgetA(CHECKBOX_KIND,Cur,&New[gad],
					 CheckTag);
      New[gad].ng_TopEdge-=Add;
   }

   return(Cur);
}


