/************************************************************************

vJet V1.0 © 1992 Jan Pfeil · fileviewer for AMIGA
Last changes:   15.04.92

vJet gadget routines

************************************************************************/

#include <stdio.h>

#include <exec/memory.h>
#include <intuition/classusr.h>
#include <intuition/gadgetclass.h>
#include <intuition/icclass.h>
#include <intuition/imageclass.h>

#include <proto/dos.h>
#include <proto/exec.h>
#include <proto/intuition.h>

#include "extern.h"


struct Gadget *createWindowGadgets(struct vJet *vjet)
{
vjet->rightImage = (struct Image *)NewObject(NULL,SYSICLASS,
                SYSIA_Size,SYSISIZE_MEDRES,
                SYSIA_Which,RIGHTIMAGE,
                SYSIA_DrawInfo,vjet->dI,
                TAG_END);

vjet->rightArr = AllocMem(sizeof(struct Gadget),MEMF_PUBLIC+MEMF_CLEAR);
vjet->rightArr->NextGadget = NULL;
vjet->rightArr->LeftEdge = -33;
vjet->rightArr->TopEdge = -9;
vjet->rightArr->Width = 16;
vjet->rightArr->Height = 10;
vjet->rightArr->Flags = GFLG_GADGIMAGE+GFLG_GADGHIMAGE+GFLG_RELRIGHT+GFLG_RELBOTTOM;
vjet->rightArr->Activation = GACT_IMMEDIATE+GACT_RELVERIFY+GACT_BOTTOMBORDER;
vjet->rightArr->GadgetType = GTYP_BOOLGADGET+GTYP_GZZGADGET;
vjet->rightArr->GadgetRender = vjet->rightImage;
vjet->rightArr->SelectRender = vjet->rightImage;
vjet->rightArr->GadgetID = ARR_R;

vjet->leftImage = (struct Image *)NewObject(NULL,SYSICLASS,
                SYSIA_Size,SYSISIZE_MEDRES,
                SYSIA_Which,LEFTIMAGE,
                SYSIA_DrawInfo,vjet->dI,
                TAG_END);

vjet->leftArr = AllocMem(sizeof(struct Gadget),MEMF_PUBLIC+MEMF_CLEAR);
vjet->leftArr->NextGadget = vjet->rightArr;
vjet->leftArr->LeftEdge = -49;
vjet->leftArr->TopEdge = -9;
vjet->leftArr->Width = 16;
vjet->leftArr->Height = 10;
vjet->leftArr->Flags = GFLG_GADGIMAGE+GFLG_GADGHIMAGE+GFLG_RELRIGHT+GFLG_RELBOTTOM;
vjet->leftArr->Activation = GACT_IMMEDIATE+GACT_RELVERIFY+GACT_BOTTOMBORDER;
vjet->leftArr->GadgetType = GTYP_BOOLGADGET+GTYP_GZZGADGET;
vjet->leftArr->GadgetRender = vjet->leftImage;
vjet->leftArr->SelectRender = vjet->leftImage;
vjet->leftArr->GadgetID = ARR_L;

vjet->hProp = (struct Gadget *)NewObject(NULL,PROPGCLASS,
                GA_Next,vjet->leftArr,
                GA_Left,vjet->win->BorderLeft-1,
                GA_RelBottom,-7,
                GA_RelWidth,-(vjet->win->BorderLeft+vjet->win->BorderRight+32+1),
                GA_Height,6,
                GA_FollowMouse,TRUE,
//                GA_Immediate,TRUE,
                GA_RelVerify,TRUE,
                GA_GZZGadget,TRUE,
                GA_ID,HSCROLL,
                PGA_Freedom,FREEHORIZ,
                PGA_Total,1,
                PGA_Visible,1,
                PGA_Top,1,
                PGA_NewLook,TRUE,
                TAG_END);

vjet->downImage = (struct Image *)NewObject(NULL,SYSICLASS,
                SYSIA_Size,SYSISIZE_MEDRES,
                SYSIA_Which,DOWNIMAGE,
                SYSIA_DrawInfo,vjet->dI,
                TAG_END);

/*vjet->downArr = (struct Gadget *)NewObject(NULL,BUTTONGCLASS,
                                    GA_RelRight,-17,
                                    GA_RelBottom,-20,
                                    GA_Width,18,
                                    GA_Height,11,
                                    GA_Image,vjet->downImage,
                                    GA_Immediate,TRUE,
                                    GA_RelVerify,TRUE,
                                    GA_GZZGadget,TRUE,
                                    GA_Next,vjet->hProp,
                                    GA_ID,ARR_D,
                                    GA_Selected,FALSE,
                                    TAG_END);
*/
vjet->downArr = AllocMem(sizeof(struct Gadget),MEMF_PUBLIC+MEMF_CLEAR);
vjet->downArr->NextGadget = vjet->hProp;
vjet->downArr->LeftEdge = -17;
vjet->downArr->TopEdge = -20;
vjet->downArr->Width = 18;
vjet->downArr->Height = 11;
vjet->downArr->Flags = GFLG_GADGIMAGE+GFLG_GADGHIMAGE+GFLG_RELRIGHT+GFLG_RELBOTTOM;
vjet->downArr->Activation = GACT_IMMEDIATE+GACT_RELVERIFY+GACT_RIGHTBORDER;
vjet->downArr->GadgetType = GTYP_BOOLGADGET+GTYP_GZZGADGET;
vjet->downArr->GadgetRender = vjet->downImage;
vjet->downArr->SelectRender = vjet->downImage;
vjet->downArr->GadgetID = ARR_D;

vjet->upImage = (struct Image *)NewObject(NULL,SYSICLASS,
                SYSIA_Size,SYSISIZE_MEDRES,
                SYSIA_Which,UPIMAGE,
                SYSIA_DrawInfo,vjet->dI,
                TAG_END);

/*vjet->upArr = (struct Gadget *)NewObject(NULL,BUTTONGCLASS,
                                    GA_RelRight,-17,
                                    GA_RelBottom,-31,
                                    GA_Width,18,
                                    GA_Height,11,
                                    GA_Image,vjet->upImage,
                                    GA_Immediate,TRUE,
                                    GA_RelVerify,TRUE,
                                    GA_GZZGadget,TRUE,
                                    GA_Next,vjet->downArr,
                                    GA_ID,ARR_U,
                                    GA_Selected,FALSE,
                                    TAG_END);
*/
vjet->upArr = AllocMem(sizeof(struct Gadget),MEMF_PUBLIC+MEMF_CLEAR);
vjet->upArr->NextGadget = vjet->downArr;
vjet->upArr->LeftEdge = -17;
vjet->upArr->TopEdge = -31;
vjet->upArr->Width = 18;
vjet->upArr->Height = 11;
vjet->upArr->Flags = GFLG_GADGIMAGE+GFLG_GADGHIMAGE+GFLG_RELRIGHT+GFLG_RELBOTTOM;
vjet->upArr->Activation = GACT_IMMEDIATE+GACT_RELVERIFY+GACT_RIGHTBORDER;
vjet->upArr->GadgetType = GTYP_BOOLGADGET+GTYP_GZZGADGET;
vjet->upArr->GadgetRender = vjet->upImage;
vjet->upArr->SelectRender = vjet->upImage;
vjet->upArr->GadgetID = ARR_U;

vjet->vProp = (struct Gadget *)NewObject(NULL,PROPGCLASS,
                GA_Next,vjet->upArr,
                GA_RelRight,-13,
                GA_Top,vjet->win->BorderTop+1,
                GA_Width,10,
                GA_RelHeight,-(vjet->win->BorderTop+1+33),
                GA_FollowMouse,TRUE,
//                GA_Immediate,TRUE,
                GA_RelVerify,TRUE,
                GA_GZZGadget,TRUE,
                GA_ID,VSCROLL,
                PGA_Freedom,FREEVERT,
                PGA_Total,1,
                PGA_Visible,1,
                PGA_Top,1,
                PGA_NewLook,TRUE,
                TAG_END);


return(vjet->vProp);
}

