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

#include <exec/types.h>
#include <libraries/locale.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/locale_protos.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 "Hydra_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)
	};

UBYTE StatTextsLocalized = 0;

struct IntuiText StatTexts[] =
	{     
	2, 0, JAM2, 12, 1, &topa81281, (UBYTE *)StatTexts1, &StatTexts[1],
	2, 0, JAM2, 12, 63, &topa81281, (UBYTE *)StatTexts2, NULL
	};

struct Window *Stat = NULL;
APTR StatVisualInfo;
struct DrawInfo *StatDrawInfo;
struct Gadget *StatGList;
struct Gadget *StatGadgets[15];
UBYTE StatFirstRun = 0;

ULONG StatGadgetTags[] =
	{
	(GTNM_Border), TRUE,
	(TAG_END),
	(GTNM_Border), TRUE,
	(TAG_END),
	(GTNM_Number), 100,
	(GTNM_Border), TRUE,
	(TAG_END),
	(GTTX_Border), TRUE,
	(TAG_END),
	(GTTX_Text), 0,
	(GTTX_Border), TRUE,
	(TAG_END),
	(GTTX_Border), TRUE,
	(TAG_END),
	(GTNM_Border), TRUE,
	(TAG_END),
	(GTNM_Border), TRUE,
	(TAG_END),
	(GTNM_Number), 100,
	(GTNM_Border), TRUE,
	(TAG_END),
	(GTTX_Border), TRUE,
	(TAG_END),
	(GTTX_Text), 0,
	(GTTX_Border), TRUE,
	(TAG_END),
	(GTTX_Border), TRUE,
	(TAG_END),
	(GTLV_Selected), 0,
	(GTLV_ReadOnly), TRUE,
	(TAG_END),
	(GTTX_Border), TRUE,
	(TAG_END),
	(GTTX_Border), TRUE,
	(TAG_END),
	};

UWORD StatGadgetTypes[] =
	{
	NUMBER_KIND,
	NUMBER_KIND,
	NUMBER_KIND,
	TEXT_KIND,
	TEXT_KIND,
	TEXT_KIND,
	NUMBER_KIND,
	NUMBER_KIND,
	NUMBER_KIND,
	TEXT_KIND,
	TEXT_KIND,
	TEXT_KIND,                 
	LISTVIEW_KIND,
	TEXT_KIND,
	TEXT_KIND,
	};

struct NewGadget StatNewGad[] =
	{
	74, 27, 64, 12, (UBYTE*)Stat_txSizeString, &topaz800, Stat_txSize, 1, NULL,  (APTR)&StatGadgetTags[0],
	187, 27, 64, 12, (UBYTE*)Stat_txDoneString, &topaz800, Stat_txDone, 1, NULL,  (APTR)&StatGadgetTags[3],
	412, 27, 32, 12, (UBYTE*)Stat_txPercentString, &topaz800, Stat_txPercent, 1, NULL,  (APTR)&StatGadgetTags[6],
	74, 12, 370, 12, (UBYTE*)Stat_txStatusString, &topaz800, Stat_txStatus, 1, NULL,  (APTR)&StatGadgetTags[11],
	295, 27, 48, 12, (UBYTE*)Stat_txTimeString, &topaz800, Stat_txTime, 1, NULL,  (APTR)&StatGadgetTags[14],
	74, 42, 269, 12, (UBYTE*)Stat_txFileString, &topaz800, Stat_txFile, 1, NULL,  (APTR)&StatGadgetTags[19],
	74, 89, 64, 12, (UBYTE*)Stat_rxSizeString, &topaz800, Stat_rxSize, 1, NULL,  (APTR)&StatGadgetTags[22],
	187, 89, 64, 12, (UBYTE*)Stat_rxDoneString, &topaz800, Stat_rxDone, 1, NULL,  (APTR)&StatGadgetTags[25],
	412, 89, 32, 12, (UBYTE*)Stat_rxPercentString, &topaz800, Stat_rxPercent, 1, NULL,  (APTR)&StatGadgetTags[28],
	74, 74, 370, 12, (UBYTE*)Stat_rxStatusString, &topaz800, Stat_rxStatus, 1, NULL,  (APTR)&StatGadgetTags[33],
	295, 89, 48, 12, (UBYTE*)Stat_rxTimeString, &topaz800, Stat_rxTime, 1, NULL,  (APTR)&StatGadgetTags[36],
	74, 104, 269, 14, (UBYTE*)Stat_rxFileString, &topaz800, Stat_rxFile, 1, NULL,  (APTR)&StatGadgetTags[41],
	2, 126, 454, 60, (UBYTE*)Stat_MsgHistoryString, &topaz800, Stat_MsgHistory, 1, NULL,  (APTR)&StatGadgetTags[44],
	396, 42, 48, 12, (UBYTE*)Stat_txCPSString, &topaz800, Stat_txCPS, 1, NULL,  (APTR)&StatGadgetTags[49],
	396, 104, 48, 12, (UBYTE*)Stat_rxCPSString, &topaz800, Stat_rxCPS, 1, NULL,  (APTR)&StatGadgetTags[52],
	};
