/*
\\		Support functions for MUIConstruct
*/

	#include <Global/Main_Global.h>
	
	UBYTE *EditWindow_Titles[] = { "Custom", "Global", NULL };

UBYTE *framecycleopts[] =
{
        "None"       , "Button",
        "ImageButton", "Text",
        "String"     , "ReadList",
        "InputList"  , "Prop",
        "Gauge"      , "Group",
        "PopUp"      , "Virtual",
        "Slider"     , NULL
};
UBYTE *backcycleopts[] =
{
        "Inherit"    , "Window",
        "Requester"  , "Button",
        "List"       , "Text",
        "Prop"       , "PopUp",
        "Selected"   , "ListCursor",
        "ListSelCur" , NULL
};
	
BOOL Init_EMC_Data( UBYTE *name,struct EMC_Data *Xfer, BOOL Gui,BOOL globset, BOOL needed )
{
         Object *okbutton,*cancelbutton;
         KPrintF("Objects.c : Init_EMC_Data( %s )\n",name);
 
        Xfer->dosbase      = DOSBase;
        Xfer->intbase      = IntuitionBase;
        Xfer->gfxbase      = GfxBase;
        Xfer->muibase      = MUIMasterBase;
        Xfer->MemoryPool   = Global->MemoryPool;
        Xfer->SelectClass = Global->SelectClass;
        Xfer->Image_Object = NULL;
        
        if(Gui)
        {
         Xfer->Config_App = App->App;
         Xfer->Config_Win = WindowObject,
                   MUIA_Window_Title, name,
                   MUIA_Window_CloseGadget, !needed,
                       WindowContents, GroupObject,
                             Child, RegisterGroup( EditWindow_Titles ),
                             Child, Xfer->Config_Group = GroupObject,
                                           End,
                             Child, Xfer->globalgroup = GroupObject,
                                           Child, VGroup,
                                            MUIA_ShowMe, globset,
                                            Child, HGroup,
                                            Child, VGroup,
                                            Child, Xfer->widthcheck  = KeyCheckMark( FALSE, 'w' ),
                                            Child, Xfer->heightcheck = KeyCheckMark( FALSE, 'h' ),
                                           End,

                                           Child, VGroup,
                                            Child, Xfer->width = StringObject,
                                                    MUIA_String_Format, MUIV_String_Format_Right,
                                                    MUIA_String_Integer, 8,
                                                    MUIA_String_Accept, "0123456789",
                                                    MUIA_Disabled, TRUE,
                                                    MUIA_Frame, MUIV_Frame_String,
                                                   End,
                                            Child, Xfer->height = StringObject,
                                                    MUIA_String_Format, MUIV_String_Format_Right,
                                                    MUIA_String_Integer, 8,
                                                    MUIA_String_Accept, "01234567890",
                                                    MUIA_Disabled, TRUE,
                                                    MUIA_Frame, MUIV_Frame_String,
                                                   End,
                                           End,
                                                                     
                                           Child, VGroup,
                                            MUIA_Weight, 0,
                                            Child, TextObject,
                                                    MUIA_Text_Contents, "\033rWidth",
                                                    MUIA_Text_HiChar, 'w',
                                                   End,
                                            Child, TextObject,
                                                    MUIA_Text_Contents, "\033rHeight",
                                                    MUIA_Text_HiChar, 'h',
                                                   End,
                                            End,
                                           End,

                                           Child, HGroup,
                                            Child, Xfer->weight = KeySlider( 0, 500, 100, 'g' ),
                                             Child, TextObject,
                                                     MUIA_Text_Contents, "\033rWeight",
                                                     MUIA_Text_HiChar, 'g',
                                                    End,
                                             Child, HVSpace,
                                                   End,
                                                                
                                             Child, HGroup,
                                              Child, VGroup,
                                               Child, Xfer->backcycle = KeyCycle( backcycleopts, 'b' ),
                                                Child, Xfer->framecycle = KeyCycle( framecycleopts, 'f' ),
                                                 Child, Xfer->frametitle = String( "", 80 ),
                                                  Child, Xfer->help = KeyString( "", 256, 's' ),
                                                  End,
                                                 Child, VGroup,
                                                          MUIA_Weight, 0,
                                                          Child, TextObject,
                                                                 MUIA_Text_Contents, "\033rBackground",
                                                                 MUIA_Text_HiChar, 'b',
                                                                 MUIA_Frame, MUIV_Frame_PopUp,
                                                                 MUIA_FramePhantomHoriz, TRUE,
                                                          End,
                                                          Child, TextObject,
                                                                 MUIA_Text_Contents, "\033rFrame",
                                                                 MUIA_Text_HiChar, 'f',
                                                                 MUIA_Frame, MUIV_Frame_PopUp,
                                                                 MUIA_FramePhantomHoriz, TRUE,
                                                          End,
                                                          Child, TextObject,
                                                                 MUIA_Text_Contents, "\033rFrameTitle",
                                                                 MUIA_FramePhantomHoriz, TRUE,
                                                                 MUIA_Frame, MUIV_Frame_String,
                                                          End,
                                                          Child, TextObject,
                                                                 MUIA_FramePhantomHoriz, TRUE,
                                                                 MUIA_Frame, MUIV_Frame_String,
                                                                 MUIA_Text_Contents, "\033rShortHelp",
                                                                 MUIA_Text_HiChar, 's',
                                                          End,
                                                 End,
                                                End,
                                               Child, HGroup,
                                                Child, Xfer->phantomhoriz = KeyCheckMark( FALSE, 'p' ),
                                                    Child, TextObject,
                                                            MUIA_Text_Contents, "\033lFrame Phantom Horiz",
                                                    End,
                                                    Child, HVSpace,
                                                    End,
                                                    Child, HGroup,
                                                     Child, Xfer->disabled = KeyCheckMark( FALSE, 'd' ),
                                                      Child, TextObject,
                                                              MUIA_Text_Contents, "\033lDisabled",
                                                        End,
                                                      Child, HVSpace,
                                                        End,
                                                      Child, HGroup,
                                                       Child, Xfer->input = KeyCheckMark( FALSE, 'i' ),
                                                        Child, TextObject,
                                                              MUIA_Text_Contents, "\033lInput Mode (RelVerify)",
                                                        End,
                                                       Child, HVSpace,
                                                        End,
                                                       Child, HGroup,
                                                        Child, Xfer->exid = KeyCheckMark( FALSE, 'x' ),
                                                          Child, TextObject,
                                                                  MUIA_Text_Contents, "\033lExport ID",
                                                           End,
                                                          Child, HVSpace,
                                                           End,
                                                          Child, HGroup,
                                                           Child, Xfer->ctrlchar = KeyString( "", 2, 't' ),
                                                            Child, TextObject,
                                                                    MUIA_Weight, 0,
                                                                    MUIA_Text_Contents, "\033rControl char",
                                                                    MUIA_Text_HiChar, 't',
                                                             End,
                                                            End,
                                                          
                                                         End,
                                                        End,
                                                         
                                                          End,
                                                       
                                                       Child, VGroup,
                                                            Child, RectangleObject,
                                                                  MUIA_Rectangle_HBar, TRUE,
                                                                  MUIA_FixHeight, 8,
                                                            End,
                                                            Child, HGroup,
                                                              Child, Xfer->name = KeyString( "", 33, 'm' ),
                                                                Child, TextObject,
                                                                     MUIA_Weight, 0,
                                                                     MUIA_Text_Contents, "\033rObject Name",
                                                                     MUIA_Text_HiChar, 'm',
                                                                  End,
                                                                End,
                                                            End,
                                                            
                                                            Child,HGroup,
                                                              MUIA_Group_SameSize, TRUE,
                                                              Child, okbutton = KeyButton( "OK", 'o' ),
                                                              Child, cancelbutton = KeyButton( "CANCEL", 'c' ),
                                                            End,
                                                            
                                                   End,
                                                
                                        End;
        if( !Xfer->Config_Win ) return( FALSE );
       
        DoMethod( App->App, OM_ADDMEMBER, Xfer->Config_Win );
        set( Xfer->frametitle, MUIA_Disabled, TRUE );
        set( Xfer->ctrlchar, MUIA_Disabled, TRUE );
        
        DoMethod( okbutton, MUIM_Notify, MUIA_Selected, FALSE,
                     Xfer->Config_App, 2, MUIM_Application_ReturnID, OBJ_OKBUTTON); //Return ID To Something
                     
        if( needed ) set( cancelbutton, MUIA_Disabled, TRUE );
        else DoMethod( cancelbutton, MUIM_Notify, MUIA_Selected, FALSE,
                                        Xfer->Config_App, 2, MUIM_Application_ReturnID, OBJ_CANCELBUTTON );
                                        
        DoMethod( Xfer->Config_Win, MUIM_Notify, MUIA_Window_CloseRequest, TRUE,
                                        Xfer->Config_App, 2, MUIM_Application_ReturnID, OBJ_CANCELBUTTON);
                                        
        DoMethod( Xfer->widthcheck, MUIM_Notify, MUIA_Selected, MUIV_EveryTime,
                                        Xfer->width, 3, MUIM_Set, MUIA_Disabled, MUIV_NotTriggerValue );
        DoMethod( Xfer->heightcheck, MUIM_Notify, MUIA_Selected, MUIV_EveryTime,
                                        Xfer->height, 3, MUIM_Set, MUIA_Disabled, MUIV_NotTriggerValue );
        DoMethod( Xfer->framecycle, MUIM_Notify, MUIA_Cycle_Active, MUIV_EveryTime,
                                        Xfer->frametitle, 3, MUIM_Set, MUIA_Disabled, FALSE );
        DoMethod( Xfer->framecycle, MUIM_Notify, MUIA_Cycle_Active, MUIV_Frame_None,
                                        Xfer->frametitle, 3, MUIM_Set, MUIA_Disabled, TRUE );
        DoMethod( Xfer->input, MUIM_Notify, MUIA_Selected, MUIV_EveryTime,
                                        Xfer->ctrlchar, 3, MUIM_Set, MUIA_Disabled, MUIV_NotTriggerValue );

        return(TRUE);

        }
   return(TRUE);
}

