/*
**	termStatusWindow.c
**
**	Status information window support routines
**
**	Copyright © 1990-1993 by Olaf `Olsen' Barthel & MXM
**		All Rights Reserved
*/

#include "termGlobal.h"

enum	{	GAD_SESSION,GAD_BYTES_IN,GAD_BYTES_OUT,GAD_CONNECT_STRING,GAD_BBS_NAME,GAD_BBS_NUMBER,
		GAD_BBS_COMMENT,GAD_BBS_USER,GAD_SCREEN_SIZE,GAD_PORT_NAME,GAD_BUFFER_SIZE,GAD_MEMORY };

STATIC struct Gadget	*InfoGadgetArray[GAD_MEMORY + 1];
STATIC struct Gadget	*InfoGadgetList;

STATIC struct Gadget *
CreateAllGadgets(struct Gadget **GadgetArray,struct Gadget **GadgetList)
{
	struct Gadget		*Gadget;
	struct NewGadget	 NewGadget;
	UWORD			 Counter = 0;

	SZ_SizeSetup(Window -> WScreen,&UserFont,TRUE);

	memset(&NewGadget,0,sizeof(struct NewGadget));

	if(Gadget = CreateContext(GadgetList))
	{
		UBYTE		DummyBuffer[256],
				Time[30],
				Date[30];
		struct DateTime	DateTime;
		LONG		Width,DummyWidth;

		DateTime . dat_Stamp	= SessionStart;
		DateTime . dat_Format	= FORMAT_DOS;
		DateTime . dat_Flags	= 0;
		DateTime . dat_StrDay	= NULL;
		DateTime . dat_StrDate	= Date;
		DateTime . dat_StrTime	= Time;

		if(DateToStr(&DateTime))
			SPrintf(DummyBuffer,"%s %s",Date,Time);
		else
			strcpy(DummyBuffer,"-");

		SZ_AddLeftOffset(SZ_LeftOffsetDelta(MSG_INFOWINDOW_SESSION_START_GAD,MSG_INFOWINDOW_FREE_MEMORY_GAD));

		Width = strlen(BaudBuffer);

		if(Width > 60)
			Width = 60;

		DummyWidth = strlen(DummyBuffer);

		if(DummyWidth > Width)
			Width = DummyWidth;

		SZ_SetWidth(SZ_Width(TEXT_KIND,NULL,Width,NULL));

		NewGadget . ng_GadgetText	= LocaleString(MSG_INFOWINDOW_SESSION_START_GAD);
		NewGadget . ng_GadgetID		= Counter;
		NewGadget . ng_Flags		= 0;

		GadgetArray[Counter++] = Gadget = CreateGadget(TEXT_KIND,Gadget,&NewGadget,
			SZ_Adjust,		TRUE,
			SZ_AutoWidth,		TRUE,

			GTTX_Text,		DummyBuffer,
			GTTX_CopyText,		TRUE,
			GTTX_Border,		TRUE,
		TAG_DONE);

		NewGadget . ng_GadgetText	= LocaleString(MSG_INFOWINDOW_BYTES_RECEIVED_GAD);
		NewGadget . ng_GadgetID		= Counter;

		GadgetArray[Counter++] = Gadget = CreateGadget(TEXT_KIND,Gadget,&NewGadget,
			SZ_Adjust,		TRUE,
			SZ_AutoWidth,		TRUE,
			SZ_AlignExtra,		TRUE,

			GTTX_Border,		TRUE,
			GTTX_Justification,	GTJ_RIGHT,
		TAG_DONE);

		NewGadget . ng_GadgetText	= LocaleString(MSG_INFOWINDOW_BYTES_SENT_GAD);
		NewGadget . ng_GadgetID		= Counter;

		GadgetArray[Counter++] = Gadget = CreateGadget(TEXT_KIND,Gadget,&NewGadget,
			SZ_Adjust,		TRUE,
			SZ_AutoWidth,		TRUE,

			GTTX_Border,		TRUE,
			GTTX_Justification,	GTJ_RIGHT,
		TAG_DONE);

		NewGadget . ng_GadgetText	= LocaleString(MSG_INFOWINDOW_CONNECTION_MESSAGE_GAD);
		NewGadget . ng_GadgetID		= Counter;

		GadgetArray[Counter++] = Gadget = CreateGadget(TEXT_KIND,Gadget,&NewGadget,
			SZ_Adjust,		TRUE,
			SZ_AutoWidth,		TRUE,

			GTTX_Text,		BaudBuffer[0] ? BaudBuffer : (STRPTR)"-",
			GTTX_CopyText,		TRUE,
			GTTX_Border,		TRUE,
		TAG_DONE);


		NewGadget . ng_GadgetText	= LocaleString(MSG_INFOWINDOW_BBS_NAME_GAD);
		NewGadget . ng_GadgetID		= Counter;

		GadgetArray[Counter++] = Gadget = CreateGadget(TEXT_KIND,Gadget,&NewGadget,
			SZ_Adjust,		TRUE,
			SZ_AutoWidth,		TRUE,
			SZ_AlignExtra,		TRUE,

			GTTX_Text,		CurrentBBSName[0] ? CurrentBBSName : (STRPTR)"-",
			GTTX_CopyText,		TRUE,
			GTTX_Border,		TRUE,
		TAG_DONE);

		NewGadget . ng_GadgetText	= LocaleString(MSG_INFOWINDOW_BBS_PHONE_NUMBER_GAD);
		NewGadget . ng_GadgetID		= Counter;

		GadgetArray[Counter++] = Gadget = CreateGadget(TEXT_KIND,Gadget,&NewGadget,
			SZ_Adjust,		TRUE,
			SZ_AutoWidth,		TRUE,

			GTTX_Text,		CurrentBBSNumber[0] ? CurrentBBSNumber : (STRPTR)"-",
			GTTX_CopyText,		TRUE,
			GTTX_Border,		TRUE,
		TAG_DONE);

		NewGadget . ng_GadgetText	= LocaleString(MSG_INFOWINDOW_BBS_COMMENT_GAD);
		NewGadget . ng_GadgetID		= Counter;

		GadgetArray[Counter++] = Gadget = CreateGadget(TEXT_KIND,Gadget,&NewGadget,
			SZ_Adjust,		TRUE,
			SZ_AutoWidth,		TRUE,

			GTTX_Text,		CurrentBBSComment[0] ? CurrentBBSComment : (STRPTR)"-",
			GTTX_CopyText,		TRUE,
			GTTX_Border,		TRUE,
		TAG_DONE);

		NewGadget . ng_GadgetText	= LocaleString(MSG_INFOWINDOW_BBS_USER_NAME_GAD);
		NewGadget . ng_GadgetID		= Counter;

		GadgetArray[Counter++] = Gadget = CreateGadget(TEXT_KIND,Gadget,&NewGadget,
			SZ_Adjust,		TRUE,
			SZ_AutoWidth,		TRUE,

			GTTX_Text,		UserName[0] ? UserName : (STRPTR)"-",
			GTTX_CopyText,		TRUE,
			GTTX_Border,		TRUE,
		TAG_DONE);


		NewGadget . ng_GadgetText	= LocaleString(MSG_INFOWINDOW_SCREEN_SIZE_GAD);
		NewGadget . ng_GadgetID		= Counter;

		GadgetArray[Counter++] = Gadget = CreateGadget(TEXT_KIND,Gadget,&NewGadget,
			SZ_Adjust,		TRUE,
			SZ_AutoWidth,		TRUE,
			SZ_AlignExtra,		TRUE,

			GTTX_Border,		TRUE,
		TAG_DONE);

		NewGadget . ng_GadgetText	= LocaleString(MSG_INFOWINDOW_AREXX_PORT_NAME_GAD);
		NewGadget . ng_GadgetID		= Counter;

		GadgetArray[Counter++] = Gadget = CreateGadget(TEXT_KIND,Gadget,&NewGadget,
			SZ_Adjust,		TRUE,
			SZ_AutoWidth,		TRUE,
			SZ_AlignExtra,		TRUE,

#ifdef USE_AREXX
			GTTX_Text,		RexxPortName,
#else
			GTTX_Text,		"-",
#endif	/* USE_AREXX */
			GTTX_Border,		TRUE,
		TAG_DONE);

		NewGadget . ng_GadgetText	= LocaleString(MSG_INFOWINDOW_BUFFER_SIZE_GAD);
		NewGadget . ng_GadgetID		= Counter;

		GadgetArray[Counter++] = Gadget = CreateGadget(TEXT_KIND,Gadget,&NewGadget,
			SZ_Adjust,		TRUE,
			SZ_AutoWidth,		TRUE,
			SZ_AlignExtra,		TRUE,

			GTTX_Border,		TRUE,
			GTTX_Justification,	GTJ_RIGHT,
		TAG_DONE);

		NewGadget . ng_GadgetText	= LocaleString(MSG_INFOWINDOW_FREE_MEMORY_GAD);
		NewGadget . ng_GadgetID		= Counter;

		GadgetArray[Counter] = Gadget = CreateGadget(TEXT_KIND,Gadget,&NewGadget,
			SZ_Adjust,		TRUE,
			SZ_AutoWidth,		TRUE,

			GTTX_Border,		TRUE,
			GTTX_Justification,	GTJ_RIGHT,
		TAG_DONE);
	}

	return(Gadget);
}

	/* RefreshInfoWindow():
	 *
	 *	Refresh, i.e. redraw, the contents of the info window.
	 */

