#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 "CHEESE.h"
#include "Editor.h"
#include "CHEESEExtern.h"


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

        APTR    MAIN_GROUP, BUTTONS, BUTTON1, BUTTON2;
        static const struct Hook Load_TextHook = { { NULL,NULL },(VOID *)Load_Text,NULL,NULL };


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

        Object->EDITOR = EditorObject,

                MUIA_Frame, MUIV_Frame_ImageButton,

        End;

        Object->MAIN_SLIDER = SliderObject,
                MUIA_Slider_Min, 0,
                MUIA_Slider_Max, 100,
                MUIA_Group_Horiz, FALSE,
                MUIA_Slider_Level, 0,
        End;

        BUTTON1 = SimpleButton("Load");

        BUTTON2 = SimpleButton("Save");

        BUTTONS = GroupObject,
                Child, BUTTON1,
                Child, BUTTON2,
        End;

        MAIN_GROUP = GroupObject,
                MUIA_Group_Horiz, TRUE,
                Child, Object->EDITOR,
                Child, Object->MAIN_SLIDER,
                Child, BUTTONS,
        End;

        Object->MAIN_WINDOW = WindowObject,
                MUIA_Window_Title, "Cheesy!!!!",
                MUIA_Window_ID, MAKE_ID('0', 'W', 'I', 'N'),
                WindowContents, MAIN_GROUP,
        End;

        Object->App = ApplicationObject,
                MUIA_Application_Author, "Cray",
                MUIA_Application_Base, "EDAM",
                MUIA_Application_Title, "Cray-1's Cheese Editor",
                MUIA_Application_Version, "$VER: One 01.00 (26.12.95)",
                MUIA_Application_Copyright, "Cray",
                MUIA_Application_Description, "An Editor For Chesse",
                SubWindow, Object->MAIN_WINDOW,
        End;


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

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

        DoMethod(BUTTON1,
                MUIM_Notify, MUIA_Pressed, FALSE,
                Object->App,
                2,
                MUIM_CallHook, &Load_TextHook
                );

        DoMethod(Object->MAIN_WINDOW,
                MUIM_Window_SetCycleChain, Object->EDITOR,
                Object->MAIN_SLIDER,
                0
                );

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


        return(Object);
}

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