reman3/Rayman_X/cpa/tempgrp/Ctl/Src/Data/CTL_DatV.cpp

294 lines
9.5 KiB
C++

// Implementation file for the definition of an integer characteristic
///////////////////////////////////////////////////////////////////////
#include "StdAfx.h"
#include "Data\CTL_DatV.hpp"
#include "Others\CTL_Pri.hpp"
//External Modules
#include "CTL_ErO.hpp"
#include "MTH.h"
//End of External Modules
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
//Constructor / Destructor
//************************************************************************************
CTL_Editor_VectorData::CTL_Editor_VectorData(char cDataSize,
CString csScriptName,
CTL_Editor_DataList *_pclParentList,
CTL_Editor_Data *pclCurrentBaseData /*= NULL*/)
: CTL_Editor_Data(CTL_DATA_TYPE__VECTOR,
csScriptName,
_pclParentList,
pclCurrentBaseData)
{
m_cDataSize = cDataSize;
m_ldCurrentValueX = 0;
m_ldCurrentValueY = 0;
m_ldCurrentValueZ = 0;
}
//************************************************************************************
CTL_Editor_VectorData::~CTL_Editor_VectorData()
{
}
//Member functions
//**************************************************************************************
//Function called to Init the data
void CTL_Editor_VectorData::m_fn_vInitData()
{
}
//************************************************************************************
//Function called to read associated motor's data
void CTL_Editor_VectorData::m_fn_vGetMotorData()
{
m_ldCurrentValueX = 0.0;
m_ldCurrentValueY = 0.0;
m_ldCurrentValueZ = 0.0;
BOOL bMustReadData = TRUE;
if ( m_pro_td_p_fn_bDataMustBeRead != NULL )
bMustReadData &= m_pro_td_p_fn_bDataMustBeRead(this);
if ( bMustReadData )
{
MTH3D_tdstVector *p_tdstVector = (MTH3D_tdstVector *)m_pub_fn_pvGetMotorData();
if(p_tdstVector)
{
CTL_fn_vGetMemoryForFloat(&(p_tdstVector->xX), m_ldCurrentValueX, m_cDataSize);
CTL_fn_vGetMemoryForFloat(&(p_tdstVector->xY), m_ldCurrentValueY, m_cDataSize);
CTL_fn_vGetMemoryForFloat(&(p_tdstVector->xZ), m_ldCurrentValueZ, m_cDataSize);
}
}
}
//************************************************************************************
//Function called to update associated motor's data
void CTL_Editor_VectorData::m_fn_vUpdateMotorData(CTL_tdeUpdateReason eReason,
long _lUserDefinedReason /*= 0*/)
{
BOOL bMustWriteData = TRUE;
if ( m_pro_td_p_fn_bDataMustBeWritten != NULL )
bMustWriteData &= m_pro_td_p_fn_bDataMustBeWritten(this);
if ( bMustWriteData )
{
MTH3D_tdstVector *p_tdstVector = (MTH3D_tdstVector *)m_pub_fn_pvGetMotorData();
CTL_fn_vSetMemoryForFloat(&(p_tdstVector->xX), m_ldCurrentValueX, m_cDataSize);
CTL_fn_vSetMemoryForFloat(&(p_tdstVector->xY), m_ldCurrentValueY, m_cDataSize);
CTL_fn_vSetMemoryForFloat(&(p_tdstVector->xZ), m_ldCurrentValueZ, m_cDataSize);
//Special changes
m_fn_vDataHasBeenChanged(eReason, _lUserDefinedReason);
}
}
//************************************************************************
//Function called to update data with another one
void CTL_Editor_VectorData::m_fn_vUpdateData(CTL_Editor_Data *pclSourceData,
CTL_tdeUpdateReason eReason,
long _lUserDefinedReason /*= 0*/)
{
ERROR_ASSERT(pclSourceData->m_pub_fn_tdeGetDataType() == m_pub_fn_tdeGetDataType());
m_cDataSize = ((CTL_Editor_VectorData *)pclSourceData)->m_cDataSize;
m_ldCurrentValueX = ((CTL_Editor_VectorData *)pclSourceData)->m_ldCurrentValueX;
m_ldCurrentValueY = ((CTL_Editor_VectorData *)pclSourceData)->m_ldCurrentValueY;
m_ldCurrentValueZ = ((CTL_Editor_VectorData *)pclSourceData)->m_ldCurrentValueZ;
m_fn_vUpdateMotorData();
m_fn_vLookIfDataHasBeenModified();
}
//************************************************************************
//Function called to get a string representing the value of the data
CStringList *CTL_Editor_VectorData::m_fn_pcslFormatDataValueString()
{
m_csStringList.RemoveAll();
CString csStringValueX;
csStringValueX.Format("%.3f", m_ldCurrentValueX);
m_csStringList.AddTail(csStringValueX);
CString csStringValueY;
csStringValueY.Format("%.3f", m_ldCurrentValueY);
m_csStringList.AddTail(csStringValueY);
CString csStringValueZ;
csStringValueZ.Format("%.3f", m_ldCurrentValueZ);
m_csStringList.AddTail(csStringValueZ);
return &m_csStringList;
}
//************************************************************************
//Function called to set the value of the data acoording to a string representing it
void CTL_Editor_VectorData::m_fn_vSetValueWithString(CStringList *pcslValueStringList)
{
CString csMessage = "? ? ?";
CString csMessage2 = "! ! !";
ERROR_PREPARE(/*_M(g_c_csActorModuleNameForErrors,*/
csMessage,
"CTL_Editor_VectorData::m_fn_vSetValueWithString(...)",
E_ERROR_GRAVITY_WARNING,
csMessage2);
ERROR_ASSERT( pcslValueStringList->GetCount() == 3 );
if ( (pcslValueStringList->GetCount() == 3) )
{
//Extracts the three components of the Vector
CString csIsolatedData;
//X coordinate
CString csValueString = pcslValueStringList->GetAt(pcslValueStringList->FindIndex(0));
m_ldCurrentValueX = atof(LPCTSTR(csValueString));
//Y coordinate
csValueString = pcslValueStringList->GetAt(pcslValueStringList->FindIndex(1));
m_ldCurrentValueY = atof(LPCTSTR(csValueString));
//Z coordinate
csValueString = pcslValueStringList->GetAt(pcslValueStringList->FindIndex(2));
m_ldCurrentValueZ = atof(LPCTSTR(csValueString));
}
else
{
m_ldCurrentValueX = 0.0;
m_ldCurrentValueY = 0.0;
m_ldCurrentValueZ = 0.0;
}
m_fn_vUpdateMotorData();
}
//************************************************************************
//Function called to look if data has been modified (by motor for example)
void CTL_Editor_VectorData::m_fn_vLookIfDataHasBeenModified()
{
m_fn_vGetMotorData();
m_pub_fn_vSetDataHasChanged ( ( m_ldCurrentValueX != m_ldOldValueX )
|| ( m_ldCurrentValueY != m_ldOldValueY )
|| ( m_ldCurrentValueZ != m_ldOldValueZ )
);
if ( m_pub_fn_bGetDataHasChanged() )
{
m_ldOldValueX = m_ldCurrentValueX;
m_ldOldValueY = m_ldCurrentValueY;
m_ldOldValueZ = m_ldCurrentValueZ;
}
}
//Undo
//************************************************************************
//Function called to save the current Value (for Undo)
void CTL_Editor_VectorData::m_fn_vKeepCurrentValue()
{
m_ldKeepedValueForUndoX = m_ldCurrentValueX;
m_ldKeepedValueForUndoY = m_ldCurrentValueY;
m_ldKeepedValueForUndoZ = m_ldCurrentValueZ;
}
//************************************************************************
//Function called to validate Undo for the current change
void CTL_Editor_VectorData::m_fn_vRegisterUndoAction()
{
/* if ( m_ldKeepedValueForUndo != m_ldCurrentValue )
{
EdActors_ActorFloatDataModif *pclModif = new EdActors_ActorFloatDataModif(this,
m_ldKeepedValueForUndo,
m_ldCurrentValue);
m_pclParentActor->m_clUndoManager.AskFor(pclModif);
}
*/
}
//##################################################################"
//************************************************************************
//Constructor
/*EdActors_ActorFloatDataModif::EdActors_ActorFloatDataModif( CTL_Editor_Data *pclData,
long double ldOldValue,
long double ldNewValue)
: EdActors_ActorDataModif(pclData)
{
m_ldNewValue = ldNewValue;
m_ldKeepedValue = ldOldValue;
CString csName;
csName.Format("%s : %.3f --> %.3f", pclData->m_csScriptName,
ldOldValue,
ldNewValue);
SetName(csName);
}
//************************************************************************
//Destructor
EdActors_ActorFloatDataModif::~EdActors_ActorFloatDataModif()
{
}
//************************************************************************
BOOL EdActors_ActorFloatDataModif::Do()
{
((CTL_Editor_VectorData *)m_pclData)->m_ldCurrentValue = m_ldNewValue;
m_pclData->m_fn_vUpdateMotorData();
m_pclData->m_bDataHasChanged = TRUE;
m_pclData->m_pclParentControl->m_fn_vUpdate();
m_pclData->m_pclParentActor->m_pclActor->fn_vNotifySave();
return TRUE;
}
//************************************************************************
BOOL EdActors_ActorFloatDataModif::Undo()
{
((CTL_Editor_VectorData *)m_pclData)->m_ldCurrentValue = m_ldKeepedValue;
m_pclData->m_fn_vUpdateMotorData();
m_pclData->m_bDataHasChanged = TRUE;
m_pclData->m_pclParentControl->m_fn_vUpdate();
return TRUE;
}
*/
//////////////////////////////////////////////////////////////////////////////////////////////////////
// Method : mfn_bEqualsModifiedDataOldValue
// Date : 98/06/24
//////////////////////////////////////////////////////////////////////////////////////////////////////
// Description :
// Author : Stegaru Cristian - CPA
//////////////////////////////////////////////////////////////////////////////////////////////////////
// Modification :
// Date :
// By :
//////////////////////////////////////////////////////////////////////////////////////////////////////
BOOL CTL_Editor_VectorData::mfn_bEqualsModifiedDataOldValue (CTL_Editor_Data *pModifiedData)
{
ASSERT (pModifiedData);
ERROR_ASSERT(pModifiedData->m_pub_fn_tdeGetDataType() == m_pub_fn_tdeGetDataType());
return m_ldCurrentValueX == ((CTL_Editor_VectorData *)pModifiedData)->m_ldOldValueX
&& m_ldCurrentValueY == ((CTL_Editor_VectorData *)pModifiedData)->m_ldOldValueY
&& m_ldCurrentValueZ == ((CTL_Editor_VectorData *)pModifiedData)->m_ldOldValueZ;
}