/******************************************************************************
    Here is an example of an "environnement file". All you have to do, si to
fill it with :
    - some constant declarations and array initialisations for localisation
    - use MUIBuilder+GenCodeE to generate the create_app() function
    - add the code for your application !!!
******************************************************************************/

OPT OSVERSION=37

    /* Module definitions */
MODULE 'muimaster', 'libraries/mui'
MODULE 'utility/tagitem', 'utility/hooks'
MODULE 'intuition/classes', 'intuition/classusr'
MODULE 'locale', 'libraries/locale'

    /* Error handling */
ENUM NO_LIBRARY, MUI_APPLICATION_FAILURE
RAISE   NO_LIBRARY              IF OpenLibrary()=NIL,
        MUI_APPLICATION_FAILURE IF Mui_NewObjectA()=NIL

    /* Object definitions */
OBJECT fc_type
    id  :LONG
    str :LONG
ENDOBJECT

    /* Constant definitions */
CONST MUI_TRUE = 1
        /******************************************
            Add here some constant declarations
            for localisation.
        ******************************************/
CONST MSG_AppDescription = 0
CONST MSG_WI_smallexample = 1
CONST MSG_GR_lists = 2
CONST MSG_BT_ok = 3
CONST MSG_BT_cancel = 4

    /* Global variables */
DEF catalog_Small:PTR TO catalog
DEF array_Small[5]:ARRAY OF fc_type        /* Update array size */
/*MUIB*/ DEF app, wi_smallexample, grOUP_ROOT_0, gr_lists, lv_label_0
/*MUIB*/ DEF lv_label_1, gr_grp_1, bt_ok, bt_cancel


    /* Main procedure */
PROC main() HANDLE
    DEF signal, result_DoMethod, running = TRUE

    localebase := OpenLibrary('locale.library', 0)
    muimasterbase := OpenLibrary('muimaster.library', 0)
    open_Small_catalog(NIL, NIL)
    create_app()

    /* Notify : close gadget => end of application */
    doMethod( wi_smallexample, [ MUIM_Notify, MUIA_Window_CloseRequest, MUI_TRUE, app, 2, MUIM_Application_ReturnID, MUIV_Application_ReturnID_Quit ] )

    /* Open the window */
    set( wi_smallexample, MUIA_Window_Open, MUI_TRUE )

    WHILE running
        result_DoMethod := doMethod( app, [ MUIM_Application_Input, {signal} ] )
        SELECT result_DoMethod
            CASE MUIV_Application_ReturnID_Quit
                running := FALSE
        ENDSELECT
        IF (running AND signal) THEN Wait( signal )
    ENDWHILE

    Mui_DisposeObject( app )
    close_Small_catalog()
    CloseLibrary( muimasterbase )
    CloseLibrary( localebase )

EXCEPT
    SELECT exception
        CASE NO_LIBRARY
        CASE MUI_APPLICATION_FAILURE
    ENDSELECT
ENDPROC


    /* Procedure generated by GenCodeE which creates your application */
PROC create_app()

    app := ApplicationObject,
        MUIA_Application_Author, 'Eric Totel',
        MUIA_Application_Base, 'SMALL',
        MUIA_Application_Title, 'Small_Example',
        MUIA_Application_Version, '$VER : Small 1.0',
        MUIA_Application_Copyright, '(c) 1993 Eric Totel',
        MUIA_Application_Description, get_Small_string( MSG_AppDescription ),
        MUIA_HelpFile, 'small.guide',
        SubWindow, wi_smallexample := WindowObject,
            MUIA_Window_Title, get_Small_string( MSG_WI_smallexample ),
            MUIA_HelpNode, 'WI_smallexample',
            MUIA_Window_ID, MAKE_ID( "0", "W", "I", "N" ),
            WindowContents, grOUP_ROOT_0 := GroupObject,
                Child, gr_lists := GroupObject,
                    GroupFrameT( get_Small_string( MSG_GR_lists ) ),
                    MUIA_HelpNode, 'GR_lists',
                    MUIA_Group_Horiz, MUI_TRUE,
                    Child, lv_label_0 := ListviewObject,
                        MUIA_HelpNode, 'LV_label_0',
                        MUIA_Listview_List, DirlistObject,
                            InputListFrame,
                            MUIA_Dirlist_Directory, 'progdir:',
                            MUIA_Dirlist_DrawersOnly, FALSE,
                            MUIA_Dirlist_FilesOnly, FALSE,
                            MUIA_Dirlist_FilterDrawers, FALSE,
                            MUIA_Dirlist_MultiSelDirs, FALSE,
                            MUIA_Dirlist_RejectIcons, FALSE,
                            MUIA_Dirlist_SortDirs, MUIV_Dirlist_SortDirs_First,
                            MUIA_Dirlist_SortHighLow, FALSE,
                            MUIA_Dirlist_SortType, 0,
                        End,
                    End,
                    Child, lv_label_1 := ListviewObject,
                        MUIA_HelpNode, 'LV_label_1',
                        MUIA_Listview_MultiSelect, MUIV_Listview_MultiSelect_Default,
                        MUIA_Listview_List, VolumelistObject,
                            InputListFrame,
                        End,
                    End,
                End,
                Child, gr_grp_1 := GroupObject,
                    MUIA_HelpNode, 'GR_grp_1',
                    MUIA_Group_Horiz, MUI_TRUE,
                    MUIA_Group_SameWidth, MUI_TRUE,
                    Child, bt_ok := et_key_button( get_Small_string( MSG_BT_ok ) ),
                    Child, bt_cancel := et_key_button( get_Small_string( MSG_BT_cancel ) ),
                End,
            End,
        End,
    End
