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

#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 <pragmas/exec_pragmas.h>
#include <pragmas/intuition_pragmas.h>
#include <pragmas/gadtools_pragmas.h>
#include <pragmas/graphics_pragmas.h>
#include <pragmas/utility_pragmas.h>

#include "WatcherPrefs.h"

struct Screen         *Scr = NULL;
UBYTE                 *PubScreenName = NULL;
APTR                   VisualInfo = NULL;
struct Window         *WatcherPrefsWnd = NULL;
struct Gadget         *WatcherPrefsGList = NULL;
struct Menu           *WatcherPrefsMenus = NULL;
struct IntuiMessage    WatcherPrefsMsg;
struct Gadget         *WatcherPrefsGadgets[32];
extern Class          *initGet( void );
struct IClass         *getClass = NULL;
struct _Object        *getImage = NULL;
UWORD                  WatcherPrefsLeft = 0;
UWORD                  WatcherPrefsTop = 11;
UWORD                  WatcherPrefsWidth = 621;
UWORD                  WatcherPrefsHeight = 224;
UBYTE                 *WatcherPrefsWdt = (UBYTE *)"Watcher Preferences";
struct TextAttr       *Font, Attr;
UWORD                  FontX, FontY;
UWORD                  OffX, OffY;
struct TextFont       *WatcherPrefsFont = NULL;

UBYTE *DATE_FORMAT0Labels[] = {
	(UBYTE *)"dd-mm-yy",
	(UBYTE *)"dd/mm/yy",
	(UBYTE *)"mm-dd-yy",
	(UBYTE *)"mm/dd/yy",
	NULL };

extern struct MinList LANGUAGE0List;

struct Node LANGUAGE0Nodes[] = {
	&LANGUAGE0Nodes[1], ( struct Node * )&LANGUAGE0List.mlh_Head, 0, 0, "dansk",
	&LANGUAGE0Nodes[2], &LANGUAGE0Nodes[0], 0, 0, "english",
	( struct Node * )&LANGUAGE0List.mlh_Tail, &LANGUAGE0Nodes[1], 0, 0, "internal" };

struct MinList LANGUAGE0List = {
	( struct MinNode * )&LANGUAGE0Nodes[0], ( struct MinNode * )NULL, ( struct MinNode * )&LANGUAGE0Nodes[2] };

struct IntuiText WatcherPrefsIText[] = {
	2, 0, JAM1,307, 8, NULL, (UBYTE *)"- Watcher Preferences Options -", NULL };

#define WatcherPrefs_TNUM 1

struct NewMenu WatcherPrefsNewMenu[] = {
	NM_TITLE, (STRPTR)"Project", NULL, 0, NULL, NULL,
	NM_ITEM, (STRPTR)"Open", (STRPTR)"O", 0, 0L, (APTR)WatcherPrefsItem0,
	NM_ITEM, (STRPTR)"Save as...", (STRPTR)"A", 0, 0L, (APTR)WatcherPrefsItem1,
	NM_ITEM, (STRPTR)NM_BARLABEL, NULL, 0, 0L, NULL,
	NM_ITEM, (STRPTR)"Quit", (STRPTR)"Q", 0, 0L, (APTR)WatcherPrefsItem2,
	NM_TITLE, (STRPTR)"Edit", NULL, 0, NULL, NULL,
	NM_ITEM, (STRPTR)"Reset to defaults", (STRPTR)"D", 0, 0L, (APTR)WatcherPrefsItem3,
	NM_ITEM, (STRPTR)"Last Saved", (STRPTR)"L", 0, 0L, (APTR)WatcherPrefsItem4,
	NM_ITEM, (STRPTR)NM_BARLABEL, NULL, 0, 0L, NULL,
	NM_ITEM, (STRPTR)"Restore", (STRPTR)"R", 0, 0L, (APTR)WatcherPrefsItem5,
	NM_TITLE, (STRPTR)"Settings", NULL, 0, NULL, NULL,
	NM_ITEM, (STRPTR)"Create Icons", (STRPTR)"I", CHECKIT|CHECKED|MENUTOGGLE, 0L, (APTR)WatcherPrefsItem6,
	NM_END, NULL, NULL, 0, 0L, NULL };

