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

/* Libraries */
#include <libraries/mui.h>
#include <libraries/gadtools.h> /* for Barlabel in MenuItem */
#include <exec/memory.h>

/* Prototypes */
#include <proto/muimaster.h>
#include <clib/exec_protos.h>
#include <clib/alib_protos.h>

#include "WriteCatalogGUI.h"

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

	APTR	GROUP_ROOT_0, obj_aux0, obj_aux1, GR_Buttons, Space_0, Space_1;

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

	Object->STR_GetStringName = StringObject,
		MUIA_Frame, MUIV_Frame_String,
		MUIA_ControlChar, 'n',
	End;

	obj_aux1 = KeyLabel2("GetString Name", 'n');

	obj_aux0 = GroupObject,
		MUIA_Group_Columns, 2,
		Child, obj_aux1,
		Child, Object->STR_GetStringName,
	End;

	Object->GR_GetStringName = GroupObject,
		Child, obj_aux0,
	End;

	Object->GR_Text = GroupObject,
		MUIA_Frame, MUIV_Frame_Group,
	End;

	Space_0 = HVSpace;

	Object->BT_GenerateFiles = TextObject,
		ButtonFrame,
		MUIA_Background, MUII_ButtonBack,
		MUIA_ControlChar, 'g',
		MUIA_Text_Contents, "Generate Files",
		MUIA_Text_PreParse, "\033c",
		MUIA_Text_HiChar, 'g',
		MUIA_InputMode, MUIV_InputMode_RelVerify,
	End;

	Object->BT_Save = TextObject,
		ButtonFrame,
		MUIA_Background, MUII_ButtonBack,
		MUIA_ControlChar, 's',
		MUIA_Text_Contents, "Save",
		MUIA_Text_PreParse, "\033c",
		MUIA_Text_HiChar, 's',
		MUIA_InputMode, MUIV_InputMode_RelVerify,
	End;

	Space_1 = HVSpace;

	GR_Buttons = GroupObject,
		MUIA_Group_Horiz, TRUE,
		Child, Space_0,
		Child, Object->BT_GenerateFiles,
		Child, Object->BT_Save,
		Child, Space_1,
	End;

	GROUP_ROOT_0 = GroupObject,
		Child, Object->GR_GetStringName,
		Child, Object->GR_Text,
		Child, GR_Buttons,
	End;

	Object->WI_WriteCatalog = WindowObject,
		MUIA_Window_Title, "WriteCatalog",
		MUIA_Window_ID, MAKE_ID('0', 'W', 'I', 'N'),
		WindowContents, GROUP_ROOT_0,
	End;

	Object->App = ApplicationObject,
		MUIA_Application_Author, "Billault(s)",
		MUIA_Application_Base, "WriteCatalog",
		MUIA_Application_Title, "WriteCatalog",
		MUIA_Application_Version, "$VER: WriteCatalog 1.0 (20.09.95)",
		MUIA_Application_Copyright, "Billault(s)",
		MUIA_Application_Description, "Générateur C pour la localisation",
		SubWindow, Object->WI_WriteCatalog,
	End;


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

	DoMethod(Object->WI_WriteCatalog,
		MUIM_Notify, MUIA_Window_CloseRequest, TRUE,
		Object->App,
		2,
		MUIM_Application_ReturnID, MUIV_Application_ReturnID_Quit
		);

	DoMethod(Object->BT_GenerateFiles,
		MUIM_Notify, MUIA_Pressed, FALSE,
		Object->App,
		2,
		MUIM_Application_ReturnID, ID_BT_GenerateFiles
		);

	DoMethod(Object->BT_Save,
		MUIM_Notify, MUIA_Pressed, TRUE,
		Object->App,
		2,
		MUIM_Application_ReturnID, ID_BT_Save
		);

	DoMethod(Object->WI_WriteCatalog,
		MUIM_Window_SetCycleChain, Object->GR_GetStringName,
		Object->STR_GetStringName,
		Object->GR_Text,
		Object->BT_GenerateFiles,
		Object->BT_Save,
		0
		);

	return(Object);
}

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