ENDPROC


    /* DoMethod() function */
PROC doMethod( obj:PTR TO object, msg:PTR TO msg )

    DEF h:PTR TO hook, o:PTR TO object, dispatcher

    IF obj
        o := obj-SIZEOF object     /* instance data is to negative offset */
        h := o.class
        dispatcher := h.entry      /* get dispatcher from hook in iclass */
        MOVEA.L h,A0
        MOVEA.L msg,A1
        MOVEA.L obj,A2           /* probably should use CallHookPkt, but the */
        MOVEA.L dispatcher,A3    /*   original code (DoMethodA()) doesn't. */
        JSR (A3)                 /* call classDispatcher() */
        MOVE.L D0,o
        RETURN o
    ENDIF

ENDPROC NIL


    /* Extended KeyButton for localized buttons */
PROC et_key_button( text:PTR TO CHAR ) RETURN KeyButton( (text+3), text[1] )


    /* An easy OpenCatalog() function */
PROC open_Small_catalog(loc:PTR TO locale, language:PTR TO CHAR)
    DEF tag, tagarg, dummy_var = 0

        /******************************************
            Add here some array initialisations
            for localisation.
        ******************************************/
    array_Small[dummy_var].id := MSG_AppDescription; array_Small[dummy_var++].str := 'Here is a small example of MUI-Builder'
    array_Small[dummy_var].id := MSG_WI_smallexample; array_Small[dummy_var++].str := 'Small example'
    array_Small[dummy_var].id := MSG_GR_lists; array_Small[dummy_var++].str := 'two lists'
    array_Small[dummy_var].id := MSG_BT_ok; array_Small[dummy_var++].str := '_o OK'
    array_Small[dummy_var].id := MSG_BT_cancel; array_Small[dummy_var++].str := '_c Cancel'

    IF (localebase AND (catalog_Small = NIL))
        IF language
            tag := OC_LANGUAGE
            tagarg := language
        ELSE
            tag:= TAG_IGNORE
        ENDIF

        catalog_Small := OpenCatalogA(loc, 'Small.catalog',
                                            [   OC_BUILTINLANGUAGE, 'english',  /* Update built-in language */
                                                tag, tagarg,
                                                OC_VERSION, 0,                  /* Update catalog version number */
                                                TAG_DONE    ])
    ENDIF
ENDPROC
    
                                
    /* An easy CloseCatalog() function  */
PROC close_Small_catalog()

    IF localebase THEN CloseCatalog( catalog_Small )
    catalog_Small := NIL
ENDPROC


    /* A GetString() function for localized strings */
PROC get_Small_string( strnum )
    DEF defaultstr:PTR TO CHAR, i = 0

        /* Fill the 2 (i < ?) tests by the array size */
    WHILE ((i < 5) AND (array_Small[i].id <> strnum)) DO INC i
    defaultstr := IF (i < 5) THEN array_Small[i].str ELSE NIL

ENDPROC IF catalog_Small THEN GetCatalogStr( catalog_Small, strnum, defaultstr ) ELSE defaultstr