UWORD WatcherPrefsGTypes[] = {
	STRING_KIND,
	CHECKBOX_KIND,
	CHECKBOX_KIND,
	CHECKBOX_KIND,
	CHECKBOX_KIND,
	CHECKBOX_KIND,
	CHECKBOX_KIND,
	CHECKBOX_KIND,
	CHECKBOX_KIND,
	CHECKBOX_KIND,
	INTEGER_KIND,
	INTEGER_KIND,
	INTEGER_KIND,
	INTEGER_KIND,
	INTEGER_KIND,
	CHECKBOX_KIND,
	CHECKBOX_KIND,
	STRING_KIND,
	STRING_KIND,
	CHECKBOX_KIND,
	STRING_KIND,
	STRING_KIND,
	BUTTON_KIND,
	BUTTON_KIND,
	BUTTON_KIND,
	GENERIC_KIND,
	CHECKBOX_KIND,
	INTEGER_KIND,
	INTEGER_KIND,
	LISTVIEW_KIND,
	CHECKBOX_KIND,
	CYCLE_KIND
};

struct NewGadget WatcherPrefsNGad[] = {
	82, 20, 185, 14, (UBYTE *)"Volumes:", NULL, GD_VOLUMES, PLACETEXT_LEFT, NULL, (APTR)VOLUMESClicked,
	430, 73, 26, 11, (UBYTE *)"Total Memory:", NULL, GD_TOTAL, PLACETEXT_LEFT, NULL, (APTR)TOTALClicked,
	430, 62, 26, 11, (UBYTE *)"Fast Memory:", NULL, GD_FAST, PLACETEXT_LEFT, NULL, (APTR)FASTClicked,
	430, 51, 26, 11, (UBYTE *)"Chip Memory:", NULL, GD_CHIP, PLACETEXT_LEFT, NULL, (APTR)CHIPClicked,
	430, 40, 26, 11, (UBYTE *)"Largest Mem. Block:", NULL, GD_LARGEST, PLACETEXT_LEFT, NULL, (APTR)LARGESTClicked,
	430, 29, 26, 11, (UBYTE *)"Largest Fast Block:", NULL, GD_LARGESTFAST, PLACETEXT_LEFT, NULL, (APTR)LARGESTFASTClicked,
	430, 18, 26, 11, (UBYTE *)"Largest Chip Block:", NULL, GD_LARGESTCHIP, PLACETEXT_LEFT, NULL, (APTR)LARGESTCHIPClicked,
	461, 73, 26, 11, (UBYTE *)":Day of week", NULL, GD_DAYOFWEEK, PLACETEXT_RIGHT, NULL, (APTR)DAYOFWEEKClicked,
	461, 62, 26, 11, (UBYTE *)":Date", NULL, GD_DATE, PLACETEXT_RIGHT, NULL, (APTR)DATEClicked,
	461, 51, 26, 11, (UBYTE *)":Time", NULL, GD_TIME, PLACETEXT_RIGHT, NULL, (APTR)TIMEClicked,
	217, 35, 49, 14, (UBYTE *)"Window LeftEdge:", NULL, GD_WINLEFTEDGE, PLACETEXT_LEFT, NULL, (APTR)WINLEFTEDGEClicked,
	217, 50, 49, 14, (UBYTE *)"Window TopEdge:", NULL, GD_WINTOPEDGE, PLACETEXT_LEFT, NULL, (APTR)WINTOPEDGEClicked,
	217, 65, 49, 14, (UBYTE *)"Window Width:", NULL, GD_WINWIDTH, PLACETEXT_LEFT, NULL, (APTR)WINWIDTHClicked,
	217, 80, 49, 14, (UBYTE *)"Update rate sec.:", NULL, GD_UPDATESEC, PLACETEXT_LEFT, NULL, (APTR)UPDATESECClicked,
	217, 95, 49, 14, (UBYTE *)"Update rate mic.:", NULL, GD_UPDATEMIC, PLACETEXT_LEFT, NULL, (APTR)UPDATEMICClicked,
	461, 40, 26, 11, (UBYTE *)":No Jump Gadget", NULL, GD_NOJUMPGADGET, PLACETEXT_RIGHT, NULL, (APTR)NOJUMPGADGETClicked,
	461, 29, 26, 11, (UBYTE *)":CPU load", NULL, GD_CPU, PLACETEXT_RIGHT, NULL, (APTR)CPUClicked,
	135, 110, 131, 14, (UBYTE *)"Public Screen:", NULL, GD_PUBLICSCREEN, PLACETEXT_LEFT, NULL, (APTR)PUBLICSCREENClicked,
	135, 125, 131, 14, (UBYTE *)"Guide file:", NULL, GD_GUIDEFILE, PLACETEXT_LEFT, NULL, (APTR)GUIDEFILEClicked,
	461, 18, 26, 11, (UBYTE *)":Vol. Free Dir.", NULL, GD_VOLUMEFREEDIRECTION, PLACETEXT_RIGHT, NULL, (APTR)VOLUMEFREEDIRECTIONClicked,
	219, 140, 47, 14, (UBYTE *)"Volume Free Indicators", NULL, GD_VOLUMEFREEDIRECTIONINDICATORS, PLACETEXT_LEFT, NULL, (APTR)VOLUMEFREEDIRECTIONINDICATORSClicked,
	135, 155, 131, 14, (UBYTE *)"Volume Alert:", NULL, GD_VOLUMALERT, PLACETEXT_LEFT, NULL, (APTR)VOLUMALERTClicked,
	4, 206, 91, 15, (UBYTE *)"_Save", NULL, GD_SAVE, PLACETEXT_IN, NULL, (APTR)SAVEClicked,
	266, 206, 91, 15, (UBYTE *)"_Use", NULL, GD_USE, PLACETEXT_IN, NULL, (APTR)USEClicked,
	526, 206, 91, 15, (UBYTE *)"_Cancel", NULL, GD_CANCEL, PLACETEXT_IN, NULL, (APTR)CANCELClicked,
	267, 125, 20, 14, NULL, NULL, GD_GUIDEFILEGET, 0, NULL, (APTR)GUIDEFILEGETClicked,
	430, 84, 26, 11, (UBYTE *)"App Info autostart:", NULL, GD_APPINFOAUTOSTART, PLACETEXT_LEFT, NULL, (APTR)APPINFOAUTOSTARTClicked,
	217, 169, 49, 14, (UBYTE *)"App Info Left Edge:", NULL, GD_APPINFOLEFTEDGE, PLACETEXT_LEFT, NULL, (APTR)APPINFOLEFTEDGEClicked,
	217, 183, 49, 14, (UBYTE *)"App Info Top Edge:", NULL, GD_APPINFOTOPEDGE, PLACETEXT_LEFT, NULL, (APTR)APPINFOTOPEDGEClicked,
	461, 95, 151, 80, (UBYTE *)"Language", NULL, GD_LANGUAGE, PLACETEXT_BELOW, NULL, (APTR)LANGUAGEClicked,
	461, 84, 26, 11, (UBYTE *)":24 hour clock", NULL, GD_TIME_FORMAT, PLACETEXT_RIGHT, NULL, (APTR)TIME_FORMATClicked,
	356, 95, 100, 14, (UBYTE *)"Date F.:", NULL, GD_DATE_FORMAT, PLACETEXT_LEFT, NULL, (APTR)DATE_FORMATClicked
};

