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

#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 "apccomm_gui.h"

struct Screen         *Scr = NULL;
UBYTE                 *PubScreenName = NULL;
APTR                   VisualInfo = NULL;
struct Window         *MainWindowWnd = NULL;
struct Window         *Receive_filesWnd = NULL;
struct Window         *Send_filesWnd = NULL;
struct Window         *ConnectWindowWnd = NULL;
struct Gadget         *MainWindowGList = NULL;
struct Gadget         *Receive_filesGList = NULL;
struct Gadget         *Send_filesGList = NULL;
struct Gadget         *ConnectWindowGList = NULL;
struct IntuiMessage    MainWindowMsg;
struct IntuiMessage    Receive_filesMsg;
struct IntuiMessage    Send_filesMsg;
struct IntuiMessage    ConnectWindowMsg;
struct Gadget         *MainWindowGadgets[10];
struct Gadget         *Receive_filesGadgets[4];
struct Gadget         *Send_filesGadgets[4];
struct Gadget         *ConnectWindowGadgets[2];
UWORD                  MainWindowLeft = 32;
UWORD                  MainWindowTop = 14;
UWORD                  MainWindowWidth = 583;
UWORD                  MainWindowHeight = 202;
UWORD                  Receive_filesLeft = 153;
UWORD                  Receive_filesTop = 101;
UWORD                  Receive_filesWidth = 424;
UWORD                  Receive_filesHeight = 71;
UWORD                  Send_filesLeft = 110;
UWORD                  Send_filesTop = 82;
UWORD                  Send_filesWidth = 424;
UWORD                  Send_filesHeight = 71;
UWORD                  ConnectWindowLeft = 197;
UWORD                  ConnectWindowTop = 85;
UWORD                  ConnectWindowWidth = 225;
UWORD                  ConnectWindowHeight = 38;
UBYTE                 *MainWindowWdt = (UBYTE *)"APCComm";
UBYTE                 *Receive_filesWdt = (UBYTE *)"Receive files";
UBYTE                 *Send_filesWdt = (UBYTE *)"Send files";
UBYTE                 *ConnectWindowWdt = (UBYTE *)"Connecting";

struct TextAttr topaz8 = {
	( STRPTR )"topaz.font", 8, 0x00, 0x01 };

UWORD MainWindowGTypes[] = {
	CHECKBOX_KIND,
	STRING_KIND,
	BUTTON_KIND,
	BUTTON_KIND,
	BUTTON_KIND,
	BUTTON_KIND,
	BUTTON_KIND,
	STRING_KIND,
	LISTVIEW_KIND,
	BUTTON_KIND
};

UWORD Receive_filesGTypes[] = {
	TEXT_KIND,
	TEXT_KIND,
	TEXT_KIND,
	BUTTON_KIND
};

UWORD Send_filesGTypes[] = {
	TEXT_KIND,
	TEXT_KIND,
	TEXT_KIND,
	BUTTON_KIND
};

UWORD ConnectWindowGTypes[] = {
	TEXT_KIND,
	BUTTON_KIND
};

struct NewGadget MainWindowNGad[] = {
	15, 7, 26, 11, (UBYTE *)"Ignore protection bits", NULL, GD_ipcb, PLACETEXT_RIGHT, NULL, (APTR)ipcbClicked,
	116, 21, 421, 13, (UBYTE *)"Receive dir", NULL, GD_rdsg, PLACETEXT_LEFT, NULL, (APTR)rdsgClicked,
	20, 37, 533, 13, (UBYTE *)"Receive", NULL, GD_rb, PLACETEXT_IN, NULL, (APTR)rbClicked,
	20, 146, 267, 13, (UBYTE *)"Add", NULL, GD_addb, PLACETEXT_IN, NULL, (APTR)addbClicked,
	287, 146, 266, 13, (UBYTE *)"Remove", NULL, GD_removeb, PLACETEXT_IN, NULL, (APTR)removebClicked,
	20, 161, 533, 13, (UBYTE *)"Send", NULL, GD_sb, PLACETEXT_IN, NULL, (APTR)sbClicked,
	8, 183, 557, 13, (UBYTE *)"Exit", NULL, GD_eb, PLACETEXT_IN, NULL, (APTR)ebClicked,
	20, 133, 533, 13, NULL, NULL, GD_slvsg, 0, NULL, (APTR)slvsgClicked,
	20, 73, 533, 72, (UBYTE *)"Send files", NULL, GD_sflv, PLACETEXT_ABOVE, NULL, (APTR)sflvClicked,
	537, 21, 16, 13, (UBYTE *)"G", NULL, GD_gfb, PLACETEXT_IN, NULL, (APTR)gfbClicked
};

