/*
 *=======================================================================================
 * Name        :edit_cla.cpp
 *
 * Author      : Vincent Lhullier            Date :30/06/97
 *
 * Description : Editor classe object
 *=======================================================================================
 * Modification -> Author :                  Date :
 * Description :
 *=======================================================================================
 */


/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
#include "stdafx.h"
#include "acp_base.h"
#include "ITF.h"
#include "DPT.h"
#include "Edit_Cla.hpp"
#include "OPD.h"
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/


/*
 ----------------------------------------------------------------------------------------
  Description   : constructor
  p_oDLL              -> owner dll
  p_oMainWorld        -> main world that contain EditorPO object
  hObj                -> handle on engine structure
  csName              -> name of object
  csFileName          -> file name were object is stored
  csSectionName       -> section name for object
 ----------------------------------------------------------------------------------------
 */
EditorPOClass::EditorPOClass
			(
				char			*_szName,
				CPA_EditorBase	*_pEditor, 
				CPA_BaseObject	*_pOwner /*= NULL*/, 
				BOOL			_bAvailable /*= FALSE*/
			)
		:CPA_BaseObject
			(
				_pEditor, 
				C_szPhysicalObjectClassTypeName, 
				_pOwner, 
				_bAvailable 
			)
{
	// name
	fn_eRename( _szName );
};

/*
 ----------------------------------------------------------------------------------------
  Description   : Destructor
 ----------------------------------------------------------------------------------------
 */
EditorPOClass::~EditorPOClass()
{
}

/*
 ----------------------------------------------------------------------------------------
  Description   : callback to analyse PO section 
 ----------------------------------------------------------------------------------------
 */
SCR_tde_Anl_ReturnValue fn_eCallbackForPhySection(SCR_tdst_File_Description *p_fFile, char *szAction, char *szParams[], SCR_tde_Anl_Action cType)
{
	EditorPOClass *p_oClass;
	
	SCR_M_RdL0_GetContextLong( 0, 0, EditorPOClass *, p_oClass );
	switch (cType)
    {
		case SCR_EA_Anl_BeginSection:
			{
				CPA_ObjectDLLBase				*p_oPODll;
				char							szFileName[ 255 ];

				p_oPODll = p_oClass->GetMainWorld()->GetObjectDLLWithName( C_szDLLPhysicalObjectName );
				strcpy( szFileName, SCR_M_RdL0_GetCompleteSectionNameR(0) );
				p_oPODll->OnQueryAction( (CPA_EditorBase *) p_oClass, OPD_ActionCreateEmptyPO, (LPARAM) szFileName );
			}
			return SCR_ERV_Anl_TerminateCurrentSection;
			
	}
	return  SCR_ERV_Anl_NormalReturn;
}

/*
 ----------------------------------------------------------------------------------------
  Description   : load editor po contained in class
 ----------------------------------------------------------------------------------------
 */
BOOL EditorPOClass::fn_bLoadEditorPO( void )
{
	SCR_tdst_Anl_Callback	*p_stCallBack;
	SCR_tdpfn_Anl_Callback	pfn_eOldCallBack;
	char					szFileName[ _MAX_PATH ];
	BOOL					bIsLoadingWorld;
	
	p_stCallBack = SCR_fnp_st_RdL0_GetRegisterCallback( C_Section_POGeneral, SCR_CRC_c_RdL0_ForSection );
	pfn_eOldCallBack = p_stCallBack->pfn_eCallback;

	p_stCallBack->pfn_eCallback = fn_eCallbackForPhySection;

 	bIsLoadingWorld = GetEditor()->GetInterface()->fn_bIsLoadingWorld();
	GetEditor()->GetInterface()->SetLoadingWorld( TRUE );

	SCR_M_RdL0_SetContextLong( 2, 0, (long ) this );
	sprintf( szFileName, "%s\\%s\\%s.phy", fn_szGetGraphicsClassesDataPath(), GetName(), GetName() );
	SCR_fnp_st_RdL0_AnalyseSection( szFileName, SCR_CDF_uw_Anl_Normal);

	GetEditor()->GetInterface()->SetLoadingWorld(bIsLoadingWorld);

	SCR_fn_v_RdL0_DeleteOpenSection( szFileName, SCR_CDR_c_RdL0_Contains );

	p_stCallBack->pfn_eCallback = pfn_eOldCallBack;
	SetAvailable( TRUE );
	return TRUE;
}

//////////////////////////////////////////////////////////////////////////////////////////////////////
// Method : mfn_vLoadITEditorPO 
// Date   : 98-04
//////////////////////////////////////////////////////////////////////////////////////////////////////
// Description :
// Author      : Stegaru Cristian - CPA2
//////////////////////////////////////////////////////////////////////////////////////////////////////
// Modification :
// Date         :
// By           :
//////////////////////////////////////////////////////////////////////////////////////////////////////
void EditorPOClass::mfn_vLoadITEditorPO (CString csITName)
{
	SCR_tdst_Anl_Callback	*p_stCallBack;
	SCR_tdpfn_Anl_Callback	pfn_eOldCallBack;
	char					szSectionName[2 * _MAX_PATH ];
	BOOL					bIsLoadingWorld;
	
	p_stCallBack = SCR_fnp_st_RdL0_GetRegisterCallback( C_Section_POGeneral, SCR_CRC_c_RdL0_ForSection );
	pfn_eOldCallBack = p_stCallBack->pfn_eCallback;

	p_stCallBack->pfn_eCallback = fn_eCallbackForPhySection;

 	bIsLoadingWorld = GetEditor()->GetInterface()->fn_bIsLoadingWorld();
	GetEditor()->GetInterface()->SetLoadingWorld( TRUE );

	SCR_M_RdL0_SetContextLong( 1, 0, (long ) this );
	sprintf (szSectionName, "%s\\%s\\%s.phy^PHY:%s", fn_szGetLevelsDataPath (), fn_p_szGetLevelName () , fn_p_szGetLevelName (), csITName);
	SCR_fnp_st_RdL0_AnalyseSection (szSectionName, SCR_CDF_uw_Anl_Normal);

	GetEditor()->GetInterface()->SetLoadingWorld(bIsLoadingWorld);

	SCR_fn_v_RdL0_DeleteOpenSection (szSectionName, SCR_CDR_c_RdL0_Contains);

	p_stCallBack->pfn_eCallback = pfn_eOldCallBack;
	SetAvailable( TRUE );
}

