reman3/Rayman_X/cpa/tempgrp/OAC/Src/EdActors/EDACActr.cpp

436 lines
13 KiB
C++

// Implementation for the class of Editor Actors
//////////////////////////////////////////////////
#include "StdAfx.h"
#include "EDACActr.hpp"
#include "EDACInst.hpp"
#include "EDACModl.hpp"
#include "EDACDgQu.hpp"
#include "EDACStrg.hpp"
#include "_Ainterf.hpp"
#include "Defines.hpp"
//-----------------IR-------------------------
#include "EDACQuer.hpp"
//--------------------------------------------
//External Modules
#include "ErO.h"
//End of External Modules
#undef CPA_WANTS_IMPORT
#undef CPA_EXPORT
#define CPA_WANTS_EXPORT
#include "_Actors.hpp"
#undef CPA_WANTS_EXPORT
#define CPA_WANTS_IMPORT
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
//****************************************************************
EdActors_EditorActor::EdActors_EditorActor(tdeCarActorType tdeType)
{
//For Objetc Tables
m_pclEnumDescriptorForObjectsTables = new CTL_Editor_EnumDescriptor(g_c_csObjectTablesEnumDescriptorName, 4/*long*/);
m_tdeType = tdeType;
m_ptdstActor = NULL;
m_pclActor = NULL;
m_fn_vConstructListOfMS();
//Sets the parent actor for all the MS
EdActors_ActorMiniStructureList *pclCurrentAMSList;
POSITION AMSPos = m_clListOfAMSLists.GetHeadPosition();
POSITION pos;
while ( AMSPos != NULL )
{
pclCurrentAMSList = m_clListOfAMSLists.GetNext(AMSPos);
pos = pclCurrentAMSList->GetHeadPosition();
while ( pos != NULL )
pclCurrentAMSList->GetNext(pos)->m_pclParentActor = this;
}
m_ucCurrentMSListIndex = 0;
//Calls "m_fn_vGetMotorData()" for each data in the Data List
//-----------------IR-------------------------
m_pclListOfDesignerVariableType = new CTL_Editor_DataList();
m_pclListOfDesignerVariables=EDAC_fn_pclGetNewDesignerVariableList();
//--------------------------------------------
}
//****************************************************************
EdActors_EditorActor::~EdActors_EditorActor()
{
//-----------------IR-------------------------
delete m_pclListOfDesignerVariableType;
EDAC_fn_vDeleteDesignerVariableList(m_pclListOfDesignerVariables);
//--------------------------------------------
if ( m_pclEnumDescriptorForObjectsTables != NULL )
delete m_pclEnumDescriptorForObjectsTables;
}
//****************************************************************
CString EdActors_EditorActor::m_fn_csGetActorName()
{
ERROR_ASSERT( m_pclActor != NULL );
return m_pclActor->GetName();
}
//****************************************************************
CAR_EDIT_TDSTACTOR *EdActors_EditorActor::m_fn_ptdstGetMotorActor()
{
return m_ptdstActor;
}
//****************************************************************
void EdActors_EditorActor::m_fn_vSetMotorActor(CAR_EDIT_TDSTACTOR *ptdstActor)
{
m_ptdstActor = ptdstActor;
}
//**********************************************************************************************
void EdActors_EditorActor::m_fn_vCreateActorMSDataList()
{
EdActors_ActorMiniStructure *pclActorMS;
EdActors_ActorMiniStructureList *pclCurrentAMSList;
POSITION AMSPos = m_clListOfAMSLists.GetHeadPosition();
POSITION pos;
while ( AMSPos != NULL )
{
pclCurrentAMSList = m_clListOfAMSLists.GetNext(AMSPos);
pos = pclCurrentAMSList->GetHeadPosition();
while ( pos != NULL )
{
pclActorMS = pclCurrentAMSList->GetNext(pos);
if ( m_fn_ptdstGetMotorActor() != NULL )
{
ERROR_ASSERT( pclActorMS->m_td_pfn_vFillFunction != NULL );
pclActorMS->m_td_pfn_vFillFunction(this, pclActorMS);
}
}
}
}
//****************************************************************
void EdActors_EditorActor::m_fn_vSetCurrentMSList(EdActors_ActorMiniStructureList *pclActorNewCurrentMSList)
{
m_pclActorCurrentMSList = pclActorNewCurrentMSList;
}
//****************************************************************
// return value :
// -1 if not found
// or the list Index in whicih Data is found
char EdActors_EditorActor::m_fn_cDoesActorOwnData(CTL_Editor_Data *pclDataToSearch)
{
EdActors_ActorMiniStructure *pclUnusedAMS;
return m_fn_cDoesActorOwnData(pclDataToSearch, pclUnusedAMS);
}
//****************************************************************
// return value :
// -1 if not found
// or the list Index in which Data is found (0,1,...)
char EdActors_EditorActor::m_fn_cDoesActorOwnData(CTL_Editor_Data *pclDataToSearch,
EdActors_ActorMiniStructure *&pclAMS)
{
char cIndexToReturn = -1;
BOOL bStop = FALSE;
EdActors_ActorMiniStructureList *pclCurrentAMSList;
POSITION AMSPos = m_clListOfAMSLists.GetHeadPosition();
while ( (AMSPos != NULL) && (!bStop) )
{
pclCurrentAMSList = m_clListOfAMSLists.GetNext(AMSPos);
if ( m_fn_bLookForAData(pclCurrentAMSList, pclDataToSearch, pclAMS) )
bStop = TRUE;
cIndexToReturn ++;
}
return cIndexToReturn;
}
//****************************************************************
BOOL EdActors_EditorActor::m_fn_bLookForAData(EdActors_ActorMiniStructureList *pclActorMSList,
CTL_Editor_Data *pclDataToSearch,
EdActors_ActorMiniStructure *&pclAMS)
{
BOOL bFound = FALSE;
EdActors_ActorMiniStructure *pclCurrentAMS;
POSITION MSpos = pclActorMSList->GetHeadPosition();
POSITION DataPos;
while ( (MSpos != NULL) && !bFound )
{
pclCurrentAMS = pclActorMSList->GetNext(MSpos);
DataPos = pclCurrentAMS->m_pclDataList->GetHeadPosition();
while ( (DataPos != NULL ) && (!bFound) )
bFound = ( pclCurrentAMS->m_pclDataList->GetNext(DataPos) == pclDataToSearch);
if ( bFound )
pclAMS = pclCurrentAMS;
}
return bFound;
}
//****************************************************************
unsigned char EdActors_EditorActor::m_fn_ucGetCurrentMSListIndex()
{
return m_ucCurrentMSListIndex;
}
//****************************************************************
void EdActors_EditorActor::m_fn_vSetCurrentMSListIndex(unsigned char cNewIndex)
{
ERROR_ASSERT( (cNewIndex >= 0) && (cNewIndex < m_clListOfAMSLists.GetCount()) );
m_ucCurrentMSListIndex = cNewIndex;
m_fn_vSetCurrentMSList(m_clListOfAMSLists.m_fn_pclGetListFromIndex(cNewIndex));
}
//****************************************************************
void EdActors_EditorActor::m_fn_vDeleteAllMS()
{
EdActors_ActorMiniStructure *pclActorMS;
EdActors_ActorMiniStructureList *pclCurrentAMSList;
POSITION AMSPos = m_clListOfAMSLists.GetHeadPosition();
POSITION pos;
while ( AMSPos != NULL )
{
pclCurrentAMSList = m_clListOfAMSLists.GetNext(AMSPos);
pos = pclCurrentAMSList->GetHeadPosition();
while ( pos != NULL )
{
pclActorMS = pclCurrentAMSList->GetNext(pos);
if ( pclActorMS->m_fn_bIsAllocated() )
pclActorMS->m_fn_bUnallocate();
}
}
}
//****************************************************************
//Allocates MS if the correponding MS in the Model is allocated
void EdActors_EditorActor::m_fn_vAllocateMSAsInModel(EdActors_EditorActorModel *pclSourceModel)
{
ERROR_ASSERT( pclSourceModel != NULL );
EdActors_ActorMiniStructureList *pclInstanceAMSList;
EdActors_ActorMiniStructureList *pclModelAMSList;
POSITION InstAMSPos = m_clListOfAMSLists.GetHeadPosition();
POSITION ModelAMSPos = pclSourceModel->m_clListOfAMSLists.GetHeadPosition();
EdActors_ActorMiniStructure *pclInstanceAMS;
EdActors_ActorMiniStructure *pclModelAMS;
POSITION InstPos;
POSITION ModelPos;
while ( InstAMSPos != NULL )
{
ERROR_ASSERT( ModelAMSPos != NULL );
pclInstanceAMSList = m_clListOfAMSLists.GetNext(InstAMSPos);
pclModelAMSList = pclSourceModel->m_clListOfAMSLists.GetNext(ModelAMSPos);
InstPos = pclInstanceAMSList->GetHeadPosition();
ModelPos = pclModelAMSList->GetHeadPosition();
while ( InstPos != NULL )
{
pclInstanceAMS = pclInstanceAMSList->GetNext(InstPos);
pclModelAMS = pclModelAMSList->GetNext(ModelPos);
if ( pclModelAMS->m_fn_bIsAllocated() )
{
ERROR_ASSERT ( pclInstanceAMS->m_td_pfn_vAllocationFunction != NULL );
pclInstanceAMS->m_fn_bAllocate();
}
}
}
}
//****************************************************************
void EdActors_EditorActor::m_fn_vUpdateDatas(EdActors_EditorActor *pclSourceActor,
BOOL _bMustUpdateUnlinkedData /*= TRUE*/,
CTL_tdeUpdateReason eReason,
long _lUserDefinedReason /*= 0*/)
{
ERROR_ASSERT( pclSourceActor != NULL );
EdActors_ActorMiniStructureList *pclDestAMSList;
EdActors_ActorMiniStructureList *pclSourceAMSList;
POSITION DestAMSPos = m_clListOfAMSLists.GetHeadPosition();
POSITION SourceAMSPos = pclSourceActor->m_clListOfAMSLists.GetHeadPosition();
while ( DestAMSPos != NULL )
{
ERROR_ASSERT( SourceAMSPos != NULL );
pclDestAMSList = m_clListOfAMSLists.GetNext(DestAMSPos);
pclSourceAMSList = pclSourceActor->m_clListOfAMSLists.GetNext(SourceAMSPos);
ERROR_ASSERT( pclDestAMSList->GetCount() == pclSourceAMSList->GetCount());
m_fn_vUpdateDataInList(pclDestAMSList, pclSourceAMSList, _bMustUpdateUnlinkedData, eReason, _lUserDefinedReason);
}
}
//****************************************************************
void EdActors_EditorActor::m_fn_vUpdateDataInList(EdActors_ActorMiniStructureList *pclDestMSList,
EdActors_ActorMiniStructureList *pclSourceMSList,
BOOL _bMustUpdateUnlinkedData /*= TRUE*/,
CTL_tdeUpdateReason eReason,
long _lUserDefinedReason /*= 0*/)
{
EdActors_ActorMiniStructure *pclInstanceCurrentMS;
EdActors_ActorMiniStructure *pclModelCurrentMS;
CTL_Editor_DataList *pclInstanceDataList;
CTL_Editor_DataList *pclModelDataList;
POSITION ModelMSPos = pclSourceMSList->GetHeadPosition();
POSITION InstanceMSPos = pclDestMSList->GetHeadPosition();
while ( ModelMSPos != NULL )
{
pclModelCurrentMS = pclSourceMSList->GetNext(ModelMSPos);
pclInstanceCurrentMS = pclDestMSList->GetNext(InstanceMSPos);
if ( pclModelCurrentMS->m_fn_bIsAllocated() )
{
ERROR_ASSERT( pclInstanceCurrentMS->m_fn_bIsAllocated() );
pclInstanceDataList = pclInstanceCurrentMS->m_pclDataList;
pclModelDataList = pclModelCurrentMS->m_pclDataList;
ERROR_ASSERT ( pclInstanceDataList->GetCount() == pclModelDataList->GetCount() );
CTL_Editor_Data *pclDataToBeUpdated;
CTL_Editor_Data *pclSourceData;
POSITION InstDataPos = pclInstanceDataList->GetHeadPosition();
POSITION ModelDataPos = pclModelDataList->GetHeadPosition();
while ( InstDataPos != NULL )
{
pclDataToBeUpdated = pclInstanceDataList->GetNext(InstDataPos);
pclSourceData = pclModelDataList->GetNext(ModelDataPos);
if ( ( _bMustUpdateUnlinkedData )
|| ( OAC_fn_bIsLinked(pclDataToBeUpdated) )
)
pclDataToBeUpdated->m_fn_vUpdateData(pclSourceData, eReason, _lUserDefinedReason);
}
}
}
}
//****************************************************************
tdeCarActorType EdActors_EditorActor::m_fn_tdeGetActorType()
{
return m_tdeType;
}
//****************************************************************
BOOL EdActors_EditorActor::m_fn_bIsAnInstance()
{
return (m_tdeType == EDCAR_ACTOR_TYPE_INSTANCE);
}
//****************************************************************
CTL_Editor_EnumDescriptor *EdActors_EditorActor::m_pub_fn_pclGetEnumDescriptorForObjectsTables()
{
return m_pclEnumDescriptorForObjectsTables;
}
//****************************************************************
void EdActors_EditorActor::m_fn_vSaveActor(SCR_tdst_File_Description *p_stFile)
{
}
//****************************************************************
CTL_Editor_Data *EdActors_EditorActor::m_fn_p_oFindDataByName(CString csName)
{
BOOL bDataFound = FALSE;
CTL_Editor_Data *pclFoundData = NULL;
EdActors_ActorMiniStructure *pclActorMS;
EdActors_ActorMiniStructureList *pclCurrentAMSList;
POSITION AMSPos = m_clListOfAMSLists.GetHeadPosition();
POSITION MSPos;
POSITION DataPos;
while ( (AMSPos != NULL) && (!bDataFound) )
{
pclCurrentAMSList = m_clListOfAMSLists.GetNext(AMSPos);
MSPos = pclCurrentAMSList->GetHeadPosition();
while ( (MSPos != NULL) && (!bDataFound) )
{
pclActorMS = pclCurrentAMSList->GetNext(MSPos);
DataPos = pclActorMS->m_pclDataList->GetHeadPosition();
while ( (DataPos != NULL) && (!bDataFound) )
{
pclFoundData = pclActorMS->m_pclDataList->GetNext(DataPos);
bDataFound = ( pclFoundData->m_pub_fn_csGetDataName().CompareNoCase(csName) == 0 );
}
}
}
if ( bDataFound )
return pclFoundData;
else
return NULL;
}
//****************************************************************
CPA_tdoNameList *EdActors_EditorActor::m_fn_p_oGetNameList(CString csName)
{
CPA_Editor_ObjectListData *p_oData = (CPA_Editor_ObjectListData *) m_fn_p_oFindDataByName(csName);
return p_oData ? p_oData->m_p_oNameList : NULL;
}
//****************************************************************
EdtList *EdActors_EditorActor::m_fn_p_oGetObjectList(CString csName)
{
CPA_Editor_ObjectListData *p_oData = (CPA_Editor_ObjectListData *) m_fn_p_oFindDataByName(csName);
return p_oData ? p_oData->m_p_oObjectList : NULL;
}
//****************************************************************
CPA_ZonesActivatingList *EdActors_EditorActor::m_fn_p_oGetZAList(CString csName)
{
CPA_Editor_ObjectListData *p_oData = (CPA_Editor_ObjectListData *) m_fn_p_oFindDataByName(csName);
return p_oData ? p_oData->m_p_oZAList : NULL;
}
//****************************************************************
void EdActors_EditorActor::m_fn_vSetObjectList(CString csName, EdtList *p_oList)
{
CPA_Editor_ObjectListData *p_oData = (CPA_Editor_ObjectListData *) m_fn_p_oFindDataByName(csName);
if ( p_oData )
p_oData->m_p_oObjectList = p_oList;
}