VOID
RefreshInfoWindow()
{
	if(InfoWindow)
	{
		UBYTE DummyBuffer[256];

		SPrintf(DummyBuffer,ConvNumber,BytesIn);

		GT_SetGadgetAttrs(InfoGadgetArray[GAD_BYTES_IN],InfoWindow,NULL,
			GTTX_Text,	DummyBuffer,
		TAG_DONE);

		SPrintf(DummyBuffer,ConvNumber,BytesOut);

		GT_SetGadgetAttrs(InfoGadgetArray[GAD_BYTES_OUT],InfoWindow,NULL,
			GTTX_Text,	DummyBuffer,
		TAG_DONE);

		if(XEmulatorBase && XEM_IO)
		{
			if(XEmulatorBase -> lib_Version >= 4)
			{
				ULONG Result = XEmulatorInfo(XEM_IO,XEMI_CONSOLE_DIMENSIONS);

				SPrintf(DummyBuffer,"%ld × %ld",XEMI_EXTRACT_COLUMNS(Result),XEMI_EXTRACT_LINES(Result));
			}
			else
				strcpy(DummyBuffer,"???");
		}
		else
			SPrintf(DummyBuffer,"%ld × %ld",LastColumn + 1,LastLine + 1);

		GT_SetGadgetAttrs(InfoGadgetArray[GAD_SCREEN_SIZE],InfoWindow,NULL,
			GTTX_Text,	DummyBuffer,
		TAG_DONE);

		SPrintf(DummyBuffer,ConvNumber,BufferSpace);

		GT_SetGadgetAttrs(InfoGadgetArray[GAD_BUFFER_SIZE],InfoWindow,NULL,
			GTTX_Text,	DummyBuffer,
		TAG_DONE);

		SPrintf(DummyBuffer,ConvNumber,AvailMem(MEMF_ANY));

		GT_SetGadgetAttrs(InfoGadgetArray[GAD_MEMORY],InfoWindow,NULL,
			GTTX_Text,	DummyBuffer,
		TAG_DONE);

		GT_SetGadgetAttrs(InfoGadgetArray[GAD_BBS_NAME],InfoWindow,NULL,
			GTTX_Text,	CurrentBBSName[0] ? CurrentBBSName : (STRPTR)"-",
		TAG_DONE);

		GT_SetGadgetAttrs(InfoGadgetArray[GAD_BBS_NUMBER],InfoWindow,NULL,
			GTTX_Text,	CurrentBBSNumber[0] ? CurrentBBSNumber : (STRPTR)"-",
		TAG_DONE);

		GT_SetGadgetAttrs(InfoGadgetArray[GAD_BBS_COMMENT],InfoWindow,NULL,
			GTTX_Text,	CurrentBBSComment[0] ? CurrentBBSComment : (STRPTR)"-",
		TAG_DONE);

		GT_SetGadgetAttrs(InfoGadgetArray[GAD_BBS_USER],InfoWindow,NULL,
			GTTX_Text,	UserName[0] ? UserName : (STRPTR)"-",
		TAG_DONE);
	}
}

	/* CloseInfoWindow():
	 *
	 *	Close the info window.
	 */