VOID getHSlider(struct vJet *vjet)
{
LONG diff;
ULONG newtop=0;
GetAttr(PGA_Top,vjet->hProp,&newtop);
diff = newtop - vjet->topcolumn;
movePageHoriz(vjet,diff);
}

VOID getVSlider(struct vJet *vjet)
{
LONG diff;
ULONG newtop=0;
GetAttr(PGA_Top,vjet->vProp,&newtop);
diff = newtop - vjet->topline;
movePageVert(vjet,diff);
}


BOOL handleDGad(struct vJet *vjet,struct Gadget *g)
{
BOOL flag = FALSE;
//ULONG flags = vjet->win->IDCMPFlags+IDCMP_INTUITICKS;
switch(g->GadgetID) {


/*    case ARR_U: ModifyIDCMP(vjet->win,flags);
                movePageVert(vjet,-1);
                break;
    case ARR_D: ModifyIDCMP(vjet->win,flags);
                movePageVert(vjet,1);
                break;
    case ARR_L: ModifyIDCMP(vjet->win,flags);
                movePageHoriz(vjet,-1);
                break;
    case ARR_R: ModifyIDCMP(vjet->win,flags);
                movePageHoriz(vjet,1);
                break;
*/
//this is faster
    case ARR_U: while(g->Flags&SELECTED) {
                    movePageVert(vjet,-1);
                    setVSlider(vjet);
                    }
                break;
    case ARR_D: while(g->Flags&SELECTED) {
                    movePageVert(vjet,1);
                    setVSlider(vjet);
                    }
                break;
    case ARR_L: while(g->Flags&SELECTED) {
                    movePageHoriz(vjet,-1);
                    setHSlider(vjet);
                    }
                break;
    case ARR_R: while(g->Flags&SELECTED) {
                    movePageHoriz(vjet,1);
                    setHSlider(vjet);
                    }
                break;

//
    default:    titleWin(vjet,"unresolved in handleDGad()");
                break;
    }
return(flag);
}

