/*********************************************/
/*                                           */
/*       Designer (C) Ian OConnor 1994       */
/*                                           */
/*      Designer Produced C include file     */
/*                                           */
/*********************************************/

#include <exec/types.h>
#include <exec/memory.h>
#include <dos/dosextens.h>
#include <intuition/screens.h>
#include <intuition/intuition.h>
#include <intuition/gadgetclass.h>
#include <libraries/gadtools.h>
#include <diskfont/diskfont.h>
#include <utility/utility.h>
#include <graphics/gfxbase.h>
#include <workbench/workbench.h>
#include <graphics/scale.h>
#include <clib/exec_protos.h>
#include <clib/wb_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 "XPR_Gui.h"

#include <HBBS/types.h>
#include <HBBS/Defines.h>
#include <HBBS/structures.h>

extern struct BBSGlobalData *BBSGlobal;

ULONG BevelTags[] =
	{
	(GTBB_Recessed), TRUE,
	(GT_VisualInfo), 0,
	(TAG_DONE)
	};

struct Window *XPRWin = NULL;
APTR XPRWinVisualInfo;
struct DrawInfo *XPRWinDrawInfo;
struct Gadget *XPRWinGList;
struct Gadget *XPRWinGadgets[12];
UBYTE XPRWinFirstRun = 0;

ULONG XPRWinGadgetTags[] =
	{
	(GTNM_Border), TRUE,
	(TAG_END),
	(GTNM_Border), TRUE,
	(TAG_END),
	(GTNM_Border), TRUE,
	(TAG_END),
	(GTTX_Text), (ULONG)"<unknown>",
	(GTTX_Border), TRUE,
	(TAG_END),
	(GTTX_Text), (ULONG)"xprzmodem.library",
	(GTTX_Border), TRUE,
	(TAG_END),
	(GTNM_Border), TRUE,
	(TAG_END),
	(GTNM_Border), TRUE,
	(TAG_END),
	(GTNM_Border), TRUE,
	(TAG_END),
	(GTTX_Text), (ULONG)"<none>",
	(GTTX_Border), TRUE,
	(TAG_END),
	(GTTX_Text), (ULONG)"<none>",
	(GTTX_Border), TRUE,
	(TAG_END),
	(GTNM_Border), TRUE,
	(TAG_END),
	(GTNM_Border), TRUE,
	(TAG_END),
	};

UWORD XPRWinGadgetTypes[] =
	{
	NUMBER_KIND,
	NUMBER_KIND,
	NUMBER_KIND,
	TEXT_KIND,
	TEXT_KIND,
	NUMBER_KIND,
	NUMBER_KIND,
	NUMBER_KIND,
	TEXT_KIND,
	TEXT_KIND,
	NUMBER_KIND,
	NUMBER_KIND,
	};

struct NewGadget XPRWinNewGadgets[] =
	{
	103, 50, 72, 12, (UBYTE *)"Transferred", &HBBS8066, XPRWin_Transferred, 1, NULL,  (APTR)&XPRWinGadgetTags[0],
	103, 63, 72, 12, (UBYTE *)"Remaining", &HBBS8066, XPRWin_Remaining, 1, NULL,  (APTR)&XPRWinGadgetTags[3],
	103, 37, 72, 12, (UBYTE *)"Size", &HBBS8066, XPRWin_Size, 1, NULL,  (APTR)&XPRWinGadgetTags[6],
	72, 17, 268, 12, (UBYTE *)"File", &HBBS8066, XPRWin_File, 1, NULL,  (APTR)&XPRWinGadgetTags[9],
	72, 4, 268, 12, (UBYTE *)"Library", &HBBS8066, XPRWin_Library, 1, NULL,  (APTR)&XPRWinGadgetTags[14],
	268, 37, 72, 12, (UBYTE *)"CPS", &HBBS8066, XPRWin_CPS, 1, NULL,  (APTR)&XPRWinGadgetTags[19],
	268, 50, 72, 12, (UBYTE *)"Blocks", &HBBS8066, XPRWin_Blocks, 1, NULL,  (APTR)&XPRWinGadgetTags[22],
	268, 63, 72, 12, (UBYTE *)"Block Size", &HBBS8066, XPRWin_BlockSize, 1, NULL,  (APTR)&XPRWinGadgetTags[25],
	72, 97, 268, 12, (UBYTE *)"Message", &HBBS8066, XPRWin_Message, 1, NULL,  (APTR)&XPRWinGadgetTags[28],
	72, 111, 268, 12, (UBYTE *)"Error", &HBBS8066, XPRWin_Error, 1, NULL,  (APTR)&XPRWinGadgetTags[33],
	103, 76, 72, 12, (UBYTE *)"Percent", &HBBS8066, XPRWin_Percent, 1, NULL,  (APTR)&XPRWinGadgetTags[38],
	268, 76, 72, 12, (UBYTE *)"Errors", &HBBS8066, XPRWin_Errors, 1, NULL,  (APTR)&XPRWinGadgetTags[41],
	};