ULONG WatcherPrefsGTags[] = {
	(STRINGA_ExitHelp), TRUE, (GTST_MaxChars), 256, (TAG_DONE),
	(TAG_DONE),
	(TAG_DONE),
	(TAG_DONE),
	(TAG_DONE),
	(GT_Underscore), '_', (TAG_DONE),
	(TAG_DONE),
	(TAG_DONE),
	(TAG_DONE),
	(TAG_DONE),
	(STRINGA_ExitHelp), TRUE, (GTIN_Number), 0, (GTIN_MaxChars), 4, (GT_Underscore), '_', (TAG_DONE),
	(STRINGA_ExitHelp), TRUE, (GTIN_Number), 0, (GTIN_MaxChars), 4, (GT_Underscore), '_', (TAG_DONE),
	(STRINGA_ExitHelp), TRUE, (GTIN_Number), 0, (GTIN_MaxChars), 4, (GT_Underscore), '_', (TAG_DONE),
	(STRINGA_ExitHelp), TRUE, (GTIN_Number), 0, (GTIN_MaxChars), 10, (GT_Underscore), '_', (TAG_DONE),
	(STRINGA_ExitHelp), TRUE, (GTIN_Number), 0, (GTIN_MaxChars), 10, (GT_Underscore), '_', (TAG_DONE),
	(TAG_DONE),
	(TAG_DONE),
	(STRINGA_ExitHelp), TRUE, (GTST_MaxChars), 80, (TAG_DONE),
	(STRINGA_ExitHelp), TRUE, (GTST_MaxChars), 256, (TAG_DONE),
	(TAG_DONE),
	(STRINGA_ExitHelp), TRUE, (GTST_MaxChars), 4, (GA_Disabled), TRUE, (TAG_DONE),
	(STRINGA_ExitHelp), TRUE, (GTST_MaxChars), 256, (TAG_DONE),
	(GT_Underscore), '_', (TAG_DONE),
	(GT_Underscore), '_', (TAG_DONE),
	(GT_Underscore), '_', (TAG_DONE),
	(TAG_DONE),
	(TAG_DONE),
	(STRINGA_ExitHelp), TRUE, (GTIN_Number), 0, (GTIN_MaxChars), 4, (GT_Underscore), '_', (TAG_DONE),
	(STRINGA_ExitHelp), TRUE, (GTIN_Number), 0, (GTIN_MaxChars), 4, (GT_Underscore), '_', (TAG_DONE),
	(GTLV_Labels), (ULONG)&LANGUAGE0List, (GTLV_ShowSelected), NULL, (TAG_DONE),
	(TAG_DONE),
	(GTCY_Labels), (ULONG)&DATE_FORMAT0Labels[ 0 ], (TAG_DONE)
};

