
/*
\\  DMReq.c  -  Positionierung des Bildschirms über DoubleMenu-Requesters
*/
#include "TOOL.h"
#define RHO 160
#define RBR 250
#define GHO 15
#define GBR 50
#define GS (0xFFFF/100)

struct Window *win;
struct Image image;
struct PropInfo PInfo={
    FREEVERT|FREEHORIZ|AUTOKNOB,0,0,GS,GS,0,0,0,0,0,0
};
SHORT Rpos[]={
    0,0,RBR-5,0,RBR-5,RHO-3,0,RHO-3,0,0
};
SHORT Gpos[]={
    0,0,GBR,0,GBR,GHO,0,GHO,0,0
};
struct Border RRand={
    2,1,2,0,JAM1,5,&Rpos[0],NULL
};
struct Border GRand={
   -1,-1,2,0,JAM1,5,&Gpos[0],NULL
};
struct IntuiText RText={
    2,0,JAM1,15,10,NULL,(UBYTE *)"Bitte ViewOffset einstellen!",NULL
};
struct IntuiText SText={
    2,0,JAM1,5,3,NULL,(UBYTE *)"SLEEP",NULL
};
struct IntuiText EText={
    3,0,JAM1,9,3,NULL,(UBYTE *)"QUIT",NULL
};

VOID sleep()
{/* warten auf IntuiMessage der Klasse REQSET */
    ULONG class;

    do{
        Wait(1<<win->UserPort->mp_SigBit);
    }while((class=GetMessage(win,0,0,0))!=REQSET);
}

VOID main()
{
    struct Requester req;
    struct Gadget Pgad, Sgad, Egad;
    struct Preferences prefs;
    ULONG class;
    USHORT code,id,bool_activations=RELVERIFY|GADGIMMEDIATE|ENDGADGET;
    BOOL ende=0;

    if(OpenLib()) exit(0);
    GetPrefs(&prefs,sizeof(struct Preferences));  /* Preferences-Werte lesen */
    PInfo.HorizPot=GS*(prefs.ViewXOffset+50);    /* Start-Schieberstellung X */
    PInfo.VertPot =GS*(prefs.ViewYOffset+25);    /* Start-Schieberstellung Y */
    ModifyIDCMP((win=ACTIVE_WINDOW),GADGETUP|MOUSEMOVE|REQSET);/* IDCMPFlags */
    GetGadget(&Pgad,NULL,25,25,200,100,0,FOLLOWMOUSE,
                REQGADGET|PROPGADGET,&image,NULL,NULL,&PInfo,0);
    GetGadget(&Sgad,&Pgad, 25,135,GBR,GHO, GADGHCOMP,bool_activations,
                REQGADGET|BOOLGADGET,&GRand,NULL,&SText,NULL,1);
    GetGadget(&Egad,&Sgad,175,135,GBR,GHO,GADGHCOMP,bool_activations,
                REQGADGET|BOOLGADGET,&GRand,NULL,&EText,NULL,2);
    GetRequest(&req,win,20,20,RBR,RHO,0,0,&Egad,&RRand,&RText,0,1,DMREQ);
    sleep();
    while(NOT ende){
        Wait(1<<win->UserPort->mp_SigBit);
        class=GetMessage(win,&code,&id,0);
        if(class==MOUSEMOVE){/* Autoknob in Proportional-Gadget wurde bewegt */
            prefs.ViewXOffset=PInfo.HorizPot/GS-50;
            prefs.ViewYOffset=PInfo.VertPot/GS-25;
            SetPrefs(&prefs,sizeof(struct Preferences),FALSE);
            while((class=GetMessage(win,&code,&id,0))==MOUSEMOVE);
        }
        if(class==GADGETUP){/* eines der beiden BooleanGadgets wurde gewählt */
            switch(id){
                case 1:{                          /* SLEEP-Gadget selektiert */
                    sleep();                            /* warten auf REQSET */
                    break;
                }
                case 2:{                           /* QUIT-Gadget selektiert */
                    ende=1;                   /* Schleifenkriterium erfüllen */
                    break;
                }
                default: break;
            }
        }
    }
    ClearDMRequest(win);                   /* DoubleMenu-Requester streichen */
    ModifyIDCMP(win,0);
    CloseLib();
}

