/*
 *  Source machine generated by GadToolsBox V2.0b
 *  which is (c) Copyright 1991-1993 Jaba Development
 *
 *  GUI Designed by : Sergio
 */

#include <exec/types.h>
#include <intuition/intuition.h>
#include <intuition/classes.h>
#include <intuition/classusr.h>
#include <intuition/imageclass.h>
#include <intuition/gadgetclass.h>
#include <libraries/gadtools.h>
#include <graphics/displayinfo.h>
#include <graphics/gfxbase.h>
#include <clib/exec_protos.h>
#include <clib/intuition_protos.h>
#include <clib/gadtools_protos.h>
#include <clib/graphics_protos.h>
#include <clib/utility_protos.h>
#include <string.h>
#include <clib/diskfont_protos.h>

#include "freq_gui.h"

struct Screen         *Scr = NULL;
UBYTE                 *PubScreenName = "Workbench";
APTR                   VisualInfo = NULL;
struct Window         *FreqWnd = NULL;
struct Gadget         *FreqGList = NULL;
struct IntuiMessage    FreqMsg;
struct TextFont       *Font       = NULL;
struct Gadget         *FreqGadgets[2];
UWORD                  FreqLeft = 225;
UWORD                  FreqTop = 130;
UWORD                  FreqWidth = 159;
UWORD                  FreqHeight = 58;
UBYTE                 *FreqWdt = (UBYTE *)"Frequency";

struct TextAttr helvetica18 = {
	( STRPTR )"helvetica.font", 18, 0x00, 0x20 };

UWORD FreqGTypes[] = {
	NUMBER_KIND,
	BUTTON_KIND
};

struct NewGadget FreqNGad[] = {
	18, 2, 89, 29, (UBYTE *)"Hz", NULL, GD_G, PLACETEXT_RIGHT, NULL, NULL,
	45, 34, 57, 22, (UBYTE *)"GO", NULL, GD_GO, PLACETEXT_IN, NULL, (APTR)GOClicked
};

ULONG FreqGTags[] = {
	(GTNM_Border), TRUE, (TAG_DONE),
	(TAG_DONE)
};

int SetupScreen( void )
{
	if ( ! ( Font = OpenDiskFont( &helvetica18 )))
		return( 5L );

	if ( ! ( Scr = LockPubScreen( PubScreenName )))
		return( 1L );

	if ( ! ( VisualInfo = GetVisualInfo( Scr, TAG_DONE )))
		return( 2L );

	return( 0L );
}

void CloseDownScreen( void )
{
	if ( VisualInfo ) {
		FreeVisualInfo( VisualInfo );
		VisualInfo = NULL;
	}

	if ( Scr        ) {
		UnlockPubScreen( NULL, Scr );
		Scr = NULL;
	}

	if ( Font       ) {
		CloseFont( Font );
		Font = NULL;
	}
}

int HandleFreqIDCMP( void )
{
	struct IntuiMessage	*m;
	int			(*func)();
	BOOL			running = TRUE;

	while( m = GT_GetIMsg( FreqWnd->UserPort )) {

		CopyMem(( char * )m, ( char * )&FreqMsg, (long)sizeof( struct IntuiMessage ));

		GT_ReplyIMsg( m );

		switch ( FreqMsg.Class ) {

			case	IDCMP_REFRESHWINDOW:
				GT_BeginRefresh( FreqWnd );
				GT_EndRefresh( FreqWnd, TRUE );
				break;

			case	IDCMP_CLOSEWINDOW:
				running = FreqCloseWindow();
				break;

			case	IDCMP_GADGETUP:
				func = ( void * )(( struct Gadget * )FreqMsg.IAddress )->UserData;
				running = func();
				break;
		}
	}
	return( running );
}

int OpenFreqWindow( void )
{
	struct NewGadget	ng;
	struct Gadget	*g;
	UWORD		lc, tc;
	UWORD		offx = Scr->WBorLeft, offy = Scr->WBorTop + Scr->RastPort.TxHeight + 1;

	if ( ! ( g = CreateContext( &FreqGList )))
		return( 1L );

	for( lc = 0, tc = 0; lc < Freq_CNT; lc++ ) {

		CopyMem((char * )&FreqNGad[ lc ], (char * )&ng, (long)sizeof( struct NewGadget ));

		ng.ng_VisualInfo = VisualInfo;
		ng.ng_TextAttr   = &helvetica18;
		ng.ng_LeftEdge  += offx;
		ng.ng_TopEdge   += offy;

		FreqGadgets[ lc ] = g = CreateGadgetA((ULONG)FreqGTypes[ lc ], g, &ng, ( struct TagItem * )&FreqGTags[ tc ] );

		while( FreqGTags[ tc ] ) tc += 2;
		tc++;

		if ( NOT g )
			return( 2L );
	}

	if ( ! ( FreqWnd = OpenWindowTags( NULL,
				WA_Left,	FreqLeft,
				WA_Top,		FreqTop,
				WA_Width,	FreqWidth,
				WA_Height,	FreqHeight + offy,
				WA_IDCMP,	NUMBERIDCMP|BUTTONIDCMP|IDCMP_CLOSEWINDOW|IDCMP_REFRESHWINDOW,
				WA_Flags,	WFLG_DRAGBAR|WFLG_CLOSEGADGET|WFLG_SMART_REFRESH,
				WA_Gadgets,	FreqGList,
				WA_Title,	FreqWdt,
				WA_ScreenTitle,	"AURA Frequency meter (C)1998 by SRC",
				TAG_DONE )))
	return( 4L );

	GT_RefreshWindow( FreqWnd, NULL );

	return( 0L );
}

void CloseFreqWindow( void )
{
	if ( FreqWnd        ) {
		CloseWindow( FreqWnd );
		FreqWnd = NULL;
	}

	if ( FreqGList      ) {
		FreeGadgets( FreqGList );
		FreqGList = NULL;
	}
}