UWORD StatZoomInfo[4] = { 123, 57, 92, 11 };

struct Library *DiskfontBase = NULL;
struct Library *GadToolsBase = NULL;
struct GfxBase *GfxBase = NULL;
struct IntuitionBase *IntuitionBase = NULL;
struct LocaleBase *LocaleBase = NULL;
struct Catalog *base_Catalog = NULL;
STRPTR base_BuiltInLanguage = (STRPTR)"english";
LONG base_Version = 0;

STRPTR base_Strings[] =
{
  (STRPTR)"tx Details",
  (STRPTR)"rx Details",
  (STRPTR)"00:00",
  (STRPTR)"00:00",
  (STRPTR)"Size",
  (STRPTR)"Done",
  (STRPTR)"Percent",
  (STRPTR)"Status",
  (STRPTR)"Time",
  (STRPTR)"File",
  (STRPTR)"Size",
  (STRPTR)"Done",
  (STRPTR)"Percent",
  (STRPTR)"Status",
  (STRPTR)"Time",
  (STRPTR)"File",
  (STRPTR)"",
  (STRPTR)"CPS",
  (STRPTR)"CPS",
  (STRPTR)"HYDRA X-Fer status",
};

struct TextAttr topa81281 = { (STRPTR)"topaz", 8, 128, 1 };
struct TextAttr topaz800 = { (STRPTR)"topaz.font", 8, 0, 0 };

void RendWindowStat( struct Window *Win, void *vi )
{
int loop;
UWORD offx = Win->BorderLeft;
UWORD offy = Win->BorderTop;
if (Win != NULL) 
	{
	BevelTags[3] = (ULONG)vi;
	DrawBevelBoxA( Win->RPort, 2+offx,4+offy,454,58, (struct TagItem *)(&BevelTags[0]));
	DrawBevelBoxA( Win->RPort,2+4+offx,4+2+offy,454-8,58-4, (struct TagItem *)(&BevelTags[2]));
	DrawBevelBoxA( Win->RPort, 2+offx,66+offy,454,58, (struct TagItem *)(&BevelTags[0]));
	DrawBevelBoxA( Win->RPort,2+4+offx,66+2+offy,454-8,58-4, (struct TagItem *)(&BevelTags[2]));
	for( loop=0; loop<2; loop++)
	{
		if (StatTexts[loop].ITextFont==NULL)
			StatTexts[loop].ITextFont=Win->WScreen->Font;

		StatTexts[loop].FrontPen = StatDrawInfo->dri_Pens[TEXTPEN];
		StatTexts[loop].BackPen = StatDrawInfo->dri_Pens[BACKGROUNDPEN];
  }

	if (StatTextsLocalized == 0)
		{
		StatTextsLocalized = 1;
		for( loop=0; loop<2; loop++)
			StatTexts[loop].IText = GetString((LONG)StatTexts[loop].IText);
		}
	PrintIText( Win->RPort, StatTexts, offx, offy);
	}
}