static UWORD ComputeX( UWORD value )
{
	return(( UWORD )((( FontX * value ) + 4 ) / 8 ));
}

static UWORD ComputeY( UWORD value )
{
	return(( UWORD )((( FontY * value ) + 4 ) / 8 ));
}

static void ComputeFont( UWORD width, UWORD height )
{
	Forbid();
	Font = &Attr;
	Font->ta_Name = (STRPTR)GfxBase->DefaultFont->tf_Message.mn_Node.ln_Name;
	Font->ta_YSize = FontY = GfxBase->DefaultFont->tf_YSize;
	FontX = GfxBase->DefaultFont->tf_XSize;
	Permit();

	OffX = Scr->WBorLeft;
	OffY = Scr->RastPort.TxHeight + Scr->WBorTop + 1;

	if ( width && height ) {
		if (( ComputeX( width ) + OffX + Scr->WBorRight ) > Scr->Width )
			goto UseTopaz;
		if (( ComputeY( height ) + OffY + Scr->WBorBottom ) > Scr->Height )
			goto UseTopaz;
	}
	return;

UseTopaz:
	Font->ta_Name = (STRPTR)"topaz.font";
	FontX = FontY = Font->ta_YSize = 8;
}

int SetupScreen( void )
{
	if ( ! ( Scr = LockPubScreen( PubScreenName )))
		return( 1L );

	ComputeFont( 0, 0 );

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

	if ( ! ( getClass = initGet()))
		return( 3L );

	if ( ! ( getImage = NewObject( getClass, NULL, GT_VisualInfo, VisualInfo, TAG_DONE )))
		return( 4L );

	return( 0L );
}