void DisposeMUIEditWindow( struct EMC_Data *Xfer )
{
        KPrintF("Objects.c : DisposeMUIEditWindow()\n");
        if( Xfer->Config_Win )
        {
                set( Xfer->Config_Win, MUIA_Window_Open, FALSE );
                
                DoMethod( App->App, OM_REMMEMBER, Xfer->Config_Win );
                MUI_DisposeObject( Xfer->Config_Win );
        }
}

struct Module *FindObjectName( UBYTE *name )
{
        //      Find object by name

        struct Module *testobj;
        KPrintF("Objects.c : FindObjectName( %s )\n",name);
        for( testobj = FirstNode( &Global->ObjectList ); testobj; (testobj = ParseObjectList( testobj )) )
        {
                if( !strcmp( testobj->Name, name ) ) return( testobj );
        }
        return( NULL );
}

void Add_Object(char *New_ObjectName,struct Module *Parent)
{
        struct Module *Window_Object;
        struct Module *Group_Object;
        struct Class *Super_Class;
        struct Class *Upper;
	ULONG NodesNumber=0;
	KPrintF("Objects.c : Add_Object( %s , ? )\n",New_ObjectName);
        if(Super_Class=FindClass( New_ObjectName ))
        {
          if(!Parent && strcmp("Window",New_ObjectName))
            {
             Display("First Object Must Be A Window.");
             return(0);
            }     
          if(Parent)
            {  
              if((Parent->Class->Flags & CLASS_NOCHILD))
                  {
                   Display("Sorry This Object Doesn't Support Children!");
                   return(0);
                  }
              
              if((Parent->Class->Flags & CLASS_ONECHILD))
                  {
                   NodesNumber = CountNodes(&Parent->Children);
                   if(NodesNumber>=1)
                      {
                       Display("Sorry This Object Only Supports One Child!");
                       return(0);
                      }
                   }    
            }  
            if(Window_Object = NewObject_FromClass( Super_Class, FALSE ) )
                {
                 if(!Parent)
                   {            
                    Window_Object->TreeDepth=0;             
                    
                    Window_Object->MUI_Object = Make_MUIObject(Window_Object);
                    if(!Window_Object->MUI_Object)
                     Display("Failed To Create Window Object!");
                   }
                 else
                 {
                   Window_Object->Parent=Parent;
                   Window_Object->MUI_Object = Make_MUIObject(Window_Object);                  
                   if(!Window_Object->MUI_Object)
                      Display("Failed To Create MUI Object!");
                   DoMethod(Window_Object->Parent->MUI_Object,MUIM_Group_InitChange);
                   DoMethod(Window_Object->Parent->MUI_Object,OM_ADDMEMBER,Window_Object->MUI_Object);
                   DoMethod(Window_Object->Parent->MUI_Object,MUIM_Group_ExitChange);  
                   Window_Object->TreeDepth=Parent->TreeDepth+1;
                   AddTail( (struct List *) &Parent->Children, (struct Node *) Window_Object);
                 }
                 AddTail( (struct List *) &Global->ObjectList, (struct Node *) Window_Object ); 
                 
                 DoMethod(Global->Main_Lister,MUIM_List_InsertSingle,Window_Object,MUIV_List_Insert_Bottom);                
                 
                 Describe( Window_Object );                                
                }
        }
        else 
        {
           Display( "Window class not available!" );
                
        }
}


