#include "global.h"
#include "RTGGadgets.h"

struct RTGMasterBase *RTGMasterBase;
struct RtgScreen *RtgScreen;
struct ScreenReq *sr;
extern struct UtilityBase *UtilityBase;
extern struct Library *DOSBase;

struct TagItem gtag[] = {
    grd_BytesPerRow,    0,      //  0
    grd_Width,          0,      //  1
    grd_Height,         0,      //  2
    grd_Depth,          0,      //  3
    grd_PixelLayout,    0,      //  4
    grd_ColorSpace,     0,      //  5
    grd_PlaneSize,      0,      //  6
    grd_BusSystem,      0,      //  7
    TAG_DONE,           0
};


struct TagItem rtag[] = {
    smr_MinWidth,       320,
    smr_MinHeight,      200,
    smr_MaxWidth,       800,
    smr_MaxHeight,      600,
    smr_ChunkySupport,  -1,
    smr_PlanarSupport,  -1,
    smr_Buffers,        2,
    smr_PrefsFileName,  (ULONG)"RTGGadgetDemo.prefs",
    TAG_DONE,           NULL
};


struct TagItem tacks[] = {
    TAG_DONE,0
};


void CloseAll(void) {

    if (RTGMasterBase) CloseLibrary((struct Library *)RTGMasterBase);
    RTGGCloseInput();
}


void OpenAll(void) {

    RTGMasterBase = (struct RTGMasterBase *)OpenLibrary("rtgmaster.library",0L);
    if (!RTGMasterBase) {
        printf("You need RTG Library to run this game\n");
        exit(0);
    }

    if (!RTGGOpenInput()) {
        printf("No input device present. You couldn`t have started this game. Strange\n");
        CloseAll();
        exit(0);
    }

}

void main() {

    struct RTGGList *list;
    int i;

    OpenAll();

    sr = RtgScreenModeReq(rtag);
    if (sr) {
        RtgScreen = OpenRtgScreen(sr, tacks);
        if (RtgScreen) {
            LockRtgScreen(RtgScreen);
            GetRtgScreenData(RtgScreen, gtag);
            list = CreateRTGGList(RtgScreen, 0);
            printf("Gadget list: %x\n", 0);

            i = CreateRTGGadget(list, 1, RGADT_LeftEdge,    20,
                                         RGADT_TopEdge,     20,
                                         RGADT_Width,      130,
                                         RGADT_Height,      30,
                                         RGADT_Flags,       RGADF_HITHILITE,
                                         RGADT_HitPen,      0x00FF0000,
                                         RGADT_UpPen,       0x0000FF00,
                                         RGADT_DownPen,     0x000000FF,
                                         RGADT_Key,         'p',
                                         TAG_DONE);
            printf("Created Gadget id :%d\n", i);
            i = CreateRTGGadget(list, 2, RGADT_LeftEdge,    20,
                                         RGADT_TopEdge,     60,
                                         RGADT_Width,      130,
                                         RGADT_Height,      30,
                                         RGADT_Flags,       RGADF_HITHILITE,
                                         RGADT_HitPen,      0x00FF0000,
                                         RGADT_UpPen,       0x0000FF00,
                                         RGADT_DownPen,     0x000000FF,
                                         RGADT_Key,         'q',
                                         TAG_DONE);
            printf("Created Gadget id :%d\n", i);


            RTGGAddIPH();
            DrawRTGGList(list);


            while (1) {
                RefreshRTGGList(list);
                if (list->gl_Selected) {
                    if (list->gl_Selected->rg_ID == 1) {
                        printf("Ouch, that hurt\n");
                        list->gl_Selected = NULL;
                    }
                    if (list->gl_Selected->rg_ID == 2) {
                        break;
                    }
                }
            }
            if (DeleteRTGGList(list, TRUE)) {
                printf("List deleted\n");
            } else {
                printf("List not deleted\n");
            }
            RTGGRemIPH();
            UnlockRtgScreen(RtgScreen);
            CloseRtgScreen(RtgScreen);
        }
    }
}