int OpenStatWindow( struct Screen *Scr )
{
UWORD offx, offy;
UWORD loop;
struct NewGadget newgad;
struct Gadget *Gad;
struct Gadget *Gad2;
APTR Cla;
if (StatFirstRun == 0)
	{
	StatFirstRun = 1;
	StatGadgetTags[15] = (ULONG)GetString(Stat_txTimeInitText);
	StatGadgetTags[37] = (ULONG)GetString(Stat_rxTimeInitText);
	}
if (Stat == NULL)
	{
	if (NULL != Scr)
		{
		offx = Scr->WBorLeft;
		offy = Scr->WBorTop + Scr->Font->ta_YSize+1;
		if (NULL != ( StatVisualInfo = GetVisualInfoA( Scr, NULL)))
			{
			if (NULL != ( StatDrawInfo = GetScreenDrawInfo( Scr)))
				{
				StatGList = NULL;
				Gad = CreateContext( &StatGList);
				for ( loop=0 ; loop<15 ; loop++ )
					if (StatGadgetTypes[loop] != 198)
						{
						CopyMem((char * )&StatNewGad[loop], ( char * )&newgad, (long)sizeof( struct NewGadget ));
						newgad.ng_VisualInfo = StatVisualInfo;
						newgad.ng_LeftEdge += offx;
						newgad.ng_TopEdge += offy;
						newgad.ng_GadgetText = GetString((LONG)newgad.ng_GadgetText);
						StatGadgets[ loop ] = NULL;
						StatGadgets[ newgad.ng_GadgetID - StatFirstID ] = Gad = CreateGadgetA( StatGadgetTypes[loop], Gad, &newgad, newgad.ng_UserData );
						}
				for ( loop=0 ; loop<15 ; loop++ )
					if (StatGadgetTypes[loop] == 198)
						{
						StatGadgets[ loop ] = NULL;
						Cla = NULL;
						if (Gad)
							StatGadgets[ loop ] = Gad2 = (struct Gadget *) NewObjectA( (struct IClass *)Cla, StatNewGad[ loop ].ng_GadgetText, StatNewGad[ loop ].ng_UserData );
						}
				if (Gad != NULL)
					{
					if (NULL != (Stat = OpenWindowTags( NULL, (WA_Left), 127,
									(WA_Top), 45,
									(WA_Width), 462+offx,
									(WA_Height), 189+offy,
									(WA_Title), (LONG)GetString(StatTitle),
									(WA_MinWidth), 150,
									(WA_MinHeight), 25,
									(WA_MaxWidth), 1200,
									(WA_MaxHeight), 1200,
									(WA_DragBar), TRUE,
									(WA_DepthGadget), TRUE,
									(WA_CloseGadget), TRUE,
									(WA_Dummy+0x30), TRUE,
									(WA_SmartRefresh), TRUE,
									(WA_Gadgets), StatGList,
									(WA_Zoom), StatZoomInfo,
									(WA_PubScreen) , (LONG)Scr,
  								BBSGlobal->ScreenInfo->UsingBackfill  ? (WA_BackFill) : (TAG_IGNORE), &BBSGlobal->backfillhook, // *!* Added
//StatDrawInfo->dri_Depth >=4 ? (WA_BackFill) : (TAG_IGNORE), &BBSGlobal->backfillhook, // *!* Added
									(WA_IDCMP),4194936,
									(TAG_END))))
						{
						RendWindowStat(Stat, StatVisualInfo );
						GT_RefreshWindow( Stat, NULL);
						RefreshGList( StatGList, Stat, NULL, ~0);
						return( 0L );
						}
					}
				FreeGadgets( StatGList);
				FreeScreenDrawInfo( Scr, StatDrawInfo );
				}
			FreeVisualInfo( StatVisualInfo );
			}
		}
	}
else
	{
	WindowToFront(Stat);
	ActivateWindow(Stat);
	return( 0L );
	}
return( 1L );
}

void CloseStatWindow( void )
{
if (Stat != NULL)
	{
	FreeScreenDrawInfo( Stat->WScreen, StatDrawInfo );
	StatDrawInfo = NULL;
	CloseWindow( Stat);
	Stat = NULL;
	FreeVisualInfo( StatVisualInfo);
	FreeGadgets( StatGList);
	}
}

int OpenLibs( void )
{
if ( NULL != (DiskfontBase = OpenLibrary((UBYTE *)"diskfont.library" , 36)))
	if ( NULL != (GadToolsBase = OpenLibrary((UBYTE *)"gadtools.library" , 37)))
		if ( NULL != (GfxBase = (struct GfxBase * )OpenLibrary((UBYTE *)"graphics.library" , 37)))
			if ( NULL != (IntuitionBase = (struct IntuitionBase * )OpenLibrary((UBYTE *)"intuition.library" , 37)))
				if ( NULL != (LocaleBase = (struct LocaleBase * )OpenLibrary((UBYTE *)"locale.library" , 38)))
					return( 0L );
CloseLibs();
return( 1L );
}

void CloseLibs( void )
{
if (NULL != DiskfontBase )
	CloseLibrary( DiskfontBase );
if (NULL != GadToolsBase )
	CloseLibrary( GadToolsBase );
if (NULL != GfxBase )
	CloseLibrary( ( struct Library * )GfxBase );
if (NULL != IntuitionBase )
	CloseLibrary( ( struct Library * )IntuitionBase );
if (NULL != LocaleBase )
	CloseLibrary( ( struct Library * )LocaleBase );
}

STRPTR GetString(LONG strnum)
{
	if (base_Catalog == NULL)
		return(base_Strings[strnum]);
	return(GetCatalogStr(base_Catalog, strnum, base_Strings[strnum]));
}

void ClosebaseCatalog(void)
{
	if (LocaleBase != NULL)
		CloseCatalog(base_Catalog);
	base_Catalog = NULL;
}

void OpenbaseCatalog(struct Locale *loc, STRPTR language)
{
	LONG tag, tagarg;
	if (language == NULL)
		tag=TAG_IGNORE;
	else
		{
		tag = OC_Language;
		tagarg = (LONG)language;
		}
	if (LocaleBase != NULL  &&  base_Catalog == NULL)
		base_Catalog = OpenCatalog(loc, (STRPTR) "base.catalog",
											OC_BuiltInLanguage, base_BuiltInLanguage,
											tag, tagarg,
											OC_Version, base_Version,
											TAG_DONE);
}

