/**************************************/
/***** FILLIN							 *****/
/***** (c) 1996 by Dirk Holtwick  *****/
/**************************************/

#ifndef MAKE_ID
#define MAKE_ID(a,b,c,d) ((ULONG) (a)<<24 | (ULONG) (b)<<16 | (ULONG) (c)<<8 | (ULONG) (d))
#endif

#include <pragma/asl_lib.h>
#include "FillOut.h"
#include "cat.h"

extern STRPTR GetFillInString(long);
extern ULONG do_check( struct Hook *, void *, APTR );
extern ULONG do_init( struct Hook *, void *, APTR );
extern ULONG do_load( struct Hook *, void *, APTR );
extern ULONG do_info( struct Hook *, void *, APTR );
extern ULONG do_answ( struct Hook *, void *, APTR );

static char *GetMBString(int ref)
{
	char *aux;

	aux = GetFillInString(ref);
	if (aux[1] == '\0') return(&aux[2]);
	else                return(aux);
}

struct ObjApp * CreateApp(void)
{
	struct ObjApp * Object;

	APTR	gr_fillout, gr_buttons, gr_info, gr_info2, im_dirk;
	static const struct Hook do_checkHook = { { NULL,NULL },(VOID *)do_check,NULL,NULL };
	static const struct Hook do_initHook = { { NULL,NULL },(VOID *)do_init,NULL,NULL };
	static const struct Hook do_loadHook = { { NULL,NULL },(VOID *)do_load,NULL,NULL };
	static const struct Hook do_infoHook = { { NULL,NULL },(VOID *)do_info,NULL,NULL };
	static const struct Hook do_answHook = { { NULL,NULL },(VOID *)do_answ,NULL,NULL };


	if (!(Object = AllocVec(sizeof(struct ObjApp), MEMF_PUBLIC|MEMF_CLEAR)))
		return(NULL);

	Object->win_fillout = WindowObject,
		MUIA_Window_Title, GetMBString(MSG_win_fillout),
		MUIA_Window_ID, MAKE_ID('0', 'W', 'I', 'N'),
		MUIA_Window_AppWindow, TRUE,
		MUIA_Window_NoMenus, TRUE,
		WindowContents, GroupObject,

			Child, PopaslObject,
				MUIA_CycleChain, 1,
				MUIA_Popstring_String, Object->str_file = StringObject,
					MUIA_Frame, MUIV_Frame_String,
					MUIA_String_Format, MUIV_String_Format_Center,
					MUIA_String_MaxLen, 200,
					MUIA_String_Contents, "FORMS/ChangeMe",
					End,
				MUIA_Popstring_Button, PopButton(MUII_PopFile),
				ASLFR_DoPatterns, TRUE,
				ASLFR_InitialDrawer, "dito:forms/",
				ASLFR_InitialPattern,"#?.form",
				End,

			Child, HGroup,
//				MUIA_Frame, MUIV_Frame_Group,
				Child, Object->ga_good =  GaugeObject,
					GaugeFrame,
					MUIA_FixWidthTxt, "X",
					MUIA_Gauge_Horiz, FALSE,
//					MUIA_Gauge_InfoText, "%ld %%",
					MUIA_Gauge_Max, 100,
					End,
				Child, Object->lv_text = ListviewObject,
					MUIA_CycleChain, 1,
					MUIA_Listview_Input, FALSE,
					MUIA_Listview_List, FloattextObject,
						MUIA_Frame, MUIV_Frame_InputList,
						MUIA_Floattext_Justify, TRUE,
						End,
					End,
				End,
			Child, Object->str_antw = StringObject,
				MUIA_CycleChain, 1,
				MUIA_ControlChar, ' ',
				MUIA_Frame, MUIV_Frame_String,
				MUIA_String_Format, MUIV_String_Format_Center,
				End,
			Child, HGroup,
				Child, Object->bt_nochmal = 	SimpleButton(GetMBString(MSG_bt_nochmal)),
				Child, Object->bt_info = 		SimpleButton(GetMBString(MSG_bt_info)),
				Child, Object->bt_answer = 	SimpleButton(GetMBString(MSG_bt_answer)),
				End,
			End,
		End;

	Object->App = ApplicationObject,
		MUIA_Application_Author, "Dirk Holtwick",
		MUIA_Application_Base, "FILLIN",
		MUIA_Application_Title, "FillIn",
		MUIA_Application_Version, "$VER: FillIn 1.2 (19.02.96)",
		MUIA_Application_Copyright, "© Dirk Holtwick, 1995-96",
		MUIA_Application_Description, "Fill in the right answers",
		MUIA_Application_HelpFile, GetMBString(MSG_help),
		SubWindow, Object->win_fillout,
	End;


	if (!Object->App){
		FreeVec(Object);
		return(NULL);
	}

	DoMethod(Object->win_fillout,	MUIM_Notify, MUIA_Window_CloseRequest, TRUE,
		Object->App,2,MUIM_Application_ReturnID, MUIV_Application_ReturnID_Quit);
	DoMethod(Object->str_antw,	MUIM_Notify, MUIA_String_Acknowledge, MUIV_EveryTime,
		Object->str_antw,	2,	MUIM_CallHook, &do_checkHook);
	DoMethod(Object->str_file,	MUIM_Notify, MUIA_String_Acknowledge, MUIV_EveryTime,
		Object->str_file,	2,	MUIM_CallHook, &do_loadHook);
	DoMethod(Object->bt_nochmal, MUIM_Notify, MUIA_Pressed, FALSE,
		Object->bt_nochmal,2,MUIM_CallHook, &do_initHook);
	DoMethod(Object->bt_info,MUIM_Notify, MUIA_Pressed, FALSE,
		Object->bt_info,2,MUIM_CallHook, &do_infoHook);
	DoMethod(Object->bt_answer,MUIM_Notify, MUIA_Pressed, FALSE,
		Object->bt_answer,2,MUIM_CallHook, &do_answHook);

	set(Object->win_fillout, MUIA_Window_Open, TRUE);
	set(Object->win_fillout, MUIA_Window_DefaultObject, Object->str_antw);

	return(Object);
}

void DisposeApp(struct ObjApp * Object)
{
	MUI_DisposeObject(Object->App);
	FreeVec(Object);
}