BOOL handleUGad(struct vJet *vjet,struct Gadget *g)
{
BOOL flag = FALSE;
//ULONG flags = vjet->win->IDCMPFlags&~IDCMP_INTUITICKS;

//ModifyIDCMP(vjet->win,flags);     //switch off INTUITICKS

switch(g->GadgetID) {
    case VSCROLL:            /*clicked in the body of vertical prop*/
                getVSlider(vjet);
                break;
    case ARR_U:
    case ARR_D: setVSlider(vjet);
                break;
    case HSCROLL:            /*clicked in the body of horizontal prop*/
                getHSlider(vjet);
                break;
    case ARR_L:
    case ARR_R: setHSlider(vjet);
                break;
    default:    //VPrintf("unresolved in handleUGad()",NULL);
                break;
    }
titleWin(vjet,vjet->path[vjet->pathNum]);
return(flag);
}


VOID setVSlider(struct vJet *vjet)
{
SetGadgetAttrs(vjet->vProp,vjet->win,NULL,
                PGA_Total,vjet->maxline,
                PGA_Visible,vjet->linesPerPage,
                PGA_Top,vjet->topline,
                TAG_END);
titleWin(vjet,vjet->path[vjet->pathNum]);
}

VOID setHSlider(struct vJet *vjet)
{
SetGadgetAttrs(vjet->hProp,vjet->win,NULL,
                PGA_Total,vjet->maxcolumn,
                PGA_Visible,vjet->columnsPerPage,
                PGA_Top,vjet->topcolumn,
                TAG_END);
titleWin(vjet,vjet->path[vjet->pathNum]);
}

/*end of file*/