VOID
CloseInfoWindow()
{
	CheckItem(MEN_STATUS_WINDOW,FALSE);

	if(InfoWindow)
	{
		PutWindowInfo(WINDOW_STATUS,InfoWindow -> LeftEdge,InfoWindow -> TopEdge,InfoWindow -> Width,InfoWindow -> Height);

		ClearMenuStrip(InfoWindow);

		CloseWindowSafely(InfoWindow);

		InfoWindow = NULL;
	}

	if(InfoGadgetList)
	{
		FreeGadgets(InfoGadgetList);

		InfoGadgetList = NULL;
	}
}

	/* OpenInfoWindow():
	 *
	 *	Open the info window.
	 */

VOID
OpenInfoWindow()
{
	if(!InfoWindow)
	{
		if(CreateAllGadgets(InfoGadgetArray,&InfoGadgetList))
		{
			LONG	Left	= 0,
				Top	= 0,
				Width	= SZ_GetWindowWidth(),
				Height	= SZ_GetWindowHeight();

			GetWindowInfo(WINDOW_STATUS,&Left,&Top,&Width,&Height,NULL,NULL);

			if(InfoWindow = OpenWindowTags(NULL,
				WA_Left,		Left,
				WA_Top,			Top,
				WA_Width,		Width,
				WA_Height,		Height,

				WA_DragBar,		TRUE,
				WA_DepthGadget,		TRUE,
				WA_CloseGadget,		TRUE,
				WA_RMBTrap,		TRUE,
				WA_DepthGadget,		TRUE,
				WA_CustomScreen,	Window -> WScreen,
				WA_NewLookMenus,	TRUE,

				WA_Title,		LocaleString(MSG_INFOWINDOW_STATUS_INFORMATION_TXT),
			TAG_DONE))
			{
				AddGList(InfoWindow,InfoGadgetList,(UWORD)-1,(UWORD)-1,NULL);
				RefreshGList(InfoGadgetList,InfoWindow,NULL,(UWORD)-1);
				GT_RefreshWindow(InfoWindow,NULL);

				InfoWindow -> UserPort = Window -> UserPort;

				ModifyIDCMP(InfoWindow,Window -> IDCMPFlags);

				SetMenuStrip(InfoWindow,Menu);

				CheckItem(MEN_STATUS_WINDOW,TRUE);

				InfoWindow -> Flags &= ~WFLG_RMBTRAP;

				RefreshInfoWindow();
			}
		}
	}
}
