/*
		Source generated with GadToolsBox V1.4
		which is © Copyright 1991,92 Jaba Development

		Modifications by REELSOFT
*/

#include	<proto/intuition.h>
#include	<proto/gadtools.h>
#include	<proto/exec.h>
#include	<proto/graphics.h>
#include	<proto/utility.h>

#include	<intuition/classes.h>
#include	<intuition/classusr.h>
#include	<intuition/imageclass.h>
#include	<intuition/gadgetclass.h>
#include	<graphics/gfxbase.h>

#include	"PPMC.h"
#include	"PPMC_Defines.h"

struct	Screen		*Scr		= NULL ;
APTR				VisualInfo	= NULL ;
struct	Window		*PPMCWnd	= NULL ;
struct	Gadget		*PPMCGList	= NULL ;
struct	Menu		*PPMCMenus	= NULL ;
struct	Gadget		*PPMCGadgets [12] ;
struct	RastPort	*ppmcRP ;

UBYTE	*BufSize0Labels [] = {	(UBYTE *)"LARGE",
								(UBYTE *)"MEDIUM",
								(UBYTE *)"SMALL",		NULL } ;
UBYTE	*CrunEff0Labels [] = {	(UBYTE *)"FAST",
								(UBYTE *)"MEDIOCRE",
								(UBYTE *)"GOOD",
								(UBYTE *)"VERY GOOD",
								(UBYTE *)"BEST",		NULL } ;
UBYTE	*DecrCol0Labels [] = {	(UBYTE *)"COL0",
								(UBYTE *)"COL2",
								(UBYTE *)"POINTER",
								(UBYTE *)"SCROLL",
								(UBYTE *)"NONE",		NULL } ;

struct	TextAttr	PPMCFnt = { ( STRPTR )"PPMC.font", 8, 0x00, 0x20 } ;

struct	NewMenu	PPMCNewMenu [] = {
	NM_TITLE,	(STRPTR)"Project", NULL, 0, 0L, NULL,
		NM_ITEM,	(STRPTR)"About...",		(STRPTR)"?", 0, 0L, NULL,
		NM_ITEM,	(STRPTR)NM_BARLABEL, NULL, 0, 0L, NULL,
		NM_ITEM,	(STRPTR)"Load...",		(STRPTR)"L", 0, 0L, NULL,
		NM_ITEM,	(STRPTR)"Save",			(STRPTR)"S", NM_ITEMDISABLED, 0L, NULL,
		NM_ITEM,	(STRPTR)"Save As...",	(STRPTR)"V", NM_ITEMDISABLED, 0L, NULL,
		NM_ITEM,	(STRPTR)NM_BARLABEL, NULL, 0, 0L, NULL,
		NM_ITEM,	(STRPTR)"Quit...",		(STRPTR)"Q", 0, 0L, NULL,
	NM_TITLE,	(STRPTR)"Parameters", NULL, 0, 0L, NULL,
		NM_ITEM,	(STRPTR)"Efficiency",		NULL, 0, 0L, NULL,
			NM_SUB,		(STRPTR)"FAST",			NULL, 0, 0L, NULL,
			NM_SUB,		(STRPTR)"MEDIOCRE",		NULL, 0, 0L, NULL,
			NM_SUB,		(STRPTR)"GOOD",			NULL, 0, 0L, NULL,
			NM_SUB,		(STRPTR)"VERY GOOD",	NULL, 0, 0L, NULL,
			NM_SUB,		(STRPTR)"BEST",			NULL, 0, 0L, NULL,
		NM_ITEM,	(STRPTR)"Speedup Buffer", NULL, 0, 0L, NULL,
			NM_SUB,		(STRPTR)"LARGE",		NULL, 0, 0L, NULL,
			NM_SUB,		(STRPTR)"MEDIUM",		NULL, 0, 0L, NULL,
			NM_SUB,		(STRPTR)"SMALL",		NULL, 0, 0L, NULL,
		NM_ITEM,	(STRPTR)"Decrunching Effect", NULL, 0, 0L, NULL,
			NM_SUB,		(STRPTR)"COL0",			NULL, 0, 0L, NULL,
			NM_SUB,		(STRPTR)"COL2",			NULL, 0, 0L, NULL,
			NM_SUB,		(STRPTR)"POINTER",		NULL, 0, 0L, NULL,
			NM_SUB,		(STRPTR)"SCROLL",		NULL, 0, 0L, NULL,
			NM_SUB,		(STRPTR)"NONE",			NULL, 0, 0L, NULL,
		NM_ITEM,	(STRPTR)"Password",	(STRPTR)"P", CHECKIT|MENUTOGGLE, 0L, NULL,
	NM_TITLE,	(STRPTR)"Crunching", NULL, 0, NULL, NULL,
		NM_ITEM,	(STRPTR)"START...", (STRPTR)"T", NM_ITEMDISABLED, 0L, NULL,
	NM_END, NULL, NULL, 0, 0L, NULL
} ;