UWORD XPRWinZoomInfo[4] = { 111, 30, 400, 10 };

struct TextAttr HBBS8066 = { (STRPTR)"HBBS.font", 8, 0, 66 };

void RendWindowXPRWin( struct Window *Win, void *vi )
{
UWORD offx = Win->BorderLeft;
UWORD offy = Win->BorderTop;
if (Win != NULL)
	{
	BevelTags[3] = (ULONG)vi;
	DrawBevelBoxA( Win->RPort, 2+offx,1+offy,343,32, (struct TagItem *)(&BevelTags[2]));
	DrawBevelBoxA( Win->RPort, 2+offx,35+offy,343,58, (struct TagItem *)(&BevelTags[2]));
	DrawBevelBoxA( Win->RPort, 2+offx,95+offy,343,30, (struct TagItem *)(&BevelTags[2]));
	}
}

int OpenWindowXPRWin(struct Screen *Scr)  // *!* Changed
{
UWORD offx, offy;
UWORD loop;
struct NewGadget newgad;
struct Gadget *Gad;
struct Gadget *Gad2;
APTR Cla;
if (XPRWinFirstRun == 0)
	{
	XPRWinFirstRun = 1;
	}

// *!* Start of change

if (Scr)
{

// *!* End Of Change

	offx = Scr->WBorLeft;
	offy = Scr->WBorTop + Scr->Font->ta_YSize+1;
	if (NULL != ( XPRWinVisualInfo = GetVisualInfoA( Scr, NULL)))
		{
		if (NULL != ( XPRWinDrawInfo = GetScreenDrawInfo( Scr)))
			{
			XPRWinGList = NULL;
			Gad = CreateContext( &XPRWinGList);
			for ( loop=0 ; loop<12 ; loop++ )
				if (XPRWinGadgetTypes[loop] != 198)
					{
					CopyMem((char * )&XPRWinNewGadgets[loop], ( char * )&newgad, (long)sizeof( struct NewGadget ));
					newgad.ng_VisualInfo = XPRWinVisualInfo;
					newgad.ng_LeftEdge += offx;
					newgad.ng_TopEdge += offy;
					XPRWinGadgets[ loop ] = NULL;
					XPRWinGadgets[ newgad.ng_GadgetID - XPRWinFirstID ] = Gad = CreateGadgetA( XPRWinGadgetTypes[loop], Gad, &newgad, newgad.ng_UserData );
					}
			for ( loop=0 ; loop<12 ; loop++ )
				if (XPRWinGadgetTypes[loop] == 198)
					{
					XPRWinGadgets[ loop ] = NULL;
					Cla = NULL;
					if (Gad)
						XPRWinGadgets[ loop ] = Gad2 = (struct Gadget *) NewObjectA( (struct IClass *)Cla, XPRWinNewGadgets[ loop ].ng_GadgetText, XPRWinNewGadgets[ loop ].ng_UserData );
					}
			if (Gad != NULL)
				{
				if (NULL != (XPRWin = OpenWindowTags( NULL, (WA_Left), 154,
								(WA_Top), 73,
								(WA_Width), 351+offx,
								(WA_Height), 128+offy,
								(WA_Title), "XPR Transfer Status",
								(WA_MinWidth), 150,
								(WA_MinHeight), 25,
								(WA_MaxWidth), 1200,
								(WA_MaxHeight), 1200,
								(WA_DragBar), TRUE,
								(WA_DepthGadget), TRUE,
								(WA_CloseGadget), TRUE,
								(WA_SmartRefresh), TRUE,
								(WA_AutoAdjust), TRUE,
								(WA_Gadgets), XPRWinGList,
								(WA_Zoom), XPRWinZoomInfo,
								(WA_PubScreen) , (LONG)Scr,
								(WA_IDCMP),514,
                BBSGlobal->ScreenInfo->UsingBackfill  ? (WA_BackFill) : (TAG_IGNORE), &BBSGlobal->backfillhook, // *!* Added
								(TAG_END))))
					{
					RendWindowXPRWin(XPRWin, XPRWinVisualInfo );
					GT_RefreshWindow( XPRWin, NULL);
					RefreshGList( XPRWinGList, XPRWin, NULL, ~0);
					return( 0L );
					}
				}
			FreeGadgets( XPRWinGList);
			FreeScreenDrawInfo( Scr, XPRWinDrawInfo );
			}
		FreeVisualInfo( XPRWinVisualInfo );
		}
	}
return( 1L );
}

void CloseWindowXPRWin( void )
{
if (XPRWin != NULL)
	{
	FreeScreenDrawInfo( XPRWin->WScreen, XPRWinDrawInfo );
	XPRWinDrawInfo = NULL;
	CloseWindow( XPRWin);
	XPRWin = NULL;
	FreeVisualInfo( XPRWinVisualInfo);
	FreeGadgets( XPRWinGList);
	}
}

int OpenDiskFonts( void )
{
	int OKSoFar = 0;
if (NULL == OpenDiskFont( &HBBS8066 ) )
	OKSoFar = 1;
return ( OKSoFar );
}