void CloseDownScreen( void )
{
	if ( getImage   ) {
		DisposeObject( getImage );
		getImage = NULL;
	}

	if ( getClass   ) {
		FreeClass( getClass );
		getClass = NULL;
	}

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

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

void WatcherPrefsRender( void )
{
	struct IntuiText	it;
	UWORD			cnt;

	ComputeFont( WatcherPrefsWidth, WatcherPrefsHeight );

	DrawBevelBox( WatcherPrefsWnd->RPort, OffX + ComputeX( 4 ),
					OffY + ComputeY( 15 ),
					ComputeX( 613 ),
					ComputeY( 187 ),
					GT_VisualInfo, VisualInfo, GTBB_Recessed, TRUE, TAG_DONE );

	for ( cnt = 0; cnt < WatcherPrefs_TNUM; cnt++ ) {
		CopyMem(( char * )&WatcherPrefsIText[ cnt ], ( char * )&it, (long)sizeof( struct IntuiText ));
		it.ITextFont = Font;
		it.LeftEdge  = OffX + ComputeX( it.LeftEdge ) - ( IntuiTextLength( &it ) >> 1 );
		it.TopEdge   = OffY + ComputeY( it.TopEdge ) - ( Font->ta_YSize >> 1 );
		PrintIText( WatcherPrefsWnd->RPort, &it, 0, 0 );
	}
}

int HandleWatcherPrefsIDCMP( void )
{
	struct IntuiMessage	*m;
	struct MenuItem		*n;
	int			(*func)();
	BOOL			running = TRUE;

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

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

		GT_ReplyIMsg( m );

		switch ( WatcherPrefsMsg.Class ) {

			case	IDCMP_REFRESHWINDOW:
				GT_BeginRefresh( WatcherPrefsWnd );
				WatcherPrefsRender();
				GT_EndRefresh( WatcherPrefsWnd, TRUE );
				break;

			case	IDCMP_CLOSEWINDOW:
				running = WatcherPrefsCloseWindow();
				break;

			case	IDCMP_MENUHELP:
				running = WatcherPrefsMenuHelp();
				break;

			case	IDCMP_VANILLAKEY:
				running = WatcherPrefsVanillaKey();
				break;

			case	IDCMP_RAWKEY:
				running = WatcherPrefsRawKey();
				break;

			case	IDCMP_GADGETUP:
			case	IDCMP_GADGETDOWN:
				func = ( void * )(( struct Gadget * )WatcherPrefsMsg.IAddress )->UserData;
				running = func();
				break;

			case	IDCMP_MENUPICK:
				while( WatcherPrefsMsg.Code != MENUNULL ) {
					n = ItemAddress( WatcherPrefsMenus, WatcherPrefsMsg.Code );
					func = (void *)(GTMENUITEM_USERDATA( n ));
					running = func();
					WatcherPrefsMsg.Code = n->NextSelect;
				}
				break;
		}
	}
	return( running );
}

