/*----------------------------------------------------------------------* editgad.c Version 2.0 - © Copyright 1990 by Jaba Development Author : Jan van den Baard Purpose: The editing of gadgets flags e.c.t. *----------------------------------------------------------------------*/ static UBYTE UNDOBUFFER[20]; static struct TextAttr TOPAZ60 = { (STRPTR)"topaz.font",TOPAZ_SIXTY,FS_NORMAL,FPF_ROMFONT }; static SHORT MainPairs6[] = { 0,0,249,0,249,32,0,32,0,0 }; static SHORT MainPairs5[] = { 0,0,148,0,148,84,0,84,0,0 }; static SHORT MainPairs4[] = { 0,0,122,0,122,84,0,84,0,0 }; static SHORT MainPairs3[] = { 0,0,123,0,123,84,0,84,0,0 }; static SHORT MainPairs2[] = { 0,0,114,0,114,118,0,118,0,0 }; static SHORT MainPairs1[] = { 0,0,106,0,106,118,0,118,0,0 }; static struct Border MainBorder6 = { 233,97,1,0,JAM1,5,MainPairs6,NULL }; static struct Border MainBorder5 = { 486,11,1,0,JAM1,5,MainPairs5,&MainBorder6 }; static struct Border MainBorder4 = { 360,11,1,0,JAM1,5,MainPairs4,&MainBorder5 }; static struct Border MainBorder3 = { 233,11,1,0,JAM1,5,MainPairs3,&MainBorder4 }; static struct Border MainBorder2 = { 115,11,1,0,JAM1,5,MainPairs2,&MainBorder3 }; static struct Border MainBorder1 = { 5,11,1,0,JAM1,5,MainPairs1,&MainBorder2 }; static struct IntuiText MainText6 = { 2,0,JAM1,291,100,NULL,(UBYTE *)"SOURCE LABEL NAME",NULL }; static struct IntuiText MainText5 = { 2,0,JAM1,515,13,NULL,(UBYTE *)"GADGET TYPE",&MainText6 }; static struct IntuiText MainText4 = { 2,0,JAM1,366,13,NULL,(UBYTE *)"STRING SPECIAL",&MainText5 }; static struct IntuiText MainText3 = { 2,0,JAM1,249,13,NULL,(UBYTE *)"PROP SPECIAL",&MainText4 }; static struct IntuiText MainText2 = { 2,0,JAM1,132,13,NULL,(UBYTE *)"ACTIVATION",&MainText3 }; static struct IntuiText MainText1 = { 2,0,JAM1,36,13,NULL,(UBYTE *)"FLAGS",&MainText2 }; static struct Gadget BRD = { NULL,0,0,1,1,GADGHNONE,NULL,BOOLGADGET, (APTR)&MainBorder1,NULL,&MainText1,NULL,NULL,NULL,NULL }; static SHORT CNPairs[] = { 0,0,72,0,72,32,0,32,0,0 }; static struct Border CNBorder = { -1,-1,1,0,JAM1,5,CNPairs,NULL }; static struct IntuiText CNText = { 1,0,JAM1,5,11,&TOPAZ60,(UBYTE *)"CANCEL",NULL }; static struct Gadget CN = { &BRD,563,98,71,31,NULL,RELVERIFY,BOOLGADGET, (APTR)&CNBorder,NULL,&CNText,NULL,NULL,35,NULL }; static struct IntuiText OKText = { 1,0,JAM1,26,11,&TOPAZ60,(UBYTE *)"OK",NULL }; static struct Gadget OK = { &CN,487,98,71,31,NULL,RELVERIFY,BOOLGADGET, (APTR)&CNBorder,NULL,&OKText,NULL,NULL,34,NULL }; static UBYTE SLBuff[MAXLABEL]; static SHORT SLPairs[] = { 0,0,239,0,239,11,0,11,0,0 }; static struct Border SLBorder = { -1,-2,1,0,JAM1,5,SLPairs,NULL }; static struct StringInfo SLInfo = { SLBuff,UNDOBUFFER,0,MAXLABEL,0,0,0,0,0,0,0,0,NULL }; static struct Gadget SL = { &OK,239,112,237,8,NULL,RELVERIFY+STRINGCENTER,STRGADGET, (APTR)&SLBorder,NULL,NULL,NULL,(APTR)&SLInfo,33,NULL }; static SHORT GTPairs[] = { 0,0,140,0,140,12,0,12,0,0 }; static struct Border GTBorder = { -1,-1,1,0,JAM1,5,GTPairs,NULL }; static struct IntuiText GZText = { 1,0,JAM1,31,2,NULL,(UBYTE *)"GZZGADGET",NULL }; static struct Gadget GZ = { &SL,490,82,139,11,NULL,TOGGLESELECT,BOOLGADGET, (APTR)>Border,NULL,&GZText,NULL,NULL,37,NULL }; static struct IntuiText BOText = { 1,0,JAM1,27,2,NULL,(UBYTE *)"BORDERONLY",NULL }; static struct Gadget BO = { &GZ,490,67,139,11,GADGDISABLED,TOGGLESELECT,BOOLGADGET, (APTR)>Border,NULL,&BOText,NULL,NULL,36,NULL }; static struct IntuiText STText = { 1,0,JAM1,43,2,NULL,(UBYTE *)"STRING",NULL }; static struct Gadget ST = { &BO,490,52,139,11,NULL,GADGIMMEDIATE+TOGGLESELECT,BOOLGADGET, (APTR)>Border,NULL,&STText,3L,NULL,32,NULL }; static struct IntuiText PRText = { 1,0,JAM1,22,2,NULL,(UBYTE *)"PROPORTIONAL",NULL }; static struct Gadget PR = { &ST,491,37,139,11,NULL,GADGIMMEDIATE+TOGGLESELECT,BOOLGADGET, (APTR)>Border,NULL,&PRText,5L,NULL,31,NULL }; static struct IntuiText BLText = { 1,0,JAM1,52,2,NULL,(UBYTE *)"BOOL",NULL }; static struct Gadget BL = { &PR,491,22,139,11,NULL,GADGIMMEDIATE+TOGGLESELECT,BOOLGADGET, (APTR)>Border,NULL,&BLText,6L,NULL,30,NULL }; static SHORT BPairs[] = { 0,0,72,0,72,11,0,11,0,1 }; static struct Border BBorder = { -2,-2,1,0,JAM1,5,BPairs,NULL }; static UBYTE SZBuff[4] = "256"; static struct StringInfo SZInfo = { SZBuff,UNDOBUFFER,0,4,0,0,0,0,0,0,0,256L,NULL }; static struct IntuiText SZText = { 2,0,JAM1,-46,1,NULL,(UBYTE *)"SIZE",NULL }; static struct Gadget SZ = { &BL,409,84,67,8,NULL,RELVERIFY+STRINGCENTER+LONGINT,STRGADGET, (APTR)&BBorder,NULL,&SZText,NULL,(APTR)&SZInfo,29,NULL }; static SHORT SINPairs[] = { 0,0,115,0,115,10,0,10,0,0 }; static struct Border SINBorder = { -1,-1,1,0,JAM1,5,SINPairs,NULL }; static struct IntuiText AMText = { 1,0,JAM1,21,1,NULL,(UBYTE *)"ALTKEYMAP",NULL }; static struct Gadget AM = { &SZ,365,70,114,9,NULL,TOGGLESELECT,BOOLGADGET, (APTR)&SINBorder,NULL,&AMText,NULL,NULL,28,NULL }; static struct IntuiText LIText = { 1,0,JAM1,29,1,NULL,(UBYTE *)"LONGINT",NULL }; static struct Gadget LI = { &AM,365,58,114,9,NULL,TOGGLESELECT,BOOLGADGET, (APTR)&SINBorder,NULL,&LIText,NULL,NULL,27,NULL }; static struct IntuiText SRText = { 1,0,JAM1,12,1,NULL,(UBYTE *)"STRINGRIGHT",NULL }; static struct Gadget SR = { &LI,365,46,114,9,NULL,GADGIMMEDIATE+TOGGLESELECT,BOOLGADGET, (APTR)&SINBorder,NULL,&SRText,1L,NULL,26,NULL }; static struct IntuiText SCText = { 1,0,JAM1,8,1,NULL,(UBYTE *)"STRINGCENTER",NULL }; static struct Gadget SC = { &SR,365,34,114,9,NULL,GADGIMMEDIATE+TOGGLESELECT,BOOLGADGET, (APTR)&SINBorder,NULL,&SCText,2L,NULL,25,NULL }; static struct IntuiText UBText = { 1,0,JAM1,16,1,NULL,(UBYTE *)"UNDOBUFFER",NULL }; static struct Gadget UB = { &SC,365,22,114,9,NULL,TOGGLESELECT,BOOLGADGET, (APTR)&SINBorder,NULL,&UBText,NULL,NULL,24,NULL }; static UBYTE VBBuff[4] = "0"; static struct StringInfo VBInfo = { VBBuff,UNDOBUFFER,0,4,0,0,0,0,0,0,0,0,NULL }; static struct IntuiText VBText = { 2,0,JAM1,-46,1,NULL,(UBYTE *)"VBODY",NULL }; static struct Gadget VB = { &UB,282,84,67,8,NULL,RELVERIFY+STRINGCENTER+LONGINT,STRGADGET, (APTR)&BBorder,NULL,&VBText,NULL,(APTR)&VBInfo,23,NULL }; static UBYTE HBBuff[4] = "0"; static struct StringInfo HBInfo = { HBBuff,UNDOBUFFER,0,4,0,0,0,0,0,0,0,0,NULL }; static struct IntuiText HBText = { 2,0,JAM1,-46,1,NULL,(UBYTE *)"HBODY",NULL }; static struct Gadget HB = { &VB,282,71,67,8,NULL,RELVERIFY+STRINGCENTER+LONGINT,STRGADGET, (APTR)&BBorder,NULL,&HBText,NULL,(APTR)&HBInfo,22,NULL }; static struct IntuiText PBText = { 1,0,JAM1,1,1,NULL,(UBYTE *)"PROPBORDERLESS",NULL }; static struct Gadget PB = { &HB,238,58,114,9,NULL,TOGGLESELECT,BOOLGADGET, (APTR)&SINBorder,NULL,&PBText,NULL,NULL,21,NULL }; static struct IntuiText FVText = { 1,0,JAM1,24,1,NULL,(UBYTE *)"FREEVERT",NULL }; static struct Gadget FV = { &PB,238,46,114,9,NULL,TOGGLESELECT,BOOLGADGET, (APTR)&SINBorder,NULL,&FVText,NULL,NULL,20,NULL }; static struct IntuiText FHText = { 1,0,JAM1,20,1,NULL,(UBYTE *)"FREEHORIZ",NULL }; static struct Gadget FH = { &FV,238,34,114,9,NULL,TOGGLESELECT,BOOLGADGET, (APTR)&SINBorder,NULL,&FHText,NULL,NULL,19,NULL }; static struct IntuiText AKText = { 1,0,JAM1,25,1,NULL,(UBYTE *)"AUTOKNOB",NULL }; static struct Gadget AK = { &FH,238,22,114,9,NULL,GADGIMMEDIATE+TOGGLESELECT,BOOLGADGET, (APTR)&SINBorder,NULL,&AKText,NULL,NULL,18,NULL }; static SHORT ACTPairs[] = { 0,0,106,0,106,10,0,10,0,0 }; static struct Border ACTBorder = { -1,-1,1,0,JAM1,5,ACTPairs,NULL }; static struct IntuiText FMText = { 1,0,JAM1,8,1,NULL,(UBYTE *)"FOLLOWMOUSE",NULL }; static struct Gadget FM = { &AK,120,118,105,9,NULL,TOGGLESELECT,BOOLGADGET, (APTR)&ACTBorder,NULL,&FMText,NULL,NULL,17,NULL }; static struct IntuiText EGText = { 1,0,JAM1,15,1,NULL,(UBYTE *)"ENDGADGET",NULL }; static struct Gadget EG = { &FM,120,106,105,9,NULL,TOGGLESELECT,BOOLGADGET, (APTR)&ACTBorder,NULL,&EGText,NULL,NULL,16,NULL }; static struct IntuiText BBText = { 1,0,JAM1,4,1,NULL,(UBYTE *)"BOTTOMBORDER",NULL }; static struct Gadget BB = { &EG,120,94,105,9,NULL,TOGGLESELECT,BOOLGADGET, (APTR)&ACTBorder,NULL,&BBText,NULL,NULL,15,NULL }; static struct IntuiText TBText = { 1,0,JAM1,16,1,NULL,(UBYTE *)"TOPBORDER",NULL }; static struct Gadget TB = { &BB,120,82,105,9,NULL,TOGGLESELECT,BOOLGADGET, (APTR)&ACTBorder,NULL,&TBText,NULL,NULL,14,NULL }; static struct IntuiText LBText = { 1,0,JAM1,13,1,NULL,(UBYTE *)"LEFTBORDER",NULL }; static struct Gadget LB = { &TB,120,70,105,9,NULL,TOGGLESELECT,BOOLGADGET, (APTR)&ACTBorder,NULL,&LBText,NULL,NULL,13,NULL }; static struct IntuiText RBText = { 1,0,JAM1,9,1,NULL,(UBYTE *)"RIGHTBORDER",NULL }; static struct Gadget RB = { &LB,120,58,105,9,NULL,TOGGLESELECT,BOOLGADGET, (APTR)&ACTBorder,NULL,&RBText,NULL,NULL,12,NULL }; static struct IntuiText GIMText = { 1,0,JAM1,1,1,NULL,(UBYTE *)"GADGIMMEDIATE",NULL }; static struct Gadget GIM = { &RB,120,46,105,9,NULL,TOGGLESELECT,BOOLGADGET, (APTR)&ACTBorder,NULL,&GIMText,NULL,NULL,11,NULL }; static struct IntuiText RVYText = { 1,0,JAM1,16,1,NULL,(UBYTE *)"RELVERIFY",NULL }; static struct Gadget RVY = { &GIM,120,34,105,9,NULL,TOGGLESELECT,BOOLGADGET, (APTR)&ACTBorder,NULL,&RVYText,NULL,NULL,10,NULL }; static struct IntuiText TGSText = { 1,0,JAM1,4,1,NULL,(UBYTE *)"TOGGLESELECT",NULL }; static struct Gadget TGS = { &RVY,120,22,105,9,NULL,TOGGLESELECT,BOOLGADGET, (APTR)&ACTBorder,NULL,&TGSText,NULL,NULL,9,NULL }; static SHORT FLGPairs[] = { 0,0,98,0,98,10,0,10,0,0 }; static struct Border FLGBorder = { -1,-1,1,0,JAM1,5,FLGPairs,NULL }; static struct IntuiText GDDText = { 1,0,JAM1,1,1,NULL,(UBYTE *)"GADGDISABLED",NULL }; static struct Gadget GDD = { &TGS,10,118,97,9,NULL,TOGGLESELECT,BOOLGADGET, (APTR)&FLGBorder,NULL,&GDDText,NULL,NULL,8,NULL }; static struct IntuiText SLCText = { 1,0,JAM1,17,1,NULL,(UBYTE *)"SELECTED",NULL }; static struct Gadget SLC = { &GDD,10,106,97,9,NULL,TOGGLESELECT,BOOLGADGET, (APTR)&FLGBorder,NULL,&SLCText,NULL,NULL,7,NULL }; static struct IntuiText GRHText = { 1,0,JAM1,9,1,NULL,(UBYTE *)"GRELHEIGHT",NULL }; static struct Gadget GRH = { &SLC,10,94,97,9,NULL,TOGGLESELECT,BOOLGADGET, (APTR)&FLGBorder,NULL,&GRHText,NULL,NULL,6,NULL }; static struct IntuiText GRWText = { 1,0,JAM1,12,1,NULL,(UBYTE *)"GRELWIDTH",NULL }; static struct Gadget GRW = { &GRH,10,82,97,9,NULL,TOGGLESELECT,BOOLGADGET, (APTR)&FLGBorder,NULL,&GRWText,NULL,NULL,5,NULL }; static struct IntuiText GRRText = { 1,0,JAM1,12,1,NULL,(UBYTE *)"GRELRIGHT",NULL }; static struct Gadget GRR = { &GRW,10,70,97,9,NULL,TOGGLESELECT,BOOLGADGET, (APTR)&FLGBorder,NULL,&GRRText,NULL,NULL,4,NULL }; static struct IntuiText GRBText = { 1,0,JAM1,8,1,NULL,(UBYTE *)"GRELBOTTOM",NULL }; static struct Gadget GRB = { &GRR,10,58,97,9,NULL,TOGGLESELECT,BOOLGADGET, (APTR)&FLGBorder,NULL,&GRBText,NULL,NULL,3,NULL }; static struct IntuiText GDHBText = { 1,0,JAM1,14,1,NULL,(UBYTE *)"GADGHBOX",NULL }; static struct Gadget GDHB = { &GRB,10,46,97,9,NULL,GADGIMMEDIATE+TOGGLESELECT,BOOLGADGET, (APTR)&FLGBorder,NULL,&GDHBText,3L,NULL,2,NULL }; static struct IntuiText GDHCText = { 1,0,JAM1,12,1,NULL,(UBYTE *)"GADGHCOMP",NULL }; static struct Gadget GDHC = { &GDHB,10,34,97,9,NULL,GADGIMMEDIATE+TOGGLESELECT,BOOLGADGET, (APTR)&FLGBorder,NULL,&GDHCText,5L,NULL,1,NULL }; static struct IntuiText GDHNText = { 1,0,JAM1,12,1,NULL,(UBYTE *)"GADGHNONE",NULL }; static struct Gadget GDHN = { &GDHC,10,22,97,9,NULL,GADGIMMEDIATE+TOGGLESELECT,BOOLGADGET, (APTR)&FLGBorder,NULL,&GDHNText,6L,NULL,0,NULL }; static struct NewScreen ns = { 0,0,640,132,2,0,1,HIRES,CUSTOMSCREEN|SCREENBEHIND,NULL,NULL,NULL,NULL }; static struct NewWindow nw = { 0,0,640,132,0,1,GADGETUP|GADGETDOWN,SIMPLE_REFRESH+ACTIVATE+RMBTRAP+NOCAREREFRESH, NULL,NULL,(UBYTE *)"Edit Gadget",NULL,NULL,0,0,0,0,CUSTOMSCREEN }; static struct Window *w; static struct Screen *s; static struct RastPort *rp; static struct IntuiMessage *msg; static USHORT id; extern struct Window *MainWindow; extern struct IntuitionBase *IntuitionBase; extern struct MemoryChain Memory; extern BOOL REQUESTER; static USHORT my_colors[4] = { 0xCCC,0x000,0xFB9,0x843 }; /* * setup the main display */ static VOID backfill() { register struct Gadget *g; register struct Border *b; register SHORT *p, l, t, i; LoadRGB4(&s->ViewPort,&my_colors[0],4); g = &GDHN; b = &MainBorder1; SetAPen(rp,3); while(1) { p = b->XY; l = b->LeftEdge; t = b->TopEdge; RectFill(rp,l+p[0],t+p[1],l+p[4],t+p[5]); if(NOT(b = b->NextBorder)) break; } SetAPen(rp,2); while(1) { l = g->LeftEdge; t = g->TopEdge; if(g != &BRD) RectFill(rp,l,t,l + g->Width,t + g->Height); if(NOT(g = g->NextGadget)) break; } SetAPen(rp,0); RectFill(rp,280,82,352,93); RectFill(rp,407,82,479,93); RectFill(rp,280,69,352,80); RectFill(rp,239,111,477,120); } /* * default the gadget flags of the control window */ static VOID clear_gadgets() { register struct Gadget *g; g = &GDHN; while(1) { if((g != &HB)&&(g != &VB)&&(g != &SZ)&& (g != &SL)&&(g != &OK)&&(g != &CN)&&(g != &BRD)) g->Flags = NULL; if(NOT(g = g->NextGadget)) break; } SLBuff[0] = 0; strcpy((char *)HBBuff,"0"); strcpy((char *)VBBuff,"0"); strcpy((char *)SZBuff,"256"); } /* * set the gadgets according to the information * found in the MyGadget structure 'g' */ static VOID set_gadgets(g) struct MyGadget *g; { register ULONG flags, act, type; struct Gadget *gadget; struct PropInfo *pinfo; struct StringInfo *sinfo; gadget = &g->Gadget; flags = (ULONG)gadget->Flags; act = (ULONG)gadget->Activation; type = (ULONG)gadget->GadgetType; if((TestBits((ULONG)gadget->Flags,GADGIMAGE)) OR (gadget->SpecialInfo) OR (gadget->GadgetText)) GadgetOff(w,&BO,NULL); if(REQUESTER) { OffGList(w,&GRB,NULL,4); OffGList(w,&RB,NULL,4); } else GadgetOff(w,&EG,NULL); if(TestBits(flags,GADGIMAGE)) GadgetOff(w,&AK,NULL); if((TestBits(flags,GADGHIMAGE)) AND (NOT TestBits(flags,GADGHBOX))) OffGList(w,&GDHN,NULL,3); else if((TestBits(flags,GADGHIMAGE)) AND (TestBits(flags,GADGHBOX))) SelectGadget(w,&GDHN,NULL); else if(TestBits(flags,GADGHBOX)) SelectGadget(w,&GDHB,NULL); else SelectGadget(w,&GDHC,NULL); if(TestBits(flags,GRELBOTTOM)) SelectGadget(w,&GRB,NULL); if(TestBits(flags,GRELRIGHT)) SelectGadget(w,&GRR,NULL); if(TestBits(flags,GRELWIDTH)) SelectGadget(w,&GRW,NULL); if(TestBits(flags,GRELHEIGHT)) SelectGadget(w,&GRH,NULL); if(TestBits(flags,SELECTED)) SelectGadget(w,&SLC,NULL); if(TestBits((ULONG)g->SpecialFlags,GADGETOFF)) SelectGadget(w,&GDD,NULL); if(TestBits(act,TOGGLESELECT)) SelectGadget(w,&TGS,NULL); if(!TestBits((ULONG)g->SpecialFlags,NOSIGNAL)) { if(TestBits(act,RELVERIFY)) SelectGadget(w,&RVY,NULL); if(TestBits(act,GADGIMMEDIATE)) SelectGadget(w,&GIM,NULL); } if(TestBits(act,RIGHTBORDER)) SelectGadget(w,&RB,NULL); if(TestBits(act,LEFTBORDER)) SelectGadget(w,&LB,NULL); if(TestBits(act,TOPBORDER)) SelectGadget(w,&TB,NULL); if(TestBits(act,BOTTOMBORDER)) SelectGadget(w,&BB,NULL); if(TestBits(act,ENDGADGET)) SelectGadget(w,&EG,NULL); if(TestBits(act,FOLLOWMOUSE)) SelectGadget(w,&FM,NULL); if(TestBits(type,PROPGADGET)) { SelectGadget(w,&PR,NULL); pinfo = (struct PropInfo *)gadget->SpecialInfo; flags = (ULONG)pinfo->Flags; if(TestBits(flags,AUTOKNOB)) SelectGadget(w,&AK,NULL); if(TestBits(flags,FREEHORIZ)) SelectGadget(w,&FH,NULL); if(TestBits(flags,FREEVERT)) SelectGadget(w,&FV,NULL); if(TestBits(flags,PROPBORDERLESS)) SelectGadget(w,&PB,NULL); if(pinfo->HorizBody == MAXBODY) { strcpy((char *)HBBuff,"0"); HBInfo.LongInt = 0; } else { Format((char *)HBBuff,"%ld",MAXBODY / pinfo->HorizBody); HBInfo.LongInt = MAXBODY / pinfo->HorizBody; } if(pinfo->VertBody == MAXBODY) { strcpy((char *)VBBuff,"0"); VBInfo.LongInt = 0; } else { Format((char *)VBBuff,"%ld",MAXBODY / pinfo->VertBody); VBInfo.LongInt = MAXBODY / pinfo->VertBody; } } else if(TestBits(type,STRGADGET)) { SelectGadget(w,&ST,NULL); sinfo = (struct StringInfo *)gadget->SpecialInfo; if(sinfo->UndoBuffer) SelectGadget(w,&UB,NULL); if(TestBits(act,STRINGCENTER)) SelectGadget(w,&SC,NULL); if(TestBits(act,STRINGRIGHT)) SelectGadget(w,&SR,NULL); if(TestBits(act,LONGINT)) SelectGadget(w,&LI,NULL); if(TestBits(act,ALTKEYMAP)) SelectGadget(w,&AM,NULL); Format((char *)SZBuff,"%ld",sinfo->MaxChars); } else SelectGadget(w,&BL,NULL); if(TestBits((ULONG)g->SpecialFlags,BORDERONLY)) SelectGadget(w,&BO,NULL); if(TestBits((ULONG)g->SpecialFlags,GZZGADGET)) SelectGadget(w,&GZ,NULL); strcpy((char *)SLBuff,(char *)g->GadgetLabel); RefreshGList(&HB,w,NULL,2); RefreshGList(&SZ,w,NULL,1); RefreshGList(&SL,w,NULL,1); } /* * change the gadget according to the control window */ static BOOL change_gadget(gad) struct MyGadget *gad; { struct Border *b; struct Image *gi, *si; struct StringInfo *s; struct PropInfo *p; struct Gadget *g; USHORT bfpen, i; BOOL image_render = FALSE, simage_render = FALSE; ULONG size; g = &gad->Gadget; if((TestBits(g->Flags,GADGIMAGE))) { image_render = TRUE; gi = (struct Image *)g->GadgetRender; } else if(NOT(TestBits(g->GadgetType,PROPGADGET))) { b = (struct Border *)g->GadgetRender; bfpen = b->FrontPen; FreeItem(&Memory,b->XY,20L); FreeItem(&Memory,b,(long)sizeof(struct Border)); } if((TestBits(g->Flags,GADGHIMAGE)) AND (NOT TestBits(g->Flags,GADGHBOX))) { simage_render = TRUE; si = (struct Image *)g->SelectRender; } if(TestBits(g->GadgetType,PROPGADGET)) { if(image_render == FALSE) FreeItem(&Memory,g->GadgetRender,(long)sizeof(struct Image)); FreeItem(&Memory,g->SpecialInfo,(long)sizeof(struct PropInfo)); } else if(TestBits(g->GadgetType,STRGADGET)) { s = (struct StringInfo *)g->SpecialInfo; if(s->Buffer) FreeItem(&Memory,s->Buffer,s->MaxChars); if(s->UndoBuffer) FreeItem(&Memory,s->UndoBuffer,s->MaxChars); FreeItem(&Memory,s,(long)sizeof(struct StringInfo)); } g->Flags = g->Activation = g->GadgetType = gad->SpecialFlags = NULL; g->SpecialInfo = NULL; if(SelectTest(&GDHN)) g->Flags = GADGHNONE; else if(SelectTest(&GDHB)) g->Flags = GADGHBOX; else if(SelectTest(&GDHC)) g->Flags = GADGHCOMP; else g->Flags = GADGHIMAGE; if(image_render == TRUE) g->Flags |= GADGIMAGE; if(SelectTest(&GRB)) g->Flags |= GRELBOTTOM; if(SelectTest(&GRR)) g->Flags |= GRELRIGHT; if(SelectTest(&GRW)) g->Flags |= GRELWIDTH; if(SelectTest(&GRH)) g->Flags |= GRELHEIGHT; if(SelectTest(&SLC)) g->Flags |= SELECTED; if(SelectTest(&GDD)) gad->SpecialFlags |= GADGETOFF; if(SelectTest(&TGS)) g->Activation |= TOGGLESELECT; if(SelectTest(&RVY)) g->Activation |= RELVERIFY; if(SelectTest(&GIM)) g->Activation |= GADGIMMEDIATE; if(SelectTest(&RB)) g->Activation |= RIGHTBORDER; if(SelectTest(&LB)) g->Activation |= LEFTBORDER; if(SelectTest(&TB)) g->Activation |= TOPBORDER; if(SelectTest(&BB)) g->Activation |= BOTTOMBORDER; if(SelectTest(&EG)) g->Activation |= ENDGADGET; if(SelectTest(&FM)) g->Activation |= FOLLOWMOUSE; if(SelectTest(&PR)) { g->GadgetType = PROPGADGET; if(NOT(p = (struct PropInfo *)Alloc(&Memory,(ULONG)sizeof(struct PropInfo)))) { Error("Out of memory !"); return(FALSE); } if(NOT(TestBits(g->Flags,GADGIMAGE))) { if(NOT(g->GadgetRender = Alloc(&Memory,(ULONG)sizeof(struct Image)))) { Error("Out of memory !"); return(FALSE); } } if(SelectTest(&AK)) p->Flags |= AUTOKNOB; if(SelectTest(&FH)) p->Flags |= FREEHORIZ; if(SelectTest(&FV)) p->Flags |= FREEVERT; if(SelectTest(&PB)) p->Flags |= PROPBORDERLESS; if(HBInfo.LongInt <= NULL) p->HorizBody = MAXBODY; else p->HorizBody = MAXBODY / HBInfo.LongInt; if(VBInfo.LongInt <= NULL) p->VertBody = MAXBODY; else p->VertBody = MAXBODY / VBInfo.LongInt; g->SpecialInfo = (APTR)p; } else if(SelectTest(&ST)) { g->GadgetType = STRGADGET; if(SelectTest(&SC)) g->Activation |= STRINGCENTER; if(SelectTest(&SR)) g->Activation |= STRINGRIGHT; if(SelectTest(&LI)) g->Activation |= LONGINT; if(SelectTest(&AM)) g->Activation |= ALTKEYMAP; if(NOT(s = (struct StringInfo *)Alloc(&Memory,(ULONG)sizeof(struct StringInfo)))) { Error("Out of memory !"); return(FALSE); } size = SZInfo.LongInt; s->MaxChars = SZInfo.LongInt; if(NOT(s->Buffer = (UBYTE *)Alloc(&Memory,size))) { Error("Out of memory !"); return(FALSE); } if(SelectTest(&UB)) { if(NOT(s->UndoBuffer = (UBYTE *)Alloc(&Memory,size))) { Error("Out of memory !"); return(FALSE); }; } g->SpecialInfo = (APTR)s; } else g->GadgetType = BOOLGADGET; if(SelectTest(&BO)) gad->SpecialFlags |= BORDERONLY; if(SelectTest(&GZ)) gad->SpecialFlags |= GZZGADGET; if((!SelectTest(&TGS)) AND (!SelectTest(&RVY))) { g->Activation = RELVERIFY; gad->SpecialFlags = NOSIGNAL; } if(TestBits(g->Flags,GADGHIMAGE)) g->SelectRender = (APTR)si; if(TestBits(g->Flags,GADGIMAGE)) g->GadgetRender = (APTR)gi; else { if(NOT(TestBits(g->GadgetType,PROPGADGET))) { if(add_border(g) == FALSE) { Error("Out of memory !"); return(FALSE); } ((struct Border *)g->GadgetRender)->FrontPen = bfpen; } } for(i=0;iGadgetLabel,(char *)SLBuff); return(TRUE); } /* * open the gadget editor control display */ BOOL edit_gadget(gadget) struct MyGadget *gadget; { struct Gadget *g; buisy(); ns.TopEdge = IntuitionBase->ActiveScreen->Height - 132; if(NOT(s = OpenScreen(&ns))) { Error("Can't open display !"); return(FALSE); } clear_gadgets(); nw.Screen = s; if(NOT(w = OpenWindow(&nw))) { Error("Can't open display !"); CloseScreen(s); return(FALSE); } ScreenToFront(s); rp = w->RPort; backfill(); AddGList(w,&GDHN,-1L,39,NULL); RefreshGList(&GDHN,w,NULL,39); set_gadgets(gadget); do { Wait(1 << w->UserPort->mp_SigBit); while((msg = (struct IntuiMessage *)GetMsg(w->UserPort))) { g = (struct Gadget *)msg->IAddress; id = g->GadgetID; ReplyMsg((struct Message *)msg); switch(id) { case 0: case 1: case 2: MutualExclude(w,g,&GDHN,NULL); SelectGadget(w,g,NULL); break; case 31: if(NOT TestBits(gadget->Gadget.Flags,GADGIMAGE)) SelectGadget(w,&AK,NULL); case 32: DeSelectGadget(w,&BO,NULL); GadgetOff(w,&BO,NULL); case 30: MutualExclude(w,g,&BL,NULL); SelectGadget(w,g,NULL); break; case 18: SelectGadget(w,g,NULL); break; case 25: case 26: MutualExclude(w,g,&SC,NULL); break; default: break; } } } while(id != 34 && id != 35); CloseWindow(w); CloseScreen(s); ok(); if(id == 34) return(change_gadget(gadget)); return(TRUE); }