int	SetupScreen ( VOID )
{
	Scr = LockPubScreen ( (UBYTE * )"Workbench" ) ;
	if ( Scr == NULL )
		return (1L) ;

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

	return (0L) ;
}

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

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

struct	IntuiText	PPMCIText [] = {
			2, 0, JAM1, 10, 23, &PPMCFnt, (UBYTE *)"EFFICIENCY", &PPMCIText [1],
			2, 0, JAM1,171, 23, &PPMCFnt, (UBYTE *)"SPEEDUP BUFFER", &PPMCIText [2],
			2, 0, JAM1,332, 23, &PPMCFnt, (UBYTE *)"DECRUNCHING EFFECT", NULL
} ;
VOID	PPMCRender ( VOID )
{
	UWORD	bbox [24] = {	  0,  0, 483, 20,
							  0, 20, 161, 61,
							161, 20, 161, 46,
							161, 66, 161, 15,
							322, 20, 161, 61,
							  0, 81, 483, 22
	} ;
	UWORD	cnt ;

	for ( cnt = 0 ; cnt < 24 ; cnt+= 4 ) {
		DrawBevelBox (	PPMCWnd->RPort,
						PPMCWnd->BorderLeft + bbox [cnt],
						PPMCWnd->BorderTop + bbox [cnt+1],
						bbox [cnt+2], bbox [cnt+3],
						GT_VisualInfo,	VisualInfo,		TAG_DONE ) ;
	}

	DrawBevelBox (	PPMCWnd->RPort,
					PPMCWnd->BorderLeft + 8, PPMCWnd->BorderTop + 84,
					201, 16,
					GT_VisualInfo,	VisualInfo,
					GTBB_Recessed,	TRUE,				TAG_DONE ) ;

	PrintIText ( PPMCWnd->RPort, PPMCIText, PPMCWnd->BorderLeft, PPMCWnd->BorderTop ) ;
}

//	...
struct	NewGadget	PPMCNGad [] = {
  8, 3, 26,14, (UBYTE *)"?",		NULL, GD_About,	  PLACETEXT_IN,		NULL, NULL,
 39, 3, 51,14, (UBYTE *)"_LOAD",	NULL, GD_Load,	  PLACETEXT_IN,		NULL, NULL,
 95, 3, 51,14, (UBYTE *)"_SAVE",	NULL, GD_Save,	  PLACETEXT_IN,		NULL, NULL,
151, 3,247,14, NULL,				NULL, GD_Status,  0,				NULL, NULL,
403, 3, 72,14, (UBYTE *)"S_TART",	NULL, GD_Start,	  PLACETEXT_IN,		NULL, NULL,
133,33, 17, 9, NULL,				NULL, GD_CrunEff, PLACETEXT_LEFT,	NULL, NULL,
294,36, 17, 9, NULL,				NULL, GD_BufSize, PLACETEXT_LEFT,	NULL, NULL,
455,33, 17, 9, NULL,				NULL, GD_DecrCol, PLACETEXT_LEFT,	NULL, NULL,
172,68, 26,11, (UBYTE *)"_PASSWORD",NULL, GD_Crypt,	  PLACETEXT_RIGHT|NG_HIGHLABEL, NULL, NULL,
219,85, 41,14, (UBYTE *)"%",		NULL, GD_Crunch,  PLACETEXT_RIGHT,	NULL, NULL,
296,85, 41,14, (UBYTE *)"% gain",	NULL, GD_Gained,  PLACETEXT_RIGHT,	NULL, NULL,
394,84, 81,16, (UBYTE *)"ABORT",	NULL, GD_Abort,	  PLACETEXT_IN,		NULL, NULL
} ;
ULONG	PPMCGTags [] = {	(TAG_DONE),
							(GT_Underscore), '_', (TAG_DONE),
							(GT_Underscore), '_', (GA_Disabled), TRUE, (TAG_DONE),
							(GTTX_Text), (ULONG)"Load or Drop a File to crunch...", (GTTX_Border), TRUE, (TAG_DONE),
							(GT_Underscore), '_', (GA_Disabled), TRUE,	(TAG_DONE),
							(GTMX_Labels), (ULONG)&CrunEff0Labels [0], (GTMX_Active), 4, (TAG_DONE),
							(GTMX_Labels), (ULONG)&BufSize0Labels [0], (TAG_DONE),
							(GTMX_Labels), (ULONG)&DecrCol0Labels [0], (GTMX_Active), 4, (TAG_DONE),
							(GT_Underscore), '_', (TAG_DONE),
							(GTNM_Border), TRUE, (TAG_DONE),
							(GTNM_Border), TRUE, (TAG_DONE),
							(GA_Disabled), TRUE, (TAG_DONE)
		} ;
