/*
\\              MUIConstruct.c
*/

        #include <Global/Main_Global.h>



struct ProgramData    *Global;
struct Library        *MUIMasterBase;
struct ObjApp         *App;


ULONG  defaultobjnum;

struct Module *selectobj, *newselectobj;
BOOL   usereq;



void main( void )
{
        ULONG signals, id;

        Global = malloc(sizeof(struct ProgramData));
	Global->Tester=FALSE;
        if( init() )
        {
        	Start_GUI();
                set( Global->ImageWindow,MUIA_Window_Open,TRUE);
                set( Global->TestWindow,MUIA_Window_Open,TRUE);
                set( App->Main_Toolbox_Window, MUIA_Window_Open, TRUE );
                
                
                 while(DoMethod(App->App,MUIM_Application_NewInput,&signals)!=MUIV_Application_ReturnID_Quit)
                      {
                        if(signals)
                          {
                           signals = Wait(signals | SIGBREAKF_CTRL_C);
                           if (signals & SIGBREAKF_CTRL_C) break;
                          }
                      }
                set( Global->ImageWindow,MUIA_Window_Open,FALSE);
                set( Global->TestWindow,MUIA_Window_Open,FALSE);                        
                set( App->Main_Toolbox_Window, MUIA_Window_Open, FALSE );    
                
        }
        
        Cleanup();                
}

BOOL init( void )
{

        NewList( (struct List *) &Global->ClassList );  // Correct This Soon
        NewList( (struct List *) &Global->ObjectList ); // Correct This Soon

        if( !(Global->MemoryPool = CreatePool( MEMF_CLEAR|MEMF_PUBLIC, 32768, 16384 ) ) )
                return( FALSE );
        
                
        if( !(MUIMasterBase = OpenLibrary( MUIMASTER_NAME, MUIMASTER_VMIN ) ) )
           {
            printf( "Couldn't Open %s, Version : %d\n",MUIMASTER_NAME,MUIMASTER_VMIN );
            return( FALSE );
           }    

        if( !(App = CreateApp() ) )
        {
            printf(  "Unable to create GUI!" );
            return( FALSE );
        }
        
                    

 Global->SelectClass  = MUI_CreateCustomClass(NULL,MUIC_Group ,NULL,0,_Select_Dispatcher);
 Global->ImgListClass = MUI_CreateCustomClass(NULL,MUIC_List ,NULL, 0,_ImageList_Dispatcher );
 Global->NewObjectClass = MUI_CreateCustomClass(NULL,MUIC_Window,NULL,0,_NewObject_Dispatcher );
 Global->HierarchyClass = MUI_CreateCustomClass(NULL,MUIC_List,NULL, 0,_Hierarchy_Dispatcher );
 
        if( !(Global->ImgListClass && Global->NewObjectClass && Global->HierarchyClass &&Global->SelectClass) )
        {
                printf( "Internal Custom Classes Not Starting!" );
                return( FALSE );
        }

        if( !Scan_Classes() )            // Sort This Out
                return( FALSE );

        Init_Main_Lister(); 
        SetProgramName( PROGRAMNAME );  // SORT THIS OUT

        return( TRUE );
}

void Cleanup(void )
{ 
        if( App )       
           DisposeApp( App );
        Clear_Modules();
        Clear_Classes();
       
        if( Global->SelectClass )
           MUI_DeleteCustomClass( Global->SelectClass );
        if( Global->LocateClass )
           MUI_DeleteCustomClass( Global->LocateClass );
        if( Global->ImgListClass )
           MUI_DeleteCustomClass( Global->ImgListClass );
        if( Global->NewObjectClass)
           MUI_DeleteCustomClass( Global->NewObjectClass);
        if( Global->HierarchyClass)
           MUI_DeleteCustomClass( Global->HierarchyClass);
        if( MUIMasterBase)
           CloseLibrary(MUIMasterBase);
           
        if( Global->MemoryPool )        
           DeletePool( Global->MemoryPool );
           
        free(Global);
}
