#include "xsb.h"
#include "startup.h"

extern struct Library *XSBBase;
extern char xsbname[];
static struct TextAttr top80={"topaz.font",8,0,0};

void doprefs(char *name)
{
	struct XSBParams *xp,*xpp;
	struct Window *w;
	struct Gadget *g=0,*lastg,*ga[10],*gp;
	struct NewGadget ng;
	int argcount=0;
	int c,ypos=15;
	struct IntuiMessage *im;
	struct VisualInfo *vi=0;
	long code,class;
	int running=1;

	if(!(XSBBase=OldOpenLibrary(name))) {
		doreq("XSBCX","Couldn't open blanker library\n%s","Cancel",name);
		return;
	}

	if(!(xp=XSBGetParams())) {
		doreq(name,"This blanker don't\nhas preferences","Cancel");
		CloseLibrary(XSBBase);
		return;
	}
	xpp=xp;
	while(xpp) { argcount++; xpp=xpp->next; }
	xpp=xp;

	if(!(w=OpenWindowTags(0,WA_Top,30,WA_Left,120,
		WA_Width,320,WA_Height,50+argcount*16,
		WA_IDCMP,GADGETUP|GADGETDOWN|MOUSEMOVE|CLOSEWINDOW,
		WA_AutoAdjust,TRUE,
		WA_Title,name,
		WA_Flags,ACTIVATE|RMBTRAP|WINDOWDRAG|WINDOWCLOSE|WINDOWDEPTH,
		TAG_DONE))) goto xit;

	vi=GetVisualInfo(w->WScreen,TAG_DONE);
	lastg=CreateContext(&g);

	ng.ng_LeftEdge=19; ng.ng_TopEdge=30+argcount*16;
	ng.ng_Width=60; ng.ng_Height=13;
	ng.ng_GadgetText="Save";
	ng.ng_GadgetID=20;
	ng.ng_TextAttr=&top80;
	ng.ng_Flags=PLACETEXT_IN;
	ng.ng_VisualInfo=vi;
	lastg=CreateGadget(BUTTON_KIND,lastg,&ng,TAG_DONE);

	ng.ng_GadgetText="Load";
	ng.ng_LeftEdge=92;
	ng.ng_GadgetID++;
	lastg=CreateGadget(BUTTON_KIND,lastg,&ng,TAG_DONE);

	ng.ng_GadgetText="Use";
	ng.ng_LeftEdge=165;
	ng.ng_GadgetID++;
	lastg=CreateGadget(BUTTON_KIND,lastg,&ng,TAG_DONE);

	ng.ng_GadgetText="Cancel";
	ng.ng_LeftEdge=240;
	ng.ng_GadgetID++;
	lastg=CreateGadget(BUTTON_KIND,lastg,&ng,TAG_DONE);
	
	c=0;
	ng.ng_LeftEdge=100; ng.ng_Width=170; ng.ng_Height=14; ng.ng_GadgetID=1;
	ng.ng_Flags=NG_HIGHLABEL|PLACETEXT_LEFT;
	while(xpp) {
		ng.ng_GadgetText=xpp->text;
		ng.ng_TopEdge=ypos;
		ypos+=16;
		switch(xpp->type) {
			case XSBP_BOOL: ng.ng_TopEdge++; lastg=CreateGadget(CHECKBOX_KIND,lastg,&ng,GTCB_Checked,xpp->value->xsb_arg,TAG_DONE); ng.ng_TopEdge--; break;
			case XSBP_STRING: lastg=CreateGadget(STRING_KIND,lastg,&ng,GTST_MaxChars,40,GTST_String,xpp->value->xsb_string,TAG_DONE); break;
			case XSBP_INTEGER: lastg=CreateGadget(INTEGER_KIND,lastg,&ng,GTIN_MaxChars,40,GTIN_Number,xpp->value->xsb_arg,TAG_DONE); break;
			case XSBP_CYCLE: lastg=CreateGadget(CYCLE_KIND,lastg,&ng,GTCY_Labels,xpp->labels,GTCY_Active,xpp->value->xsb_arg,TAG_DONE); break;
			case XSBP_SLIDER: lastg=CreateGadget(SLIDER_KIND,lastg,&ng,
				GTSL_Max,xpp->max,GTSL_Min,xpp->min,
				GTSL_Level,xpp->value->xsb_arg,
				PGA_Freedom,LORIENT_HORIZ,
				GTSL_MaxLevelLen,4,
				GTSL_LevelPlace,PLACETEXT_RIGHT,
				GA_RelVerify,TRUE,
				GTSL_LevelFormat,"%-4ld",TAG_DONE); break;
		}
		ga[c++]=lastg;
		xpp=xpp->next;
		ng.ng_GadgetID++;
	}

	AddGList(w,g,-1,-1,0);
	RefreshGList(g,w,0,-1);
	GT_RefreshWindow(w,0);

	while(running) {
		while(!(im=GT_GetIMsg(w->UserPort))) WaitPort(w->UserPort);
		code=im->Code; class=im->Class;
		gp=im->IAddress;
		GT_ReplyIMsg(im);
		if(class==CLOSEWINDOW) break;
		if(class==GADGETUP) {
			switch(gp->GadgetID) {
				case 20:
				case 21:
				case 22:
				case 23: running=0; break;
			}
		}
	}

xit:
	if(g) FreeGadgets(g);
	if(vi) FreeVisualInfo(vi);
	if(w) CloseWindow(w);
	CloseLibrary(XSBBase);
}