struct NewGadget Receive_filesNGad[] = {
	116, 5, 289, 13, (UBYTE *)"Receive file", NULL, GD_rft, PLACETEXT_LEFT, NULL, NULL,
	84, 21, 321, 13, (UBYTE *)"Progress", NULL, GD_rbt, PLACETEXT_LEFT, NULL, NULL,
	12, 37, 61, 13, (UBYTE *)"KByte/s", NULL, GD_rrt, PLACETEXT_RIGHT, NULL, NULL,
	12, 53, 393, 13, (UBYTE *)"Cancel", NULL, GD_rcb, PLACETEXT_IN, NULL, (APTR)rcbClicked
};

struct NewGadget Send_filesNGad[] = {
	92, 5, 313, 13, (UBYTE *)"Send file", NULL, GD_sft, PLACETEXT_LEFT, NULL, NULL,
	84, 21, 321, 13, (UBYTE *)"Progress", NULL, GD_sbt, PLACETEXT_LEFT, NULL, NULL,
	12, 37, 61, 13, (UBYTE *)"KByte/s", NULL, GD_srt, PLACETEXT_RIGHT, NULL, NULL,
	12, 53, 393, 13, (UBYTE *)"Cancel", NULL, GD_scb, PLACETEXT_IN, NULL, (APTR)scbClicked
};

struct NewGadget ConnectWindowNGad[] = {
	96, 5, 113, 13, (UBYTE *)"Connecting", NULL, GD_ct, PLACETEXT_LEFT, NULL, NULL,
	8, 21, 201, 13, (UBYTE *)"Cancel", NULL, GD_conb, PLACETEXT_IN, NULL, (APTR)conbClicked
};

ULONG MainWindowGTags[] = {
	(GTCB_Checked), TRUE, (TAG_DONE),
	(GTST_MaxChars), 256, (TAG_DONE),
	(TAG_DONE),
	(TAG_DONE),
	(TAG_DONE),
	(TAG_DONE),
	(TAG_DONE),
	(GTST_MaxChars), 1024, (TAG_DONE),
	(GTLV_ShowSelected), 1L, (TAG_DONE),
	(TAG_DONE)
};

ULONG Receive_filesGTags[] = {
	(GTTX_Text), (ULONG)" ", (GTTX_Border), TRUE, (GTTX_CopyText), TRUE, (TAG_DONE),
	(GTTX_Text), (ULONG)" ", (GTTX_Border), TRUE, (GTTX_CopyText), TRUE, (TAG_DONE),
	(GTTX_Text), (ULONG)" ", (GTTX_Border), TRUE, (GTTX_CopyText), TRUE, (TAG_DONE),
	(TAG_DONE)
};

ULONG Send_filesGTags[] = {
	(GTTX_Text), (ULONG)" ", (GTTX_Border), TRUE, (GTTX_CopyText), TRUE, (TAG_DONE),
	(GTTX_Text), (ULONG)" ", (GTTX_Border), TRUE, (GTTX_CopyText), TRUE, (TAG_DONE),
	(GTTX_Text), (ULONG)" ", (GTTX_Border), TRUE, (GTTX_CopyText), TRUE, (TAG_DONE),
	(TAG_DONE)
};

