/* * GADGET.C * * (c)Copyright 1987 Matthew Dillon, All Rights Reserved. * */ #include "files.h" #define NI 0 static BORDER Bdr[10]; static ITEXT BText[] = { { 3,0,JAM2,1,0,NULL,(ubyte *)"info"}, { 3,0,JAM2,1,0,NULL,(ubyte *)"del" }, { 3,0,JAM2,1,0,NULL,(ubyte *)"undo"}, { 3,0,JAM2,1,0,NULL,(ubyte *)"all" } }; static ITEXT SText[] = { { 3,0,JAM2,NI,-2,NULL,(ubyte *)"Volume: " }, { 3,0,JAM2,NI,-2,NULL,(ubyte *)"Pattern: " }, { 3,0,JAM2,NI,-2,NULL,(ubyte *)"Comment: " } }; ubyte Buf1_vol[128]; ubyte Buf2_vol[128]; ubyte Buf1_pat[128]; ubyte Buf2_pat[128]; ubyte Buf1_com[128]; ubyte Buf2_com[128]; STRINGINFO Si_vol = { Buf1_vol,Buf2_vol,0,sizeof(Buf1_vol),0,0,0,0,0,0 }; STRINGINFO Si_pat = { Buf1_pat,Buf2_pat,0,sizeof(Buf2_pat),0,0,0,0,0,0 }; STRINGINFO Si_com = { Buf1_com,Buf2_com,0,sizeof(Buf2_com),0,0,0,0,0,0 }; GADGET Gad_vol = { NULL , NI, 0, NI, NI, GADGHCOMP|GRELWIDTH,GADGIMMEDIATE|RELVERIFY,STRGADGET,NI,NULL,&SText[0],NULL,(APTR)&Si_vol }; GADGET Gad_pat = { &Gad_vol , NI, 1, NI, NI, GADGHCOMP|GRELWIDTH,GADGIMMEDIATE|RELVERIFY,STRGADGET,NI,NULL,&SText[1],NULL,(APTR)&Si_pat }; GADGET Gad_com = { &Gad_pat , NI, 2, NI, NI, GADGHCOMP|GRELWIDTH,GADGIMMEDIATE|RELVERIFY,STRGADGET,NI,NULL,&SText[2],NULL,(APTR)&Si_com }; GADGET Gad_info= { &Gad_com , 5 ,-15, NI, NI, GADGHCOMP|GRELBOTTOM,GADGIMMEDIATE|RELVERIFY,BOOLGADGET,NI,NULL,&BText[0] }; GADGET Gad_del = { &Gad_info , 50,-15, NI, NI, GADGHCOMP|GRELBOTTOM,GADGIMMEDIATE|RELVERIFY,BOOLGADGET,NI,NULL,&BText[1] }; GADGET Gad_undo= { &Gad_del ,-110,-15, NI, NI,GADGHCOMP|GRELRIGHT|GRELBOTTOM,GADGIMMEDIATE|RELVERIFY,BOOLGADGET,NI,NULL,&BText[2] }; GADGET Gad_all = { &Gad_undo , -50,-15, NI, NI, GADGHCOMP|GRELRIGHT|GRELBOTTOM,GADGIMMEDIATE|RELVERIFY,BOOLGADGET,NI,NULL,&BText[3] }; GADGET *FirstGadget = &Gad_all; GADGET Gad_box = { NULL , NI, NI, NI, NI, GADGHNONE|GRELWIDTH|GRELHEIGHT,GADGIMMEDIATE|RELVERIFY|FOLLOWMOUSE,BOOLGADGET,NULL,NULL,NULL }; PROPINFO Prop_slid = { AUTOKNOB|FREEVERT, 0, 0, 0x30, 0x30 }; IMAGE Imag_slid = { 0,0,2,1,1,NULL,1,0,NULL }; GADGET Gad_slid = { NULL, -20, 12, 20, -30, GADGHCOMP|GRELHEIGHT|GRELRIGHT,GADGIMMEDIATE|RELVERIFY|RIGHTBORDER|FOLLOWMOUSE,PROPGADGET,(APTR)&Imag_slid,NULL,NULL,0,(APTR)&Prop_slid }; initslider(nw) NW *nw; { nw->FirstGadget = &Gad_slid; } initstructs() { register short i; register GADGET *gad; for (i = 0; i < sizeof(Bdr)/sizeof(Bdr[0]); ++i) { register BORDER *b = &Bdr[i]; register short *xy= malloc(5 * 2 * sizeof(short)); /*b->LeftEdge = b->TopEdge = -2;*/ b->FrontPen = 1; b->DrawMode = JAM2; b->Count = 5; b->XY = xy; bzero(xy, 5 * 2 * sizeof(short)); xy[2] = i * Win->RPort->TxWidth + 4; xy[4] = xy[2]; xy[5] = Win->RPort->TxHeight + 2; xy[7] = Win->RPort->TxHeight + 2; } for (i = 0; i < sizeof(SText)/sizeof(SText[0]); ++i) { register ITEXT *it = &SText[i]; it->LeftEdge = -strlen(it->IText) * Win->RPort->TxWidth + 2; it->TopEdge += 2; } for (i = 0; i < sizeof(BText)/sizeof(BText[0]); ++i) { register ITEXT *it = &BText[i]; it->LeftEdge+= 2; it->TopEdge += 2; } for (gad = FirstGadget; gad; gad = gad->NextGadget) { register ubyte *str = gad->GadgetText->IText; gad->Height = Win->RPort->TxHeight + 3; gad->Width = strlen(str) * Win->RPort->TxWidth + 5; if (gad->GadgetType == STRGADGET) { gad->LeftEdge = Win->BorderLeft + strlen(str) * Win->RPort->TxWidth + 2; gad->Width = -gad->LeftEdge - Win->BorderRight; gad->TopEdge = gad->TopEdge * (Win->RPort->TxHeight + 2) + Win->BorderTop; gad->GadgetText->LeftEdge = -strlen(str) * Win->RPort->TxWidth; } else { gad->GadgetRender = (APTR)&Bdr[strlen(str)]; } } Gad_box.LeftEdge= Win->BorderLeft; Gad_box.TopEdge = Gad_com.TopEdge + Win->RPort->TxHeight + 2; Gad_box.Width = -Gad_box.LeftEdge - Win->BorderRight; Gad_box.Height = -Gad_box.TopEdge + Gad_undo.TopEdge - 2; } addgadgets() { register GADGET *gad, *ngad; int i = 0; initstructs(Win); for (gad = FirstGadget; gad; gad = ngad) { ngad = gad->NextGadget; AddGadget(Win, gad, i); ++i; } AddGadget(Win, &Gad_box, i); RefreshGList(FirstGadget, Win, NULL, -1); } remgadgets() { } fixgadgets() { } getgadget(im, sel, str) IMESS *im; short *sel; ubyte **str; { GADGET *gad = (GADGET *)im->IAddress; *sel = gad->Flags & SELECTED; if (gad == &Gad_info) return(GAD_INFO); if (gad == &Gad_del) return(GAD_DEL); if (gad == &Gad_undo) return(GAD_UNDO); if (gad == &Gad_all) return(GAD_ALL); if (gad == &Gad_slid) return(GAD_SLIDER); if (gad == &Gad_box) return(GAD_BIGBOX); if (gad == &Gad_vol || gad == &Gad_pat || gad == &Gad_com) { *str = ((STRINGINFO *)gad->SpecialInfo)->Buffer; if (gad == &Gad_vol) return(GAD_VOLUME); if (gad == &Gad_pat) return(GAD_PATTERN); if (gad == &Gad_com) return(GAD_COMMENT); } return(0); } bigboxbounds(xs,xe,ys,ye) short *xs,*xe,*ys,*ye; { *xs = Gad_box.LeftEdge; *xe = *xs + Gad_box.Width + Win->Width; *ys = Gad_box.TopEdge; *ye = *ys + Gad_box.Height+ Win->Height; if (*xe <= *xs) *xe = *xs + 1; if (*ye <= *ys) *ye = *ys + 1; } getsliderpos(pot, full) short *pot, *full; { *pot = Prop_slid.VertPot; *full= Prop_slid.VertBody; } getboxpos(im) IMESS *im; { return(im->MouseY - Gad_box.TopEdge); } setslider(pos, fatness) { NewModifyProp(&Gad_slid, Win, NULL, AUTOKNOB|FREEVERT,0,pos,0,fatness,1); } setcomment(str) char *str; { strcpy(Buf1_com, str); RefreshGList(&Gad_com, Win, NULL, 1); } activate_vol() { ActivateGadget(&Gad_vol, Win, NULL); } activate_pat() { ActivateGadget(&Gad_pat, Win, NULL); } activate_com() { ActivateGadget(&Gad_com, Win, NULL); }