#include <intuition/intuition.h>
#include <libraries/gadtools.h>
#include <proto/dos.h>
#include <proto/exec.h>
#include <proto/gadtools.h>
#include <proto/intuition.h>
#define WIDTH     120
#define HEIGHT    20
#define OFFSET    5

struct NewGadget ngad = {OFFSET,OFFSET,WIDTH,HEIGHT,"Premi quì",NULL,1,
	PLACETEXT_IN,NULL,NULL};
struct Gadget *gad = NULL;

/* Definizione dei menu del programma */
struct NewMenu nmenu[] =
{
	{NM_TITLE,"Progetto",0,0,0,NULL,},
	{NM_ITEM,"Nuovo","N",0,0,NULL},
	{NM_ITEM,"Carica...","C",0,0,NULL,},
	{NM_ITEM,NM_BARLABEL,0,0,0,NULL,},
	{NM_ITEM,"Salva","S",0,0,NULL,},
	{NM_ITEM,"Salva come...",0,0,0,NULL,},
	{NM_ITEM,NM_BARLABEL,0,0,0,NULL,},
	{NM_ITEM,"Informazioni...","?",0,0,NULL,},
	{NM_ITEM,"Fine","F",0,0,NULL,},

	{NM_TITLE,"Editor",0,0,0,NULL,},
	{NM_ITEM,"Taglia","T",0,0,NULL,},
	{NM_ITEM,"Memorizza","M",0,0,NULL,},
	{NM_ITEM,"Incolla","I",0,0,NULL,},
	{NM_ITEM,"Cancella",0,0,0,NULL,},
	{NM_ITEM,NM_BARLABEL,0,0,0,NULL,},
	{NM_ITEM,"IFF",0,MENUTOGGLE | CHECKIT,~(1<<5),NULL,},
	{NM_ITEM,"Testo",0,MENUTOGGLE | CHECKIT,~(1<<6),NULL,},
	{NM_ITEM,"8SVX",0,MENUTOGGLE | CHECKIT|CHECKED,~(1<<7),NULL,},

	{NM_TITLE,"Preferenze",0,0,0,NULL,},
	{NM_ITEM,"Carica...",0,0,0,NULL,},
	{NM_ITEM,"Salva",0,0,0,NULL,},
	{NM_ITEM,"Imposta",0,0,0,NULL,},
	{NM_END,0,0,0,0,0},
};

void main(void)
{
	struct Screen *scr;
	struct Window *win;
	struct Menu *menu;
	struct IntuiMessage *msg;
	BOOL finito = FALSE;
	APTR vinfo;

	if((scr = OpenScreenTags(NULL,
		SA_LikeWorkbench, TRUE,
		SA_Title,         "Schermo di prova",
		TAG_DONE)))
	{
		if((vinfo = GetVisualInfoA(scr,NULL)))
		{
			ngad.ng_VisualInfo = vinfo;

			if((menu = CreateMenusA(nmenu,NULL)))
			{
				LayoutMenus(menu,vinfo,GTMN_NewLookMenus,TRUE,TAG_DONE);

				if((win = OpenWindowTags(NULL,
					WA_Top,        scr -> BarHeight + scr -> BarVBorder,
					WA_Height,     scr -> Height - scr -> BarHeight - scr -> BarVBorder,
					WA_IDCMP,      IDCMP_CLOSEWINDOW | IDCMP_GADGETUP |
										IDCMP_REFRESHWINDOW,
					WA_Flags,      WFLG_CLOSEGADGET | WFLG_SIZEGADGET |
										WFLG_DRAGBAR | WFLG_DEPTHGADGET |
										WFLG_NEWLOOKMENUS,
					WA_Title,      "Finestra di prova",
					WA_PubScreen,  scr,
					TAG_DONE)))
				{
					/* Collego i menù */
					SetMenuStrip(win,menu);

					/* Aggiusto in base alla dimensione del font */
					ngad.ng_LeftEdge += win -> BorderLeft;
					ngad.ng_TopEdge += win -> BorderTop;

					/* Più piccola di così no */
					WindowLimits(win,
						ngad.ng_LeftEdge + ngad.ng_Width + win -> BorderRight + OFFSET,
						ngad.ng_TopEdge + ngad.ng_Height + win -> BorderBottom + OFFSET,0,0);

					if((gad = CreateGadget(BUTTON_KIND,CreateContext(&gad),&ngad,TAG_DONE)))
					{
						/* Aggiungo il bottone alla finestra */
						AddGList(win,gad,0,1,NULL);

						/* Rinfresco i bottoni */
						RefreshGList(gad,win,NULL,1);

						/* Rinfresco i bottoni della finestra */
						GT_RefreshWindow(win,NULL);
						//DisegnaCornice(win);
						while(!finito)
						{
							WaitPort(win -> UserPort);
							while((msg = GT_GetIMsg(win -> UserPort)))
							{
								switch(msg -> Class)
								{
									case IDCMP_CLOSEWINDOW:
										finito = TRUE;
									break;
									case IDCMP_GADGETUP:
										Printf("Bottone premuto!\n");
									break;
									case IDCMP_REFRESHWINDOW:
										GT_BeginRefresh(win);
										GT_EndRefresh(win,TRUE);
									break;
								}
								GT_ReplyIMsg(msg);
							}
						}
					}
					ClearMenuStrip(win);
					CloseWindow(win);
				}
				FreeMenus(menu);
			}
			FreeGadgets(gad);
			FreeVisualInfo(vinfo);
		}
		CloseScreen(scr);
	}
}
