#include "headers.h"

#include "buttonclass.h"

struct Library *IntuitionBase, *UtilityBase, *GfxBase, *DOSBase;
extern struct Library *SysBase;
struct Window *w;
Class *buttonCl;
struct Gadget *but;
struct IntuiMessage *msg;
struct Gadget *glist=NULL;
struct DrawInfo *drinfo;

UWORD chip arrowData[] =
{
/* Plane 0 */
    0x2000,0x6000,0xFE00,0x6000,0x2000,
};

struct Image arrow =
{
    0, 0,			/* Upper left corner */
    7, 5, 1,			/* Width, Height, Depth */
    arrowData,		/* Image data */
    0x0001, 0x0000,		/* PlanePick, PlaneOnOff */
    NULL			/* Next image */
};

UWORD chip arrowDatas[] =
{
/* Plane 0 */
    0xFE00,0xFE00,0xFE00,0xFE00,0xFE00,
/* Plane 1 */
    0xDE00,0x9E00,0x0000,0x9E00,0xDE00,
};

struct Image arrows =
{
    0, 0,			/* Upper left corner */
    7, 5, 2,			/* Width, Height, Depth */
    arrowDatas,		/* Image data */
    0x0003, 0x0000,		/* PlanePick, PlaneOnOff */
    NULL			/* Next image */
};

/* boopsi.c */
void MainLoop ( ULONG attr , ULONG value );

void main(int argc, char *argv[])
{


	SysBase=*((void **)4L);
	if(IntuitionBase=OpenLibrary("intuition.library",37))
		{
		if(UtilityBase=OpenLibrary("utility.library",37))
			{
			if(GfxBase=OpenLibrary("graphics.library",37))
				{
				if(w=OpenWindowTags(NULL,
							WA_Flags,	WFLG_DEPTHGADGET | WFLG_DRAGBAR |
										WFLG_CLOSEGADGET | WFLG_SIZEGADGET,
							WA_IDCMP,	IDCMP_CLOSEWINDOW | IDCMP_GADGETUP | IDCMP_GADGETDOWN | IDCMP_MOUSEBUTTONS | IDCMP_RAWKEY,
							WA_Top,		15,
							WA_Left,	150,
							WA_Width,	200,
							WA_Height,	300,
							WA_Activate,TRUE,
							WA_PubScreenName, (argc==2?argv[1]:NULL),
							TAG_END) )
					{
					if( drinfo=GetScreenDrawInfo(w->WScreen) )
						{
						WindowLimits(w, 150, 100, ~0, ~0);
						
						if(buttonCl = initButtonGadgetClass(IntuitionBase, UtilityBase, GfxBase))
							{
							struct Gadget *tmpgad,*gad;
							UWORD i;

							tmpgad= (struct Gadget *)&glist;
							for(i=0;i<16;i++)
								{
								NewObject(buttonCl, NULL,
										GA_ID,			1L,
										GA_Top,			w->BorderTop + 2 + i*13,
										GA_Left,		20,
										GA_Width,		100,
										GA_Height,		11,
										GA_Immediate,	TRUE,
										GA_RelVerify,	TRUE,
										GA_Previous,	tmpgad,
										BUT_Text,		"All",
										BUT_Color,		(i<8?(i==1?0:1):i%8),
										//BUT_Key,		'A',
										BUT_BackColor,	(i<8?i%8:~0),
										TAG_DONE);
								}
							NewObject(buttonCl, NULL,
									GA_ID,			1L,
									GA_Top,			w->BorderTop + 2 + i*13,
									GA_Left,		20,
									GA_Width,		150,
									GA_Height,		11,
									GA_Immediate,	TRUE,
									GA_RelVerify,	TRUE,
									GA_Previous,	tmpgad,
									GA_Disabled,	TRUE,
									BUT_Text,		"Press a Key",
									BUT_Key,		'P',
									TAG_DONE);
							NewObject(buttonCl, NULL,
									GA_ID,			1L,
									GA_Top,			w->BorderTop + 2 + ++i*13,
									GA_Left,		20,
									GA_Width,		25,
									GA_Height,		14,
									GA_Immediate,	TRUE,
									GA_RelVerify,	TRUE,
									GA_Previous,	tmpgad,
									BUT_Image,		&arrow,
									BUT_SelectImage,&arrows,
									TAG_DONE);


							AddGList(w, glist, -1, -1, NULL);
							RefreshGList(glist, w, NULL, -1);
							
							/*SetGadgetAttrs(gad, w, NULL,
									GA_Disabled, TRUE,
									TAG_DONE);*/
							
							MainLoop(TAG_DONE, 0);
							//MainLoop(BUT_Color, 2);
							//MainLoop(BUT_Text, (ULONG)"two three");

							RemoveGList(w, glist, -1);

							gad=glist;
							while(gad)
								{
								tmpgad= gad->NextGadget;
								DisposeObject(gad);
								gad= tmpgad;
								}

							freeButtonGadgetClass(buttonCl);
							}
						FreeScreenDrawInfo(w->WScreen,drinfo);
						}
					CloseWindow(w);
					}
				CloseLibrary(GfxBase);
				}
			CloseLibrary(UtilityBase);
			}
		CloseLibrary(IntuitionBase);
		}
}

void MainLoop(ULONG attr, ULONG value)
{
  ULONG done=FALSE;

	SetGadgetAttrs(but, w, NULL, attr, value, TAG_DONE);

	while(done==FALSE)
		{
		WaitPort(w->UserPort);
		while(msg=(struct IntuiMessage *)GetMsg(w->UserPort))
			{
			switch( msg->Class )
				{
				case IDCMP_GADGETDOWN:
					kprintf("Gadget down\n");
					break;
				case IDCMP_GADGETUP:
					kprintf("Gadget up\n");
					break;
				case IDCMP_MOUSEBUTTONS:
					kprintf("Mouse buttons\n");
					break;
				case IDCMP_CLOSEWINDOW:
					done=TRUE;
					break;
				case IDCMP_RAWKEY:
					if( msg->Code & IECODE_UP_PREFIX )
						{
						SetGadgetAttrs(glist, w, NULL,
							GA_Selected,	FALSE,
							TAG_DONE);
						}
					else if( !(msg->Qualifier & IEQUALIFIER_REPEAT) )
						{
						SetGadgetAttrs(glist, w, NULL,
							GA_Selected,	TRUE,
							TAG_DONE);
						}
					break;
				}
			ReplyMsg(msg);
			}
		}
}
