#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 "a_prefsgui.h"
#include <libraries/gadtools.h>

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

        APTR    MNProjProject, MNProjOpen, MNProjSaveAs, MNProjBarLabel2, MNProjQuit;
        APTR    MNProjEdit, MNEditResetToDefaults, MNProjLastSaved, MNProjRestore;
        APTR    MNProjSettings, MNProjCreateIcons, GROUP_ROOT_0, GR_Files, LA_label_0;
        APTR    obj_aux0, obj_aux1, LA_label_1, obj_aux2, obj_aux3, LA_label_2, obj_aux4;
        APTR    obj_aux5, LA_label_3, obj_aux6, obj_aux7, LA_label_4, obj_aux8, obj_aux9;
        APTR    GR_Macros, LA_label_5, LA_label_6, LA_label_7, LA_label_8, LA_label_9;
        APTR    LA_label_16, GR_Misc, GR_grp_15, LA_label_10, LA_label_11, GR_grp_16;
        APTR    GR_grp_17, LA_label_13, LA_label_14, LA_label_15, LA_label_18, LA_label_19;
        APTR    Space_4, Space_5, REC_label_0, GR_grp_18, LA_label_17, GR_ButtonBar;
        APTR    Space_0, Space_1, Space_2, Space_3;

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

        Object->STR_GR_Pager[0] = "Files";
        Object->STR_GR_Pager[1] = "Macros";
        Object->STR_GR_Pager[2] = "Miscellaneous";
        Object->STR_GR_Pager[3] = NULL;
        Object->CY_DefFileTypeContent[0] = "Oneline";
        Object->CY_DefFileTypeContent[1] = "Fortune";
        Object->CY_DefFileTypeContent[2] = "Spot";
        Object->CY_DefFileTypeContent[3] = "Cyclone";
        Object->CY_DefFileTypeContent[4] = NULL;

        LA_label_0 = Label("MOOD kludges");

        Object->STR_PA_MoodFile = String("", 80);

        Object->PA_MoodFile = PopButton(MUII_PopFile);

        Object->PA_MoodFile = PopaslObject,
                MUIA_HelpNode, "PA_MoodFile",
                MUIA_Popasl_Type, 0,
                MUIA_Popstring_String, Object->STR_PA_MoodFile,
                MUIA_Popstring_Button, Object->PA_MoodFile,
        End;

        Object->CH_Mood = CheckMark(FALSE);

        obj_aux1 = Label2("Active");

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

        LA_label_1 = Label("Headers");

        Object->STR_PA_HeaderFile = String("", 80);

        Object->PA_HeaderFile = PopButton(MUII_PopFile);

        Object->PA_HeaderFile = PopaslObject,
                MUIA_HelpNode, "PA_HeaderFile",
                MUIA_Popasl_Type, 0,
                MUIA_Popstring_String, Object->STR_PA_HeaderFile,
                MUIA_Popstring_Button, Object->PA_HeaderFile,
        End;

        Object->CH_Header = CheckMark(FALSE);

        obj_aux3 = Label2("Active");

        obj_aux2 = GroupObject,
                MUIA_Group_Columns, 2,
                Child, obj_aux3,
                Child, Object->CH_Header,
        End;

        LA_label_2 = Label("NP lines");

        Object->STR_PA_NPFile = String("", 80);

        Object->PA_NPFile = PopButton(MUII_PopFile);

        Object->PA_NPFile = PopaslObject,
                MUIA_HelpNode, "PA_NPFile",
                MUIA_Popasl_Type, 0,
                MUIA_Popstring_String, Object->STR_PA_NPFile,
                MUIA_Popstring_Button, Object->PA_NPFile,
        End;

        Object->CH_NP = CheckMark(FALSE);

        obj_aux5 = Label2("Active");

        obj_aux4 = GroupObject,
                MUIA_Group_Columns, 2,
                Child, obj_aux5,
                Child, Object->CH_NP,
        End;

        LA_label_3 = Label("Signatures");

        Object->STR_PA_SigFile = String("", 80);

        Object->PA_SigFile = PopButton(MUII_PopFile);

        Object->PA_SigFile = PopaslObject,
                MUIA_HelpNode, "PA_SigFile",
                MUIA_Popasl_Type, 0,
                MUIA_Popstring_String, Object->STR_PA_SigFile,
                MUIA_Popstring_Button, Object->PA_SigFile,
        End;

        Object->CH_Sig = CheckMark(FALSE);

        obj_aux7 = Label2("Active");

        obj_aux6 = GroupObject,
                MUIA_Group_Columns, 2,
                Child, obj_aux7,
                Child, Object->CH_Sig,
        End;

        LA_label_4 = Label("Taglines");

        Object->STR_PA_TagFile = String("", 80);

        Object->PA_TagFile = PopButton(MUII_PopFile);

        Object->PA_TagFile = PopaslObject,
                MUIA_HelpNode, "PA_TagFile",
                MUIA_Popasl_Type, 0,
                MUIA_Popstring_String, Object->STR_PA_TagFile,
                MUIA_Popstring_Button, Object->PA_TagFile,
        End;

        Object->CH_Tagline = CheckMark(FALSE);

        obj_aux9 = Label2("Active");

        obj_aux8 = GroupObject,
                MUIA_Group_Columns, 2,
                Child, obj_aux9,
                Child, Object->CH_Tagline,
        End;

        GR_Files = GroupObject,
                MUIA_HelpNode, "GR_Files",
                MUIA_Group_Columns, 3,
                Child, LA_label_0,
                Child, Object->PA_MoodFile,
                Child, obj_aux0,
                Child, LA_label_1,
                Child, Object->PA_HeaderFile,
                Child, obj_aux2,
                Child, LA_label_2,
                Child, Object->PA_NPFile,
                Child, obj_aux4,
                Child, LA_label_3,
                Child, Object->PA_SigFile,
                Child, obj_aux6,
                Child, LA_label_4,
                Child, Object->PA_TagFile,
                Child, obj_aux8,
        End;

        LA_label_5 = Label("Full name");

        Object->STR_FullName = StringObject,
                MUIA_Weight, 52,
                MUIA_Frame, MUIV_Frame_String,
                MUIA_HelpNode, "STR_FullName",
        End;

        LA_label_6 = Label("First name");

        Object->STR_FirstName = StringObject,
                MUIA_Frame, MUIV_Frame_String,
                MUIA_HelpNode, "STR_FirstName",
        End;

        LA_label_7 = Label("Last name");

        Object->STR_LastName = StringObject,
                MUIA_Frame, MUIV_Frame_String,
                MUIA_HelpNode, "STR_LastName",
        End;

        LA_label_8 = Label("Date");

        Object->STR_Date = StringObject,
                MUIA_Frame, MUIV_Frame_String,
                MUIA_HelpNode, "STR_Date",
        End;

        LA_label_9 = Label("Time");

        Object->STR_Time = StringObject,
                MUIA_Frame, MUIV_Frame_String,
                MUIA_HelpNode, "STR_Time",
        End;

        LA_label_16 = Label("Subject");

        Object->STR_Subject = StringObject,
                MUIA_Frame, MUIV_Frame_String,
                MUIA_HelpNode, "STR_Subject",
        End;

        GR_Macros = GroupObject,
                MUIA_HelpNode, "GR_Macros",
                MUIA_Group_Columns, 2,
                Child, LA_label_5,
                Child, Object->STR_FullName,
                Child, LA_label_6,
                Child, Object->STR_FirstName,
                Child, LA_label_7,
                Child, Object->STR_LastName,
                Child, LA_label_8,
                Child, Object->STR_Date,
                Child, LA_label_9,
                Child, Object->STR_Time,
                Child, LA_label_16,
                Child, Object->STR_Subject,
        End;

        LA_label_10 = Label("Editor command");

        Object->STR_PA_EditorCmd = String("", 80);

        Object->PA_EditorCmd = PopButton(MUII_PopFile);

        Object->PA_EditorCmd = PopaslObject,
                MUIA_HelpNode, "PA_EditorCmd",
                MUIA_Popasl_Type, 0,
                MUIA_Popstring_String, Object->STR_PA_EditorCmd,
                MUIA_Popstring_Button, Object->PA_EditorCmd,
        End;

        LA_label_11 = Label("Log file");

        Object->STR_LogFile = StringObject,
                MUIA_Frame, MUIV_Frame_String,
                MUIA_HelpNode, "STR_LogFile",
        End;

        GR_grp_15 = GroupObject,
                MUIA_HelpNode, "GR_grp_15",
                MUIA_Frame, MUIV_Frame_Group,
                MUIA_FrameTitle, "Files",
                MUIA_Group_Columns, 2,
                Child, LA_label_10,
                Child, Object->PA_EditorCmd,
                Child, LA_label_11,
                Child, Object->STR_LogFile,
        End;

        LA_label_13 = Label("GUI");

        Object->CH_GUI = CheckMark(FALSE);

        LA_label_14 = Label("Show info line");

        Object->CH_InfoLine = CheckMark(FALSE);

        LA_label_15 = Label("Show tagfile name");

        Object->CH_Tagfilename = CheckMark(FALSE);

        LA_label_18 = Label("Use index files");

        Object->CH_UseIndex = CheckMark(FALSE);

        LA_label_19 = Label("Buffer files");

        Object->CH_Buffer = CheckMark(FALSE);

        Space_4 = HVSpace;

        Space_5 = HVSpace;

        GR_grp_17 = GroupObject,
                MUIA_HelpNode, "GR_grp_17",
                MUIA_Group_Columns, 4,
                Child, LA_label_13,
                Child, Object->CH_GUI,
                Child, LA_label_14,
                Child, Object->CH_InfoLine,
                Child, LA_label_15,
                Child, Object->CH_Tagfilename,
                Child, LA_label_18,
                Child, Object->CH_UseIndex,
                Child, LA_label_19,
                Child, Object->CH_Buffer,
                Child, Space_4,
                Child, Space_5,
        End;

        REC_label_0 = RectangleObject,
                MUIA_Rectangle_HBar, TRUE,
                MUIA_FixHeight, 8,
        End;

        LA_label_17 = Label("Default file type");

        Object->CY_DefFileType = CycleObject,
                MUIA_HelpNode, "CY_DefFileType",
                MUIA_Cycle_Entries, Object->CY_DefFileTypeContent,
        End;

        GR_grp_18 = GroupObject,
                MUIA_HelpNode, "GR_grp_18",
                MUIA_Group_Columns, 2,
                Child, LA_label_17,
                Child, Object->CY_DefFileType,
        End;

        GR_grp_16 = GroupObject,
                MUIA_HelpNode, "GR_grp_16",
                MUIA_Weight, 50,
                MUIA_Frame, MUIV_Frame_Group,
                MUIA_FrameTitle, "Options",
                Child, GR_grp_17,
                Child, REC_label_0,
                Child, GR_grp_18,
        End;

        GR_Misc = GroupObject,
                MUIA_HelpNode, "GR_Misc",
                Child, GR_grp_15,
                Child, GR_grp_16,
        End;

        Object->GR_Pager = RegisterObject,
                MUIA_Register_Titles, Object->STR_GR_Pager,
                MUIA_HelpNode, "GR_Pager",
                Child, GR_Files,
                Child, GR_Macros,
                Child, GR_Misc,
        End;

        Space_0 = HVSpace;

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

        Space_1 = HVSpace;

        Object->BT_Use = SimpleButton("Use");

        Space_2 = HVSpace;

        Object->BT_Cancel = SimpleButton("Cancel");

        Space_3 = HVSpace;

        GR_ButtonBar = GroupObject,
                MUIA_HelpNode, "GR_ButtonBar",
                MUIA_Group_Horiz, TRUE,
                MUIA_Group_SameSize, TRUE,
                Child, Space_0,
                Child, Object->BT_Save,
                Child, Space_1,
                Child, Object->BT_Use,
                Child, Space_2,
                Child, Object->BT_Cancel,
                Child, Space_3,
        End;

        GROUP_ROOT_0 = GroupObject,
                MUIA_Background, MUII_RequesterBack,
                Child, Object->GR_Pager,
                Child, GR_ButtonBar,
        End;

        MNProjOpen = MenuitemObject,
                MUIA_Menuitem_Title, "Open...",
                MUIA_Menuitem_Shortcut, "O",
        End;

        MNProjSaveAs = MenuitemObject,
                MUIA_Menuitem_Title, "Save As...",
                MUIA_Menuitem_Shortcut, "S",
        End;

        MNProjBarLabel2 = MUI_MakeObject(MUIO_Menuitem, NM_BARLABEL, 0, 0, 0);

        MNProjQuit = MenuitemObject,
                MUIA_Menuitem_Title, "Quit",
                MUIA_Menuitem_Shortcut, "Q",
        End;

        MNProjProject = MenuitemObject,
                MUIA_Menuitem_Title, "Project",
                MUIA_Family_Child, MNProjOpen,
                MUIA_Family_Child, MNProjSaveAs,
                MUIA_Family_Child, MNProjBarLabel2,
                MUIA_Family_Child, MNProjQuit,
        End;

        MNEditResetToDefaults = MenuitemObject,
                MUIA_Menuitem_Title, "Reset To Defaults",
                MUIA_Menuitem_Shortcut, "D",
        End;

        MNProjLastSaved = MenuitemObject,
                MUIA_Menuitem_Title, "Last Saved",
                MUIA_Menuitem_Shortcut, "L",
        End;

        MNProjRestore = MenuitemObject,
                MUIA_Menuitem_Title, "Restore",
                MUIA_Menuitem_Shortcut, "R",
        End;

        MNProjEdit = MenuitemObject,
                MUIA_Menuitem_Title, "Edit",
                MUIA_Family_Child, MNEditResetToDefaults,
                MUIA_Family_Child, MNProjLastSaved,
                MUIA_Family_Child, MNProjRestore,
        End;

        MNProjCreateIcons = MenuitemObject,
                MUIA_Menuitem_Title, "Create Icons?",
                MUIA_Menuitem_Shortcut, "I",
                MUIA_Menuitem_Checkit, TRUE,
        End;

        MNProjSettings = MenuitemObject,
                MUIA_Menuitem_Title, "Settings",
                MUIA_Family_Child, MNProjCreateIcons,
        End;

        Object->MN_Set = MenustripObject,
                MUIA_Family_Child, MNProjProject,
                MUIA_Family_Child, MNProjEdit,
                MUIA_Family_Child, MNProjSettings,
        End;

        Object->WI_MainWindow = WindowObject,
                MUIA_Window_Title, "Prefs - Tag-o-Miga",
                MUIA_HelpNode, "WI_MainWindow",
                MUIA_Window_Menustrip, Object->MN_Set,
                MUIA_Window_ID, MAKE_ID('0', 'W', 'I', 'N'),
                WindowContents, GROUP_ROOT_0,
        End;

        Object->App = ApplicationObject,
                MUIA_Application_Author, "Richard Downer",
                MUIA_Application_Base, "TAGOMIGAPREFS",
                MUIA_Application_Title, "Tag-o-Miga Prefs",
                MUIA_Application_Version, "$VER: NONE XX.XX (XX.XX.XX)",
                MUIA_Application_Copyright, "1997 Richard Downer",
                MUIA_Application_Description, "The Preferences tool for the Amiga's premier tagtool",
                MUIA_Application_HelpFile, "TagoMigaPrefs.guide",
                SubWindow, Object->WI_MainWindow,
        End;


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

        DoMethod(Object->BT_Save,
                MUIM_Notify, MUIA_Pressed, FALSE,
                Object->WI_MainWindow,
                3,
                MUIM_Set, MUIA_Window_Open, FALSE
                );

        DoMethod(Object->BT_Save,
                MUIM_Notify, MUIA_Pressed, FALSE,
                Object->App,
                2,
                MUIM_Application_ReturnID, ID_SAVE
                );

        DoMethod(Object->BT_Use,
                MUIM_Notify, MUIA_Pressed, FALSE,
                Object->WI_MainWindow,
                3,
                MUIM_Set, MUIA_Window_Open, FALSE
                );

        DoMethod(Object->BT_Use,
                MUIM_Notify, MUIA_Pressed, FALSE,
                Object->App,
                2,
                MUIM_Application_ReturnID, ID_USE
                );

        DoMethod(Object->BT_Cancel,
                MUIM_Notify, MUIA_Pressed, FALSE,
                Object->WI_MainWindow,
                3,
                MUIM_Set, MUIA_Window_Open, FALSE
                );

        DoMethod(Object->BT_Cancel,
                MUIM_Notify, MUIA_Pressed, FALSE,
                Object->App,
                2,
                MUIM_Application_ReturnID, ID_CANCEL
                );

        DoMethod(Object->WI_MainWindow,
                MUIM_Window_SetCycleChain, Object->GR_Pager,
                Object->PA_MoodFile,
                Object->CH_Mood,
                Object->PA_HeaderFile,
                Object->CH_Header,
                Object->PA_NPFile,
                Object->CH_NP,
                Object->PA_SigFile,
                Object->CH_Sig,
                Object->PA_TagFile,
                Object->CH_Tagline,
                Object->STR_FullName,
                Object->STR_FirstName,
                Object->STR_LastName,
                Object->STR_Date,
                Object->STR_Time,
                Object->STR_Subject,
                Object->PA_EditorCmd,
                Object->STR_LogFile,
                Object->CH_GUI,
                Object->CH_InfoLine,
                Object->CH_Tagfilename,
                Object->CH_UseIndex,
                Object->CH_Buffer,
                Object->CY_DefFileType,
                Object->BT_Save,
                Object->BT_Use,
                Object->BT_Cancel,
                0
                );


        return(Object);
}

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