UWORD	PPMCGTypes [] = {	BUTTON_KIND,
							BUTTON_KIND,
							BUTTON_KIND,
							TEXT_KIND,
							BUTTON_KIND,
							MX_KIND,
							MX_KIND,
							MX_KIND,
							CHECKBOX_KIND,
							NUMBER_KIND,
							NUMBER_KIND,
							BUTTON_KIND
		} ;
int	OpenPPMCWindow ( VOID )
{
	struct	NewGadget	ng ;
	struct	Gadget		*g ;
	UWORD	lc, tc ;
	UWORD	zoom [4] ;

	g = CreateContext ( &PPMCGList ) ;
	if ( g == NULL )
		return (1L) ;

	for ( lc = 0, tc = 0 ; lc < PPMC_CNT ; lc++ ) {
		CopyMem ( (char *)&PPMCNGad [lc], (char *)&ng, (long)sizeof (struct NewGadget) ) ;

		ng.ng_VisualInfo	 = VisualInfo ;
		ng.ng_TextAttr		 = &PPMCFnt ;
		ng.ng_LeftEdge		+= Scr->WBorLeft ;
		ng.ng_TopEdge		+= Scr->WBorTop + Scr->RastPort.TxHeight + 1 ;

		PPMCGadgets [lc] = g = CreateGadgetA ( (ULONG)PPMCGTypes [lc], g, &ng, (struct TagItem *)&PPMCGTags [tc] ) ;

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

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

	zoom [0] = zoom [1] = 0 ;
	zoom [2] = TextLength ( &Scr->RastPort, (UBYTE *)PPMC_NAME, 4 ) + 80 ;
	zoom [3] = Scr->WBorTop + Scr->RastPort.TxHeight + 1 ;

	PPMCWnd = OpenWindowTags (
				NULL,
				WA_Left,		(Scr->Width-491)/2,
				WA_Top,			(Scr->Height-105)/2,
				WA_Width,		491,
				WA_Height,		105 + Scr->WBorTop + Scr->RastPort.TxHeight + 1,
				WA_IDCMP,		BUTTONIDCMP
								|MXIDCMP
								|CHECKBOXIDCMP
								|TEXTIDCMP
								|NUMBERIDCMP
								|IDCMP_MENUPICK
								|IDCMP_CLOSEWINDOW
								|IDCMP_REFRESHWINDOW,
				WA_Flags,		WFLG_DRAGBAR
								|WFLG_DEPTHGADGET
								|WFLG_CLOSEGADGET
								|WFLG_SMART_REFRESH
								|WFLG_ACTIVATE,
				WA_Gadgets,		PPMCGList,
				WA_Title,		(UBYTE *)PPMC_NAME,
				WA_ScreenTitle,	PPMC_SCREEN,
				WA_Zoom,		zoom,
				TAG_DONE
	) ;
	if ( PPMCWnd == NULL )
		return (4L) ;

	PPMCRender () ;

	SetupMenus () ;

	GT_RefreshWindow ( PPMCWnd, NULL ) ;

	ppmcRP = PPMCWnd->RPort ;

	return (0L) ;
}

VOID	ClosePPMCWindow ( VOID )
{
	if ( PPMCWnd ) {
		ClearMenus () ;
		CloseWindow ( PPMCWnd ) ;
		PPMCWnd = NULL;
	}

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

VOID	SetupMenus ( VOID )
{
	PPMCMenus = CreateMenus ( PPMCNewMenu, GTMN_FrontPen, 0L, TAG_DONE ) ;
	LayoutMenus ( PPMCMenus, VisualInfo, TAG_DONE ) ;
	SetMenuStrip ( PPMCWnd, PPMCMenus ) ;
}

VOID	ClearMenus ( VOID )
{
	ClearMenuStrip ( PPMCWnd ) ;
	FreeMenus ( PPMCMenus ) ;
	PPMCMenus = NULL ;
}

//	...