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

#ifdef _DCC
#define __inline
#endif

//#include "GUI.h"
#include <Global/Main_Global.h>
#include "GUIExtern.h"


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

	APTR	Main_LayoutGod, Interface_Group, Buttons;
	static const struct Hook Button_Add_ObjectHook = { { NULL,NULL },(VOID *)Button_Add_Object,NULL,NULL };
	static const struct Hook Button_Remove_ObjectHook = { { NULL,NULL },(VOID *)Button_Remove_Object,NULL,NULL };
	static const struct Hook Button_About_ObjectHook = { { NULL,NULL },(VOID *)Button_About_Object,NULL,NULL };
	static const struct Hook Button_Mock_WindowHook = { { NULL,NULL },(VOID *)Button_Mock_Window,NULL,NULL };


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

	Object->Constructor_Group = GroupObject,
		MUIA_Weight, 68,
		MUIA_Frame, MUIV_Frame_Group,
	End;

	Object->Objects_Status = FloattextObject,
		MUIA_Frame, MUIV_Frame_ReadList,
	End;

	Object->Objects_Status = ListviewObject,
		MUIA_FrameTitle, "Status",
		MUIA_Listview_Input, FALSE,
		MUIA_Listview_List, Object->Objects_Status,
	End;

	Object->Add_Object = SimpleButton("Add Object");

	Object->Rem_Object = SimpleButton("Remove Object");

	Object->About_Object = SimpleButton("About Object");

	Object->Show_Window = SimpleButton("Show Window");

	Object->Load = SimpleButton("Load");

	Object->Save = SimpleButton("Save");

	Buttons = GroupObject,
		MUIA_Group_Columns, 2,
		Child, Object->Add_Object,
		Child, Object->Rem_Object,
		Child, Object->About_Object,
		Child, Object->Show_Window,
		Child, Object->Load,
		Child, Object->Save,
	End;

	Interface_Group = GroupObject,
		MUIA_Weight, 70,
		MUIA_Frame, MUIV_Frame_Group,
		Child, Object->Objects_Status,
		Child, Buttons,
	End;

	Main_LayoutGod = GroupObject,
		MUIA_Group_Horiz, TRUE,
		Child, Object->Constructor_Group,
		Child, Interface_Group,
	End;

	Object->Main_Toolbox_Window = WindowObject,
		MUIA_Window_Title, "MUI Constructor",
		MUIA_Window_ID, MAKE_ID('0', 'W', 'I', 'N'),
		MUIA_Window_NoMenus, TRUE,
		WindowContents, Main_LayoutGod,
	End;

	Object->App = ApplicationObject,
		MUIA_Application_Author, "Cray-1/J.Goldberg",
		MUIA_Application_Base, "CSNC",
		MUIA_Application_Title, "Constructor",
		MUIA_Application_Version, "$VER: MUIConstructer V1.00",
		MUIA_Application_Copyright, "Big Time Digital Design",
		MUIA_Application_Description, "A Replacment For MUI Builder.",
		SubWindow, Object->Main_Toolbox_Window,
	End;


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

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

	DoMethod(Object->Add_Object,
		MUIM_Notify, MUIA_Pressed, FALSE,
		Object->App,
		2,
		MUIM_CallHook, &Button_Add_ObjectHook
		);

	DoMethod(Object->Rem_Object,
		MUIM_Notify, MUIA_Pressed, FALSE,
		Object->App,
		2,
		MUIM_CallHook, &Button_Remove_ObjectHook
		);

	DoMethod(Object->About_Object,
		MUIM_Notify, MUIA_Pressed, FALSE,
		Object->App,
		2,
		MUIM_CallHook, &Button_About_ObjectHook
		);

	DoMethod(Object->Show_Window,
		MUIM_Notify, MUIA_Pressed, FALSE,
		Object->App,
		2,
		MUIM_CallHook, &Button_Mock_WindowHook
		);

	DoMethod(Object->Main_Toolbox_Window,
		MUIM_Window_SetCycleChain, Object->Constructor_Group,
		Object->Objects_Status,
		Object->Add_Object,
		Object->Rem_Object,
		Object->About_Object,
		Object->Show_Window,
		Object->Load,
		Object->Save,
		0
		);

	set(Object->Main_Toolbox_Window,
		MUIA_Window_Open, TRUE
		);


	return(Object);
}

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