reman3/Rayman_X/cpa/tempgrp/OAC/Src/DatCtrl/CPA_DatO.cpp

703 lines
24 KiB
C++

// Implementation file for the definition of a characteristic type
/////////////////////////////////////////////////////////////////////
#include "StdAfx.h"
#include "ACP_Base.h"
/////////////////////////////////////////////////////
//////// !!!!!!!!!!!! DANGER !!!!!!!!!!! ////////////
/////////////////////////////////////////////////////
#define _ED_CAR_MUST_DEFINE_STRUCT_
#include "EdAllAct.hpp"
/////////////////////////////////////////////////////
//////// !!!!!!!!!!!! End DANGER !!!!!!!!!!! ////////
/////////////////////////////////////////////////////
#include "_AInterf.hpp"
#include "CPA_DatO.hpp"
#include "EDACactr.hpp"
#include "edtlist.hpp"
#include "EDACStrg.hpp"
//External Modules
#include "ITF.h"
#include "TAC.h"
#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
//Constructors / Destructor
//**************************************************************************************
CPA_Editor_ObjectListData::CPA_Editor_ObjectListData(CString csScriptName,
CTL_Editor_DataList *_pclParentList,
CTL_Editor_Data *pclCurrentBaseData /*= NULL*/)
: CTL_Editor_Data(CTL_DATA_TYPE__USE_USER_DEFINED_TYPE,
csScriptName,
_pclParentList,
pclCurrentBaseData,
OAC_DATA_TYPE__OBJECT_LIST)
{
m_p_oObjectList = NULL;
m_p_oNameList = NULL;
m_p_oZAList = NULL;
}
//**************************************************************************************
CPA_Editor_ObjectListData::~CPA_Editor_ObjectListData()
{
}
//**************************************************************************************
void CPA_Editor_ObjectListData::m_vSetZAList(CPA_ZonesActivatingList *_p_oZAList)
{
if ( m_p_oZAList != _p_oZAList )
{
//tell the coherence manager to remember the actor no longer uses its old activation list.
if ( m_p_oZAList )
g_oCoherenceManager.m_fn_vRemoveALink(
(CPA_SaveObject *) OAC_fn_pclGetParentActorOfData(this)->m_pclActor,
m_p_oZAList
);
//tell the coherence manager to remember the instance now uses the new activation list.
if ( _p_oZAList )
g_oCoherenceManager.m_fn_vAddALink(
(CPA_SaveObject *) OAC_fn_pclGetParentActorOfData(this)->m_pclActor,
_p_oZAList
);
//now we can set the new value
m_p_oZAList = _p_oZAList;
if ( !g_pclInterface->GetInterface()->fn_bIsLoadingWorld() )
OAC_fn_pclGetParentActorOfData(this)->m_pclActor->fn_vNotifySave();
}
}
//**************************************************************************************
void CPA_Editor_ObjectListData::m_vSetObjectList(EdtList *_p_oObjectList)
{
if ( m_p_oObjectList != _p_oObjectList )
{
if ( m_p_oObjectList )
m_p_oObjectList->fn_bMakeActorNotUseThisList(OAC_fn_pclGetParentActorOfData(this) , FALSE); // No NotifySave
if ( _p_oObjectList )
_p_oObjectList->fn_bMakeActorUseThisList(OAC_fn_pclGetParentActorOfData(this) , FALSE); // No NotifySave
//now we can set the new value
m_p_oObjectList = _p_oObjectList; //should be useless...
}
}
//**************************************************************************************
//Function called to Init the data
void CPA_Editor_ObjectListData::m_vUpdateEngineZAList()
{
MS_tdxHandleToCollSet hCollSet = (MS_tdxHandleToCollSet) OAC_fn_pclGetParentAMSOfData(this)->m_fn_pvGetBaseAddress();
ZDX_tdxHandleToCsaList hActivationList;
// get engine activation list
if ( m_p_oZAList )
hActivationList = (ZDX_tdxHandleToCsaList) m_p_oZAList->GetData();
else
hActivationList = NULL;
//set activation list
if ( m_pub_fn_csGetDataName() == C_szZdeName )
CS_M_SetActivationList(Zde, hCollSet, hActivationList);
else if ( m_pub_fn_csGetDataName() == C_szZddName )
CS_M_SetActivationList(Zdd, hCollSet, hActivationList);
else if ( m_pub_fn_csGetDataName() == C_szZdmName )
CS_M_SetActivationList(Zdm, hCollSet, hActivationList);
else if ( m_pub_fn_csGetDataName() == C_szZdrName )
CS_M_SetActivationList(Zdr, hCollSet, hActivationList);
}
//**************************************************************************************
//Function called to Init the data
void CPA_Editor_ObjectListData::m_vUpdateEngineObjectList()
{
MS_tdxHandleToCollSet hCollSet = (MS_tdxHandleToCollSet) OAC_fn_pclGetParentAMSOfData(this)->m_fn_pvGetBaseAddress();
ZDX_tdxHandleToZdxList hZdxList;
// get engine object list
if ( m_p_oObjectList )
hZdxList = (ZDX_tdxHandleToZdxList) m_p_oObjectList->fn_hGetMotorList();
else
hZdxList = NULL;
// set object list
if ( m_pub_fn_csGetDataName() == C_szZdeName )
CS_M_SetZdxList(Zde, hCollSet, hZdxList);
else if ( m_pub_fn_csGetDataName() == C_szZddName )
CS_M_SetZdxList(Zdd, hCollSet, hZdxList);
else if ( m_pub_fn_csGetDataName() == C_szZdmName )
CS_M_SetZdxList(Zdm, hCollSet, hZdxList);
else if ( m_pub_fn_csGetDataName() == C_szZdrName )
CS_M_SetZdxList(Zdr, hCollSet, hZdxList);
}
//**************************************************************************************
//Function called to Init the data
void CPA_Editor_ObjectListData::m_fn_vInitData()
{
if ( OAC_fn_bBelongsToAnInstance(this) )
{
// The instance must have the same list of names (Zdd/Zde/Zdm/Way) as the model
EdActors_EditorActor *p_oEditorModel = OAC_fn_pclGetParentActorOfData(this)->m_pclActor->m_fn_pclGetModel()->m_fn_pclGetEditorActor();
m_p_oNameList = ((CPA_Editor_ObjectListData *) p_oEditorModel->m_fn_p_oFindDataByName(m_pub_fn_csGetDataName()))->m_p_oNameList;
//make it also update en editor list pointers according to the engine handles
m_fn_vGetMotorData();
}
}
//**************************************************************************************
//Function called to read associated motor's data
void CPA_Editor_ObjectListData::m_fn_vGetMotorData()
{
//get the handle to the engine list
ZDX_tdxHandleToZdxList hZdxList = * (ZDX_tdxHandleToZdxList *) m_pro_pvMotorData;
//the IA can change the activation lists and zone lists of an object -> read them and store them
//in the editor data
//find the reachable object for the engine list
if ( hZdxList )
{
CPA_BaseObject *p_oZDxEdtList = g_pclInterface->GetMainWorld()->fn_p_oFindObjectWithEngine(
hZdxList,
C_szEdtListTypeName
);
//make the actor reference the found object list
m_vSetObjectList((EdtList *)p_oZDxEdtList);
}
//do it too for m_p_oZAList
ZDX_tdxHandleToCsaList hActivationList;
if ( m_pub_fn_csGetDataName() == C_szZdeName )
hActivationList = ((MS_tdxHandleToCollSet) OAC_fn_pclGetParentAMSOfData(this)->m_fn_pvGetBaseAddress())->hZdeActivationList;
else if ( m_pub_fn_csGetDataName() == C_szZddName )
hActivationList = ((MS_tdxHandleToCollSet) OAC_fn_pclGetParentAMSOfData(this)->m_fn_pvGetBaseAddress())->hZddActivationList;
else if ( m_pub_fn_csGetDataName() == C_szZdmName )
hActivationList = ((MS_tdxHandleToCollSet) OAC_fn_pclGetParentAMSOfData(this)->m_fn_pvGetBaseAddress())->hZdmActivationList;
else if ( m_pub_fn_csGetDataName() == C_szZdrName )
hActivationList = ((MS_tdxHandleToCollSet) OAC_fn_pclGetParentAMSOfData(this)->m_fn_pvGetBaseAddress())->hZdrActivationList;
else if ( m_pub_fn_csGetDataName() == C_szWayName )
hActivationList = NULL;
else
{
ERROR_PREPARE_M(g_c_csActorModuleNameForErrors,
"Setting editor list pointers from engine handles",
"CPA_Editor_ObjectListData::m_fn_vGetMotorData()",
E_ERROR_GRAVITY_FATAL,
"No editor activation list was found for the engine activation list handle"
);
ERROR_ASSERT(FALSE);
}
//find the reachable object for the engine list
if ( hActivationList )
{
CPA_ZonesActivatingList *p_oNewZAList = (CPA_ZonesActivatingList *) g_pclInterface->GetMainWorld()->fn_p_oFindObjectWithEngine(
hActivationList,
C_szZAListTypeName
);
m_vSetZAList(p_oNewZAList);
}
}
//**************************************************************************************
//Function called to update associated motor's data from editor data
void CPA_Editor_ObjectListData::m_fn_vUpdateMotorData(CTL_tdeUpdateReason eReason,
long _lUserDefinedReason /*= 0*/)
{
MS_tdxHandleToCollSet hCollSet = (MS_tdxHandleToCollSet) OAC_fn_pclGetParentAMSOfData(this)->m_fn_pvGetBaseAddress();
MS_tdxHandleToMSWay hWay = (MS_tdxHandleToMSWay) OAC_fn_pclGetParentAMSOfData(this)->m_fn_pvGetBaseAddress();
ZDX_tdxHandleToZdxList hZdxList;
ZDX_tdxHandleToCsaList hActivationList;
if ( m_p_oObjectList )
{
hZdxList = (ZDX_tdxHandleToZdxList) m_p_oObjectList->fn_hGetMotorList();
}
else
hZdxList = NULL;
if ( m_p_oZAList )
hActivationList = (ZDX_tdxHandleToCsaList) m_p_oZAList->GetData();
else
hActivationList = NULL;
//set the object and activation list
if ( m_pub_fn_csGetDataName() == C_szZdeName )
{
CS_M_SetZdxList(Zde, hCollSet, hZdxList);
CS_M_SetActivationList(Zde, hCollSet, hActivationList);
}
else if ( m_pub_fn_csGetDataName() == C_szZddName )
{
CS_M_SetZdxList(Zdd, hCollSet, hZdxList);
CS_M_SetActivationList(Zdd, hCollSet, hActivationList);
}
else if ( m_pub_fn_csGetDataName() == C_szZdmName )
{
CS_M_SetZdxList(Zdm, hCollSet, hZdxList);
CS_M_SetActivationList(Zdm, hCollSet, hActivationList);
}
else if ( m_pub_fn_csGetDataName() == C_szZdrName )
{
CS_M_SetZdxList(Zdr, hCollSet, hZdxList);
CS_M_SetActivationList(Zdr, hCollSet, hActivationList);
}
//Special changes
m_fn_vDataHasBeenChanged(eReason, _lUserDefinedReason);
}
//************************************************************************
//Function called to update data with another one
void CPA_Editor_ObjectListData::m_fn_vUpdateData(CTL_Editor_Data *pclSourceData,
CTL_tdeUpdateReason eReason,
long _lUserDefinedReason /*= 0*/)
{
ERROR_PREPARE_M(g_c_csActorModuleNameForErrors,
"Copying data from a model into an instance",
"CPA_Editor_ObjectListData::m_fn_vUpdateData(...)",
E_ERROR_GRAVITY_FATAL,
"The data types are not equal"
);
ERROR_ASSERT( pclSourceData->m_pub_fn_tdeGetDataType() == m_pub_fn_tdeGetDataType() );
BOOL bChanged = FALSE;
switch (eReason)
{
case E_ur_InstanciatedFromModel:
case E_ur_ModelChangedNameList:
// do something only if the model has a valid name list
if ( ((CPA_Editor_ObjectListData *) pclSourceData)->m_p_oNameList )
{
//set the instance with the values of the model
m_p_oNameList = ((CPA_Editor_ObjectListData *) pclSourceData)->m_p_oNameList;
// if the model has no default object list yet, create one.
//if ( !((CPA_Editor_ObjectListData *) pclSourceData)->m_p_oObjectList )
//{
tdstEdtListMess stMessage;
stMessage.csListType = LPCTSTR(pclSourceData->m_pub_fn_csGetDataName());
stMessage.pActor = (CPA_SaveObject *) OAC_fn_pclGetParentActorOfData(this)->m_pclActor;
//create an object list for the model
((CPA_Editor_ObjectListData *) pclSourceData)->m_p_oNameList
->m_pEdtListHandler->fn_poCreateEdtList(&stMessage);
//m_p_oObjectList = ((CPA_Editor_ObjectListData *) pclSourceData)->m_p_oObjectList;
bChanged = TRUE;
/*m_fn_bSetLink(pclSourceData->m_fn_eGetLink());
m_fn_vUpdateMotorData();*/
}
if ( ((CPA_Editor_ObjectListData *) pclSourceData)->m_p_oZAList )
{
if ( ((CPA_tdoNameList *) ((CPA_Editor_ObjectListData *) pclSourceData)->m_p_oZAList->GetOwner()) != m_p_oNameList )
((CPA_Editor_ObjectListData *) pclSourceData)->m_vSetZAList(NULL);
else
m_vSetZAList(((CPA_Editor_ObjectListData *) pclSourceData)->m_p_oZAList);
bChanged = TRUE;
}
if ( bChanged )
{
// m_fn_bSetLink(pclSourceData->m_fn_eGetLink());
m_fn_vUpdateMotorData(eReason, _lUserDefinedReason);
}
break;
case E_ur_ModelEditedNameList:
//if the model just modified the contents of some name lists, we dont care.
break;
default:
ERROR_PREPARE_M(g_c_csActorModuleNameForErrors,
"Copying data from a model into an instance",
"CPA_Editor_ObjectListData::m_fn_vUpdateData(...)",
E_ERROR_GRAVITY_FATAL,
"No good valid reason was given for data update (i.e. model changed some data)"
);
ERROR_ASSERT(FALSE);
break;
}
}
//************************************************************************
//Function called to get a string representing the value of the data
CStringList *CPA_Editor_ObjectListData::m_fn_pcslFormatDataValueString()
{
m_csStringList.RemoveAll();
m_csStringList.AddTail(m_p_oNameList ? m_p_oNameList->GetName() : "");
BOOL bSaveOL, bSaveZAL;
//save the ZA list only for zones, and if we have one...
bSaveZAL = ((m_p_oZAList && (m_pub_fn_csGetDataName() != C_szWayName)) ? TRUE : FALSE);
if ( OAC_fn_bBelongsToAnInstance(this) ) //if an instance
{
//save the object list if we have one
bSaveOL = (m_p_oObjectList ? TRUE : FALSE);
}
else //is a model
{
//a model does not save its ways object list, and zone object lists
//are saved only if they have no virge field
bSaveOL = (m_p_oObjectList && (m_pub_fn_csGetDataName() != C_szWayName) && m_p_oNameList->m_bHasACommonField());
}
m_csStringList.AddTail(bSaveOL ? m_p_oObjectList->GetName() : "");
m_csStringList.AddTail(bSaveZAL ? m_p_oZAList->GetName() : "");
return &m_csStringList;
}
//************************************************************************
//Function called to set the value of the data acoording to a string representing it
void CPA_Editor_ObjectListData::m_fn_vSetValueWithString(CStringList *pcslValueStringList)
{
ERROR_PREPARE_M(g_c_csActorModuleNameForErrors,
"Filling data with script information",
"CPA_Editor_ObjectListData::m_fn_vSetValueWithString(...)",
E_ERROR_GRAVITY_FATAL,
"The number of fields to fill and provided data do not correspond"
);
ERROR_ASSERT(pcslValueStringList->GetCount() == 3);
POSITION xPos = pcslValueStringList->GetHeadPosition();
CString csNameList(pcslValueStringList->GetNext(xPos));
CString csObjectList(pcslValueStringList->GetNext(xPos));
CString csZAList(pcslValueStringList->GetNext(xPos));
// Get the main world
CPA_MainWorld * pMainWorld = OAC_fn_pclGetParentActorOfData(this)->m_pclActor->GetMainWorld ();
// Search the name list
if ( m_p_oNameList )
g_oCoherenceManager.m_fn_vRemoveALink(
(CPA_SaveObject *) OAC_fn_pclGetParentActorOfData(this)->m_pclActor,
m_p_oNameList
);
m_p_oNameList = NULL;
if ( !csNameList.IsEmpty() )
{
CPA_BaseObject *p_oFamily = (CPA_BaseObject *) OAC_fn_pclGetParentActorOfData(this)->m_pclActor->m_pub_fn_pclGetFamily();
m_p_oNameList = (CPA_tdoNameList *) pMainWorld -> fn_p_oFindObject (csNameList, C_szZDdNameListType, p_oFamily);
if ( !m_p_oNameList )
m_p_oNameList = (CPA_tdoNameList *) pMainWorld -> fn_p_oFindObject (csNameList, C_szZDeNameListType, p_oFamily);
if ( !m_p_oNameList )
m_p_oNameList = (CPA_tdoNameList *) pMainWorld -> fn_p_oFindObject (csNameList, C_szZDmNameListType, p_oFamily);
if ( !m_p_oNameList )
m_p_oNameList = (CPA_tdoNameList *) pMainWorld -> fn_p_oFindObject (csNameList, C_szZDrNameListType, p_oFamily);
// add by jt
if ( !m_p_oNameList )
m_p_oNameList = (CPA_tdoNameList *) pMainWorld -> fn_p_oFindObject (csNameList, C_szWayNameListType, p_oFamily);
// end jt
ERROR_PREPARE_M(g_c_csActorModuleNameForErrors,
"Filling data with script information",
"CPA_Editor_ObjectListData::m_fn_vSetValueWithString(...)",
E_ERROR_GRAVITY_FATAL,
"No editor name list was found with the specified name"
);
ERROR_ASSERT(m_p_oNameList);
}
//tell the coherence manager to remember the model now uses the new name list.
if ( m_p_oNameList )
g_oCoherenceManager.m_fn_vAddALink(
OAC_fn_pclGetParentActorOfData(this)->m_pclActor,
m_p_oNameList
);
// We set the pointer of the model to the name list
if ( !csObjectList.IsEmpty() )
{
EdtList *p_oObjectList = (EdtList *) pMainWorld -> fn_p_oFindObject (csObjectList, C_szEdtListTypeName, m_p_oNameList ? m_p_oNameList : NO_CRITERIA );
ERROR_PREPARE_M(g_c_csActorModuleNameForErrors,
"Filling data with script information",
"CPA_Editor_ObjectListData::m_fn_vSetValueWithString(...)",
E_ERROR_GRAVITY_FATAL,
"No editor object list was found with the specified name"
);
ERROR_ASSERT(p_oObjectList);
m_vSetObjectList(p_oObjectList);
}
else
m_vSetObjectList(NULL);
if ( !csZAList.IsEmpty() )
{
m_vSetZAList((CPA_ZonesActivatingList *) pMainWorld -> fn_p_oFindObject (csZAList, C_szZAListTypeName));
ERROR_PREPARE_M(g_c_csActorModuleNameForErrors,
"Filling data with script information",
"CPA_Editor_ObjectListData::m_fn_vSetValueWithString(...)",
E_ERROR_GRAVITY_FATAL,
"No editor activation list was found with the specified name"
);
ERROR_ASSERT(m_p_oZAList);
}
else
m_vSetZAList(NULL);
}
//************************************************************************
//Function called to look if data has been modified (by motor for example)
void CPA_Editor_ObjectListData::m_fn_vLookIfDataHasBeenModified()
{
BOOL bIsEditingAnInstance = OAC_fn_bBelongsToAnInstance(this);
m_fn_vGetMotorData();
m_pro_bDataHasChanged = bIsEditingAnInstance
? ((m_p_oObjectList != m_p_oOldObjectList) || (m_p_oZAList != m_p_oOldZAList ))
: (m_p_oNameList != m_p_oOldNameList);
if ( m_pro_bDataHasChanged )
{
if ( bIsEditingAnInstance )
{
m_p_oOldObjectList = m_p_oObjectList;
m_p_oOldZAList = m_p_oZAList;
}
else
m_p_oOldNameList = m_p_oNameList;
}
}
//************************************************************************
//Function called when data has been really modified (i.e. value is different from previous one)
void CPA_Editor_ObjectListData::m_fn_vDataHasBeenReallyModified()
{
}
//Undo
//************************************************************************
//Function called to save the current Value (for Undo)
void CPA_Editor_ObjectListData::m_fn_vKeepCurrentValue()
{
m_p_oNameListKeptForUndo = m_p_oNameList;
m_p_oObjectListKeptForUndo = m_p_oObjectList;
m_p_oZAListKeptForUndo = m_p_oZAList;
}
//************************************************************************
//Function called to validate Undo for the current change
void CPA_Editor_ObjectListData::m_fn_vRegisterUndoAction()
{
void *pKeptList, *pCurList;
void *pKeptAlternateList, *pCurAlternateList;
if ( OAC_fn_bBelongsToAnInstance(this) )
{
pKeptList = m_p_oObjectListKeptForUndo;
pCurList = m_p_oObjectList;
pKeptAlternateList = m_p_oZAListKeptForUndo;
pCurAlternateList = m_p_oZAList;
}
else
{
pKeptList = m_p_oNameListKeptForUndo;
pCurList = m_p_oNameList;
pKeptAlternateList = NULL;
pCurAlternateList = NULL;
}
CPA_ObjectListDataModif *pclModif = new CPA_ObjectListDataModif(this,
pKeptList,
pCurList,
pKeptAlternateList,
pCurAlternateList);
OAC_fn_pclGetParentActorOfData(this)->m_clUndoManager.AskFor(pclModif);
}
//##################################################################"
//************************************************************************
//Constructor
CPA_ObjectListDataModif::CPA_ObjectListDataModif
(
CPA_Editor_ObjectListData *p_oData,
void *pOldList,
void *pNewList,
void *_pOldAlternateList,
void *_pNewAlternateList
)
: CPA_Modif(0)
{
m_p_oData = p_oData;
m_pListAfterDo = pNewList;
m_pListBeforeDo = pOldList;
m_pAlternateListAfterDo = _pNewAlternateList;
m_pAlternateListBeforeDo = _pOldAlternateList;
CString csName;
csName.Format("%s : modified", p_oData->m_pub_fn_csGetDataName());
SetName(csName);
}
//************************************************************************
//Destructor
CPA_ObjectListDataModif::~CPA_ObjectListDataModif()
{
}
//************************************************************************
BOOL CPA_ObjectListDataModif::Do()
{
if ( OAC_fn_bBelongsToAnInstance(m_p_oData) )
{
m_p_oData->m_vSetObjectList((EdtList *) m_pListAfterDo);
m_p_oData->m_vSetZAList((CPA_ZonesActivatingList *) m_pAlternateListAfterDo);
}
else
{
//remove the link with the old name list
if ( m_p_oData->m_p_oNameList )
g_oCoherenceManager.m_fn_vRemoveALink(
(CPA_SaveObject *) OAC_fn_pclGetParentActorOfData(m_p_oData)->m_pclActor,
m_p_oData->m_p_oNameList
);
//set the name name list
m_p_oData->m_p_oNameList = (CPA_tdoNameList *) m_pListAfterDo;
//and set the link with the new name list
if ( m_p_oData->m_p_oNameList )
g_oCoherenceManager.m_fn_vAddALink(
(CPA_SaveObject *) OAC_fn_pclGetParentActorOfData(m_p_oData)->m_pclActor,
m_p_oData->m_p_oNameList
);
m_p_oData->m_vSetZAList((CPA_ZonesActivatingList *) m_pAlternateListAfterDo);
}
m_p_oData->m_fn_vUpdateMotorData();
m_p_oData->m_pub_fn_vSetDataHasChanged(TRUE);
m_p_oData->m_pub_fn_pclGetParentControl()->m_fn_vUpdate();
OAC_fn_pclGetParentActorOfData(m_p_oData)->m_pclActor->fn_vNotifySave();
return TRUE;
}
//************************************************************************
BOOL CPA_ObjectListDataModif::Undo()
{
if ( OAC_fn_bBelongsToAnInstance(m_p_oData) )
{
m_p_oData->m_vSetObjectList((EdtList *) m_pListBeforeDo);
m_p_oData->m_vSetZAList((CPA_ZonesActivatingList *) m_pAlternateListBeforeDo);
}
else
{
//remove the link with the old name list
if ( m_p_oData->m_p_oNameList )
g_oCoherenceManager.m_fn_vRemoveALink(
(CPA_SaveObject *) OAC_fn_pclGetParentActorOfData(m_p_oData)->m_pclActor,
m_p_oData->m_p_oNameList
);
m_p_oData->m_p_oNameList = (CPA_tdoNameList *) m_pListBeforeDo;
//and set the link with the new name list
if ( m_p_oData->m_p_oNameList )
g_oCoherenceManager.m_fn_vAddALink(
(CPA_SaveObject *) OAC_fn_pclGetParentActorOfData(m_p_oData)->m_pclActor,
m_p_oData->m_p_oNameList
);
m_p_oData->m_vSetZAList((CPA_ZonesActivatingList *) m_pAlternateListAfterDo);
}
m_p_oData->m_fn_vUpdateMotorData();
m_p_oData->m_pub_fn_vSetDataHasChanged(TRUE);
m_p_oData->m_pub_fn_pclGetParentControl()->m_fn_vUpdate();
return TRUE;
}
// ROMTEAM corrections (Nicu 06-02-98) {
//Function called to read associated motor's data
void OAC_FloatData::m_fn_vGetMotorData()
{
BOOL bMustReadData = TRUE;
if ( m_pro_td_p_fn_bDataMustBeRead != NULL )
bMustReadData &= m_pro_td_p_fn_bDataMustBeRead(this);
if ( bMustReadData )
{
m_ldCurrentValue = *(long*)m_pro_pvMotorData / 65536.0;
//Calls Modification function if needed
if ( m_pro_td_p_fn_vDataModifWhenRead != NULL )
m_pro_td_p_fn_vDataModifWhenRead(this);
}
}
//Function called to update associated motor's data
void OAC_FloatData::m_fn_vUpdateMotorData(CTL_tdeUpdateReason eReason, long _lUserDefinedReason)
{
BOOL bMustWriteData = TRUE;
if ( m_pro_td_p_fn_bDataMustBeWritten != NULL )
bMustWriteData &= m_pro_td_p_fn_bDataMustBeWritten(this);
if ( bMustWriteData )
{
//Calls Modification function if needed
if ( m_pro_td_p_fn_vDataModifWhenWrite != NULL )
m_pro_td_p_fn_vDataModifWhenWrite(this);
*(long*)m_pro_pvMotorData = (long)(m_ldCurrentValue * 65536.0 + 0.5);
//Calls Modification function if needed
if ( m_pro_td_p_fn_vDataModifWhenRead != NULL )
m_pro_td_p_fn_vDataModifWhenRead(this);
//Special changes
m_fn_vDataHasBeenChanged(eReason, _lUserDefinedReason);
}
}
//Function called to get a string representing the value of the data
CStringList *OAC_FloatData::m_fn_pcslFormatDataValueString()
{
m_csStringList.RemoveAll();
CString csStringToReturn;
csStringToReturn.Format("%ld", (long)(m_ldCurrentValue * 65536.0 + 0.5));
m_csStringList.AddTail(csStringToReturn);
return &m_csStringList;
}
//Function called to set the value of the data acoording to a string representing it
void OAC_FloatData::m_fn_vSetValueWithString(CStringList *pcslValueStringList)
{
ERROR_ASSERT(pcslValueStringList->GetCount() == 1);
CString csValueString = pcslValueStringList->GetHead();
m_ldCurrentValue = atol(LPCTSTR(csValueString)) / 65536.0;
m_fn_vUpdateMotorData();
}
// END ROMTEAM corrections (Nicu) }