ULONG ConnectWindowGTags[] = {
	(GTTX_Border), TRUE, (TAG_DONE),
	(TAG_DONE)
};

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

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

	return( 0L );
}

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

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

void MainWindowRender( void )
{
	UWORD		offx, offy;

	offx = MainWindowWnd->BorderLeft;
	offy = MainWindowWnd->BorderTop;


	DrawBevelBox( MainWindowWnd->RPort, offx + 8, offy + 1, 557, 53, GT_VisualInfo, VisualInfo, GTBB_Recessed, TRUE, TAG_DONE );
	DrawBevelBox( MainWindowWnd->RPort, offx + 8, offy + 57, 557, 123, GT_VisualInfo, VisualInfo, GTBB_Recessed, TRUE, TAG_DONE );
}

int HandleMainWindowIDCMP( void )
{
	struct IntuiMessage	*m;
	int			(*func)();
	BOOL			running = TRUE;

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

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

		GT_ReplyIMsg( m );

		switch ( MainWindowMsg.Class ) {

			case	IDCMP_REFRESHWINDOW:
				GT_BeginRefresh( MainWindowWnd );
				MainWindowRender();
				GT_EndRefresh( MainWindowWnd, TRUE );
				break;

			case	IDCMP_CLOSEWINDOW:
				running = MainWindowCloseWindow();
				break;

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

int OpenMainWindowWindow( void )
{
	struct NewGadget	ng;
	struct Gadget	*g;
	struct TagItem	*tmp;
	UWORD		lc, tc;
	UWORD		offx = Scr->WBorLeft, offy = Scr->WBorTop + Scr->RastPort.TxHeight + 1;

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

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

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

		ng.ng_VisualInfo = VisualInfo;
		ng.ng_TextAttr   = &topaz8;
		ng.ng_LeftEdge  += offx;
		ng.ng_TopEdge   += offy;

		if ( MainWindowGTypes[ lc ] == LISTVIEW_KIND ) {
			if ( tmp = FindTagItem( GTLV_ShowSelected, ( struct TagItem * )&MainWindowGTags[ tc ] )) {
				if ( tmp->ti_Data ) tmp->ti_Data = (ULONG)g;
			}
		}

		MainWindowGadgets[ lc ] = g = CreateGadgetA((ULONG)MainWindowGTypes[ lc ], g, &ng, ( struct TagItem * )&MainWindowGTags[ tc ] );

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

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

	if ( ! ( MainWindowWnd = OpenWindowTags( NULL,
				WA_Left,	MainWindowLeft,
				WA_Top,		MainWindowTop,
				WA_Width,	MainWindowWidth,
				WA_Height,	MainWindowHeight + offy,
				WA_IDCMP,	CHECKBOXIDCMP|STRINGIDCMP|BUTTONIDCMP|LISTVIEWIDCMP|IDCMP_CLOSEWINDOW|IDCMP_REFRESHWINDOW,
				WA_Flags,	WFLG_DRAGBAR|WFLG_DEPTHGADGET|WFLG_CLOSEGADGET|WFLG_SMART_REFRESH|WFLG_ACTIVATE|WFLG_RMBTRAP,
				WA_Gadgets,	MainWindowGList,
				WA_Title,	MainWindowWdt,
				WA_ScreenTitle,	"APCComm",
				WA_PubScreen,	Scr,
				TAG_DONE )))
	return( 4L );

	GT_RefreshWindow( MainWindowWnd, NULL );

	MainWindowRender();

	return( 0L );
}

void CloseMainWindowWindow( void )
{
	if ( MainWindowWnd        ) {
		CloseWindow( MainWindowWnd );
		MainWindowWnd = NULL;
	}

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

int HandleReceive_filesIDCMP( void )
{
	struct IntuiMessage	*m;
	int			(*func)();
	BOOL			running = TRUE;

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

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

		GT_ReplyIMsg( m );

		switch ( Receive_filesMsg.Class ) {

			case	IDCMP_REFRESHWINDOW:
				GT_BeginRefresh( Receive_filesWnd );
				GT_EndRefresh( Receive_filesWnd, TRUE );
				break;

			case	IDCMP_CLOSEWINDOW:
				running = Receive_filesCloseWindow();
				break;

			case	IDCMP_GADGETUP:
				func = ( void * )(( struct Gadget * )Receive_filesMsg.IAddress )->UserData;
				running = func();
				break;
		}
	}
	return( running );
}

int OpenReceive_filesWindow( void )
{
	struct NewGadget	ng;
	struct Gadget	*g;
	struct TagItem	*tmp;
	UWORD		lc, tc;
	UWORD		offx = Scr->WBorLeft, offy = Scr->WBorTop + Scr->RastPort.TxHeight + 1;

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

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

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

		ng.ng_VisualInfo = VisualInfo;
		ng.ng_TextAttr   = &topaz8;
		ng.ng_LeftEdge  += offx;
		ng.ng_TopEdge   += offy;

		Receive_filesGadgets[ lc ] = g = CreateGadgetA((ULONG)Receive_filesGTypes[ lc ], g, &ng, ( struct TagItem * )&Receive_filesGTags[ tc ] );

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

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

	if ( ! ( Receive_filesWnd = OpenWindowTags( NULL,
				WA_Left,	Receive_filesLeft,
				WA_Top,		Receive_filesTop,
				WA_Width,	Receive_filesWidth,
				WA_Height,	Receive_filesHeight + offy,
				WA_IDCMP,	TEXTIDCMP|BUTTONIDCMP|IDCMP_CLOSEWINDOW|IDCMP_REFRESHWINDOW,
				WA_Flags,	WFLG_DRAGBAR|WFLG_DEPTHGADGET|WFLG_CLOSEGADGET|WFLG_SMART_REFRESH|WFLG_ACTIVATE|WFLG_RMBTRAP,
				WA_Gadgets,	Receive_filesGList,
				WA_Title,	Receive_filesWdt,
				WA_ScreenTitle,	"APCComm",
				WA_PubScreen,	Scr,
				TAG_DONE )))
	return( 4L );

	GT_RefreshWindow( Receive_filesWnd, NULL );

	return( 0L );
}

void CloseReceive_filesWindow( void )
{
	if ( Receive_filesWnd        ) {
		CloseWindow( Receive_filesWnd );
		Receive_filesWnd = NULL;
	}

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

int HandleSend_filesIDCMP( void )
{
	struct IntuiMessage	*m;
	int			(*func)();
	BOOL			running = TRUE;

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

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

		GT_ReplyIMsg( m );

		switch ( Send_filesMsg.Class ) {

			case	IDCMP_REFRESHWINDOW:
				GT_BeginRefresh( Send_filesWnd );
				GT_EndRefresh( Send_filesWnd, TRUE );
				break;

			case	IDCMP_CLOSEWINDOW:
				running = Send_filesCloseWindow();
				break;

			case	IDCMP_GADGETUP:
				func = ( void * )(( struct Gadget * )Send_filesMsg.IAddress )->UserData;
				running = func();
				break;
		}
	}
	return( running );
}

int OpenSend_filesWindow( void )
{
	struct NewGadget	ng;
	struct Gadget	*g;
	struct TagItem	*tmp;
	UWORD		lc, tc;
	UWORD		offx = Scr->WBorLeft, offy = Scr->WBorTop + Scr->RastPort.TxHeight + 1;

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

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

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

		ng.ng_VisualInfo = VisualInfo;
		ng.ng_TextAttr   = &topaz8;
		ng.ng_LeftEdge  += offx;
		ng.ng_TopEdge   += offy;

		Send_filesGadgets[ lc ] = g = CreateGadgetA((ULONG)Send_filesGTypes[ lc ], g, &ng, ( struct TagItem * )&Send_filesGTags[ tc ] );

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

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

	if ( ! ( Send_filesWnd = OpenWindowTags( NULL,
				WA_Left,	Send_filesLeft,
				WA_Top,		Send_filesTop,
				WA_Width,	Send_filesWidth,
				WA_Height,	Send_filesHeight + offy,
				WA_IDCMP,	TEXTIDCMP|BUTTONIDCMP|IDCMP_CLOSEWINDOW|IDCMP_REFRESHWINDOW,
				WA_Flags,	WFLG_DRAGBAR|WFLG_DEPTHGADGET|WFLG_CLOSEGADGET|WFLG_SMART_REFRESH|WFLG_ACTIVATE|WFLG_RMBTRAP,
				WA_Gadgets,	Send_filesGList,
				WA_Title,	Send_filesWdt,
				WA_ScreenTitle,	"APCComm",
				WA_PubScreen,	Scr,
				TAG_DONE )))
	return( 4L );

	GT_RefreshWindow( Send_filesWnd, NULL );

	return( 0L );
}

void CloseSend_filesWindow( void )
{
	if ( Send_filesWnd        ) {
		CloseWindow( Send_filesWnd );
		Send_filesWnd = NULL;
	}

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

int HandleConnectWindowIDCMP( void )
{
	struct IntuiMessage	*m;
	int			(*func)();
	BOOL			running = TRUE;

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

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

		GT_ReplyIMsg( m );

		switch ( ConnectWindowMsg.Class ) {

			case	IDCMP_REFRESHWINDOW:
				GT_BeginRefresh( ConnectWindowWnd );
				GT_EndRefresh( ConnectWindowWnd, TRUE );
				break;

			case	IDCMP_CLOSEWINDOW:
				running = ConnectWindowCloseWindow();
				break;

			case	IDCMP_GADGETUP:
				func = ( void * )(( struct Gadget * )ConnectWindowMsg.IAddress )->UserData;
				running = func();
				break;
		}
	}
	return( running );
}

int OpenConnectWindowWindow( void )
{
	struct NewGadget	ng;
	struct Gadget	*g;
	struct TagItem	*tmp;
	UWORD		lc, tc;
	UWORD		offx = Scr->WBorLeft, offy = Scr->WBorTop + Scr->RastPort.TxHeight + 1;

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

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

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

		ng.ng_VisualInfo = VisualInfo;
		ng.ng_TextAttr   = &topaz8;
		ng.ng_LeftEdge  += offx;
		ng.ng_TopEdge   += offy;

		ConnectWindowGadgets[ lc ] = g = CreateGadgetA((ULONG)ConnectWindowGTypes[ lc ], g, &ng, ( struct TagItem * )&ConnectWindowGTags[ tc ] );

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

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

	if ( ! ( ConnectWindowWnd = OpenWindowTags( NULL,
				WA_Left,	ConnectWindowLeft,
				WA_Top,		ConnectWindowTop,
				WA_Width,	ConnectWindowWidth,
				WA_Height,	ConnectWindowHeight + offy,
				WA_IDCMP,	TEXTIDCMP|BUTTONIDCMP|IDCMP_CLOSEWINDOW|IDCMP_REFRESHWINDOW,
				WA_Flags,	WFLG_DRAGBAR|WFLG_DEPTHGADGET|WFLG_CLOSEGADGET|WFLG_SMART_REFRESH|WFLG_ACTIVATE|WFLG_RMBTRAP,
				WA_Gadgets,	ConnectWindowGList,
				WA_Title,	ConnectWindowWdt,
				WA_ScreenTitle,	"APCComm",
				WA_PubScreen,	Scr,
				TAG_DONE )))
	return( 4L );

	GT_RefreshWindow( ConnectWindowWnd, NULL );

	return( 0L );
}

void CloseConnectWindowWindow( void )
{
	if ( ConnectWindowWnd        ) {
		CloseWindow( ConnectWindowWnd );
		ConnectWindowWnd = NULL;
	}

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

