/************************************************************************* *** gadg.c (JJB TEMPLAR) *** *** Date begun: 9/8/89. *** *** Last modified: 16/8/89. *** *************************************************************************/ /*** Gadget data for ty. *** *************************************************************************/ #include #include #include #include "image.h" #include "gadg.h" #include "position.h" static struct Image g_img[22] = { {0,0,14,8,2,image1,3,0,NULL}, {0,0,14,8,2,image2,3,0,NULL}, {0,0,14,8,2,image3,3,0,NULL}, {0,0,14,8,2,image4,3,0,NULL}, {0,0,14,8,2,image5,3,0,NULL}, {0,0,14,8,2,image6,3,0,NULL}, {0,0,14,8,2,image7,3,0,NULL}, {0,0,14,8,2,image8,3,0,NULL}, {0,0,14,8,2,image9,3,0,NULL}, {NULL}, /* AutoKnob. Don't need to initialize */ {0,0,16,8,2,image11,3,0,NULL}, {0,0,16,8,2,image12,3,0,NULL}, {0,0,16,8,2,image13,3,0,NULL}, {0,0,16,8,2,image14,3,0,NULL}, {0,0,16,8,2,image15,3,0,NULL}, {0,0,16,8,2,image16,3,0,NULL}, {0,0,16,8,2,image17,3,0,NULL}, {0,0,16,8,2,image18,3,0,NULL}, {0,0,16,8,2,image19,3,0,NULL}, {0,0,16,8,2,image20,3,0,NULL}, {0,0,16,8,2,image21,3,0,NULL}, {NULL}}; /* AutoKnob. Don't need to initialize */ static struct PropInfo barspec = { AUTOKNOB|FREEVERT,0,0,0,0x5555,}; static struct PropInfo hbrspec = { AUTOKNOB|FREEHORIZ,0,0,0xffff/6,0,}; /* Basically 6 positions, * independent of sc_width */ static struct Gadget gads[22] = { {NULL,-15,11,14,8,GADGHCOMP|GADGIMAGE|GRELRIGHT, RELVERIFY,BOOLGADGET,(APTR)&g_img[0],NULL,NULL,NULL,NULL,G_UP,NULL}, {&gads[0],-15,-80,14,8,GADGHCOMP|GADGIMAGE|GRELRIGHT|GRELBOTTOM, RELVERIFY,BOOLGADGET,(APTR)&g_img[1],NULL,NULL,NULL,NULL,G_DOWN,NULL}, {&gads[1],-15,-71,14,8,GADGHCOMP|GADGIMAGE|GRELRIGHT|GRELBOTTOM, RELVERIFY,BOOLGADGET,(APTR)&g_img[2],NULL,NULL,NULL,NULL,G_LEFT,NULL}, {&gads[2],-15,-62,14,8,GADGHCOMP|GADGIMAGE|GRELRIGHT|GRELBOTTOM, RELVERIFY,BOOLGADGET,(APTR)&g_img[3],NULL,NULL,NULL,NULL,G_RIGHT,NULL}, {&gads[3],-15,-53,14,8,GADGHCOMP|GADGIMAGE|GRELRIGHT|GRELBOTTOM, RELVERIFY,BOOLGADGET,(APTR)&g_img[4],NULL,NULL,NULL,NULL,G_HELP,NULL}, {&gads[4],-15,-44,14,8,GADGHCOMP|GADGIMAGE|GRELRIGHT|GRELBOTTOM, RELVERIFY,BOOLGADGET,(APTR)&g_img[5],NULL,NULL,NULL,NULL,G_SEARCH,NULL}, {&gads[5],-15,-35,14,8,GADGHCOMP|GADGIMAGE|GRELRIGHT|GRELBOTTOM, RELVERIFY,BOOLGADGET,(APTR)&g_img[6],NULL,NULL,NULL,NULL,G_MARK,NULL}, {&gads[6],-15,-26,14,8,GADGHCOMP|GADGIMAGE|GRELRIGHT|GRELBOTTOM, RELVERIFY,BOOLGADGET,(APTR)&g_img[7],NULL,NULL,NULL,NULL,G_MODE,NULL}, {&gads[7],-15,-17,14,8,GADGHCOMP|GADGIMAGE|GRELRIGHT|GRELBOTTOM, RELVERIFY,BOOLGADGET,(APTR)&g_img[8],NULL,NULL,NULL,NULL,G_BOOM,NULL}, {&gads[8],-15,20,16,-102,GADGHCOMP|GADGIMAGE|GRELRIGHT|GRELHEIGHT, RELVERIFY,PROPGADGET,(APTR)&g_img[9],NULL,NULL,NULL,(APTR)&barspec,G_SCROLL,NULL}, {&gads[9], 4,-8,16,8,GADGHCOMP|GADGIMAGE|GRELBOTTOM, RELVERIFY|BOTTOMBORDER,BOOLGADGET,(APTR)&g_img[10],NULL,NULL,NULL,NULL,G_LEFT,NULL}, {&gads[10],-195,-8,16,8,GADGHCOMP|GADGIMAGE|GRELRIGHT|GRELBOTTOM, RELVERIFY,BOOLGADGET,(APTR)&g_img[11],NULL,NULL,NULL,NULL,G_RIGHT,NULL}, {&gads[11],-177,-8,16,8,GADGHCOMP|GADGIMAGE|GRELRIGHT|GRELBOTTOM, RELVERIFY,BOOLGADGET,(APTR)&g_img[12],NULL,NULL,NULL,NULL,G_PERCENT,NULL}, {&gads[12],-159,-8,16,8,GADGHCOMP|GADGIMAGE|GRELRIGHT|GRELBOTTOM, RELVERIFY,BOOLGADGET,(APTR)&g_img[13],NULL,NULL,NULL,NULL,G_VERSION,NULL}, {&gads[13],-141,-8,16,8,GADGHCOMP|GADGIMAGE|GRELRIGHT|GRELBOTTOM, RELVERIFY,BOOLGADGET,(APTR)&g_img[14],NULL,NULL,NULL,NULL,G_REPAINT,NULL}, {&gads[14],-123,-8,16,8,GADGHCOMP|GADGIMAGE|GRELRIGHT|GRELBOTTOM, RELVERIFY,BOOLGADGET,(APTR)&g_img[15],NULL,NULL,NULL,NULL,G_PRINT,NULL}, {&gads[15],-105,-8,16,8,GADGHCOMP|GADGIMAGE|GRELRIGHT|GRELBOTTOM, RELVERIFY,BOOLGADGET,(APTR)&g_img[16],NULL,NULL,NULL,NULL,G_TOP,NULL}, {&gads[16], -87,-8,16,8,GADGHCOMP|GADGIMAGE|GRELRIGHT|GRELBOTTOM, RELVERIFY,BOOLGADGET,(APTR)&g_img[17],NULL,NULL,NULL,NULL,G_BOTTOM,NULL}, {&gads[17], -69,-8,16,8,GADGHCOMP|GADGIMAGE|GRELRIGHT|GRELBOTTOM, RELVERIFY,BOOLGADGET,(APTR)&g_img[18],NULL,NULL,NULL,NULL,G_PREV,NULL}, {&gads[18], -51,-8,16,8,GADGHCOMP|GADGIMAGE|GRELRIGHT|GRELBOTTOM, RELVERIFY,BOOLGADGET,(APTR)&g_img[19],NULL,NULL,NULL,NULL,G_FILE,NULL}, {&gads[19], -33,-8,16,8,GADGHCOMP|GADGIMAGE|GRELRIGHT|GRELBOTTOM, RELVERIFY,BOOLGADGET,(APTR)&g_img[20],NULL,NULL,NULL,NULL,G_NEXT,NULL}, {&gads[20], 22,-8,-220,9,GADGHCOMP|GADGIMAGE|GRELWIDTH|GRELBOTTOM, RELVERIFY,PROPGADGET,(APTR)&g_img[21],NULL,NULL,NULL,(APTR)&hbrspec,G_HSCROLL,NULL}}; struct Gadget *fgadg = &(gads[21]); extern struct Window *Window; extern int sc_height,sc_width; extern int scroll_bar; extern int l_start; extern LONG position(int); /* Access to position table */ extern void printf(char *); extern char *strint(int); extern void jump_back(int); extern int linecount(); static LONG size,scr; void mModifyProp(g,s,hp,vp,hb,vb) /*==================================*/ struct Gadget *g; /* Do this because Intuition fn doesn't have a */ struct PropInfo *s; /* prototype, and I don't want refs to amiga.lib */ UWORD hp,vp,hb,vb; /* since I'm trying to use cres.o */ { s->HorizPot = hp; s->VertPot = vp; s->HorizBody = hb; s->VertBody = vb; OnGadget(g,Window,NULL); /* Should do redraw. Will it do recalc? */ } void setbar(f) /*=====================================================*/ int f; /* If f is true, then re-calc proportions. */ { /* 2 means reset both sizes, 1 means reset screen size */ register LONG pos; register LONG temp; register UWORD vp,vb; if (!scroll_bar && (f < 2)) return; if (!scroll_bar) { mModifyProp(&gads[9],&barspec,0,0,0,0xffff); OffGadget(&gads[9],Window,NULL); return; /* If f == 2, and no bar, then make knob full size */ } pos = position(TOP)/60; /* Assume about 60chars/line, for now. */ if (f == 2) size = linecount(); /* Reset file size */ if ((pos <= 0) || (pos > size)) vp = 0x0000; /* Ensure size >= pos */ else { temp = size/pos; /* Can't be div by zero because just checked */ vp = 0xffff/temp; /* Can't be div by zero because size >= pos */ } if (f >= 1) { scr = sc_height; if ((scr <= 0) || (scr > size)) vb = 0xffff; else { temp = size/scr; vb = 0xffff/temp; } } else vb = barspec.VertBody; mModifyProp(&gads[9],&barspec,0,vp,0,vb); } void usebar() /*======================================================*/ { register ULONG vp,pos; if (!scroll_bar) return; /* Shouldn't happen, because bar should be off */ vp = barspec.VertPot; pos = (vp * size) >> 16; pos -= scr; if (pos < 1) pos = 1; jump_back(pos); /* Line oriented */ } int rbut(msg) /*=====================================================*/ struct IntuiMessage *msg; /* Go through gadget list, and return GadgetID */ { register int x,y,my; register struct Gadget *gp; x = msg->MouseX; y = msg->MouseY; my = (y - Window->Height) + 1; gp = &gads[8]; /* Skip scroll bar */ /* Out of bounds? */ if ((x < Window->Width-16) || (x > Window->Width-3) || (y < 11) || (y > Window->Height - 11)) return(G_NULL); while (gp) { if (gp->Flags & GRELBOTTOM) { if ((my >= gp->TopEdge) && (my < gp->TopEdge + 8)) return(gp->GadgetID); } else { if ((y >= gp->TopEdge) && (y < gp->TopEdge + 8)) return(gp->GadgetID); } gp = gp->NextGadget; } return(G_NULL); } void sethbar() /*=====================================================*/ { hbrspec.HorizPot = (0xffff / 60) * l_start; OnGadget(&gads[21],Window,NULL); /* Better than ModifyProp */ } void usehbar() /*=====================================================*/ { l_start = (hbrspec.HorizPot * 60) / 0xffff; }