int OpenWatcherPrefsWindow( void )
{
	struct NewGadget	ng;
	struct Gadget	*g;
	UWORD		lc, tc;
	UWORD		wleft = WatcherPrefsLeft, wtop = WatcherPrefsTop, ww, wh;

	ComputeFont( WatcherPrefsWidth, WatcherPrefsHeight );

	ww = ComputeX( WatcherPrefsWidth );
	wh = ComputeY( WatcherPrefsHeight );

	if (( wleft + ww + OffX + Scr->WBorRight ) > Scr->Width ) wleft = Scr->Width - ww;
	if (( wtop + wh + OffY + Scr->WBorBottom ) > Scr->Height ) wtop = Scr->Height - wh;

	if ( ! ( WatcherPrefsFont = OpenDiskFont( Font )))
		return( 5L );

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

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

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

		ng.ng_VisualInfo = VisualInfo;
		ng.ng_TextAttr   = Font;
		ng.ng_LeftEdge   = OffX + ComputeX( ng.ng_LeftEdge );
		ng.ng_TopEdge    = OffY + ComputeY( ng.ng_TopEdge );

		if ( WatcherPrefsGTypes[ lc ] != GENERIC_KIND ) {
			ng.ng_Width      = ComputeX( ng.ng_Width );
			ng.ng_Height     = ComputeY( ng.ng_Height);
		}

		WatcherPrefsGadgets[ lc ] = g = CreateGadgetA((ULONG)WatcherPrefsGTypes[ lc ], g, &ng, ( struct TagItem * )&WatcherPrefsGTags[ tc ] );

		if ( WatcherPrefsGTypes[ lc ] == GENERIC_KIND ) {
			g->Flags             |= GFLG_GADGIMAGE | GFLG_GADGHIMAGE;
			g->Activation        |= GACT_RELVERIFY;
			g->GadgetRender       = (APTR)getImage;
			g->SelectRender       = (APTR)getImage;
		}

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

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

	if ( ! ( WatcherPrefsMenus = CreateMenus( WatcherPrefsNewMenu, GTMN_FrontPen, 0L, GTMN_NewLookMenus, TRUE, TAG_DONE )))
		return( 3L );

	LayoutMenus( WatcherPrefsMenus, VisualInfo, GTMN_NewLookMenus, TRUE, TAG_DONE );

	if ( ! ( WatcherPrefsWnd = OpenWindowTags( NULL,
				WA_Left,	wleft,
				WA_Top,		wtop,
				WA_Width,	ww + OffX + Scr->WBorRight,
				WA_Height,	wh + OffY + Scr->WBorBottom,
				WA_IDCMP,	STRINGIDCMP|CHECKBOXIDCMP|INTEGERIDCMP|BUTTONIDCMP|IDCMP_GADGETUP|LISTVIEWIDCMP|CYCLEIDCMP|IDCMP_MENUPICK|IDCMP_CLOSEWINDOW|IDCMP_RAWKEY|IDCMP_VANILLAKEY|IDCMP_MENUHELP|IDCMP_REFRESHWINDOW,
				WA_Flags,	WFLG_DRAGBAR|WFLG_DEPTHGADGET|WFLG_SMART_REFRESH|WFLG_SIMPLE_REFRESH|WFLG_ACTIVATE,
				WA_Gadgets,	WatcherPrefsGList,
				WA_Title,	WatcherPrefsWdt,
				WA_ScreenTitle,	"İHemSoft Developments 1993",
				WA_PubScreen,	Scr,
				WA_NewLookMenus, TRUE,
				WA_MenuHelp, TRUE,
				TAG_DONE )))
	return( 4L );

	SetMenuStrip( WatcherPrefsWnd, WatcherPrefsMenus );
	GT_RefreshWindow( WatcherPrefsWnd, NULL );

	WatcherPrefsRender();

	return( 0L );
}

void CloseWatcherPrefsWindow( void )
{
	if ( WatcherPrefsMenus      ) {
		ClearMenuStrip( WatcherPrefsWnd );
		FreeMenus( WatcherPrefsMenus );
		WatcherPrefsMenus = NULL;	}

	if ( WatcherPrefsWnd        ) {
		CloseWindow( WatcherPrefsWnd );
		WatcherPrefsWnd = NULL;
	}

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

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

