/*
	gadtools support lib

*/

#include "startup.h"

static struct VisualInfo *vi;
static struct Gadget *glist,*lastg,*gads[32];
static int gid;
struct TextAttr textattr={"topaz.font",8,0,0};
#define top80 textattr

void gt_init(void)
{
	struct Screen *scr;
	scr=LockPubScreen(0);
	vi=GetVisualInfo(scr,TAG_DONE);
	UnlockPubScreen(0,scr);
}

void gt_exit(void)
{
	if(vi) FreeVisualInfo(vi);
}

struct Gadget *gt_newlist(void)
{
	glist=0;gid=1;
	lastg=CreateContext(&glist);
	return(lastg);
}

void gt_endlist(void)
{
	AddGList(w,glist,-1,-1,0);
	RefreshGList(glist,w,0,-1);
	GT_RefreshWindow(w,0);
}

void gt_remlist(struct Gadget *list)
{
	FreeGadgets(list);
}

struct Gadget * __stdargs gt_createg(int x,int y,int xs,int ys,long type,char *label,int flags,...)
{
	struct NewGadget ng;

	ng.ng_LeftEdge=x; ng.ng_TopEdge=y;
	ng.ng_Width=xs; ng.ng_Height=ys;
	ng.ng_GadgetText=label;
	ng.ng_GadgetID=gid++;
	ng.ng_TextAttr=&top80;
	ng.ng_Flags=flags;
	ng.ng_VisualInfo=vi;
	ng.ng_UserData=(APTR)0xaffe;

	return(lastg=gads[gid-2]=CreateGadgetA(type,lastg,&ng,((long)(&flags))+4));
}

void gt_setg(struct Gadget *g,...)
{
	GT_SetGadgetAttrsA(g,w,0,((long)(&g))+4);
}

void gt_drawbox(int x,int y,int size,int height,int typ)
{
	DrawBevelBox(rp,x,y,size,height,(typ)?TAG_IGNORE:GTBB_Recessed,0,GT_VisualInfo,vi,TAG_DONE);
}

/*struct Menu *gt_createmenus(struct NewMenu *nm)
{
	struct Menu *m;

	m=CreateMenus(nm,GTMN_FrontPen,0,TAG_DONE);
	if(m) {
		if(LayoutMenus(m,vi,GTMN_TextAttr,&top80,TAG_DONE)) return(m);
		FreeMenus(m);
	}
	return(0);
}*/

int doreq(char *hail,char *txt,char *gads,...)
{
	struct EasyStruct es;

	es.es_StructSize=sizeof(struct EasyStruct);
	es.es_Flags=0;
	es.es_Title=hail;
	es.es_TextFormat=txt;
	es.es_GadgetFormat=gads;
	return(EasyRequestArgs(w,&es,0,((long)&gads)+4));
}

void text(int x,int y,char *txt)
{
	Move(rp,x,y);
	Text(rp,txt,strlen(txt));
}

void textf(int x,int y,char *txt,...)
{
	char p[128];

	_dofmt(txt,((long)&txt)+4,p);
	Move(rp,x,y);
	Text(rp,&p[0],strlen(&p[0]));
}
struct Gadget *gt_findid(short id)
{
	if(!id) return(0);
	return(gads[id-1]);
}

char *gt_findstring(short id)
{
	struct StringInfo *si=gt_findid(id)->SpecialInfo;

	return(si->Buffer);
}

long gt_findint(short id)
{
	struct StringInfo *si=gt_findid(id)->SpecialInfo;

	return(si->LongInt);
}

int gt_findstate(short id)
{
	return(gt_findid(id)->Flags&SELECTED);
}
