273 lines
8.2 KiB
C++
273 lines
8.2 KiB
C++
// Implementation file for the definition of an enum characteristic
|
|
///////////////////////////////////////////////////////////////////////
|
|
#include "StdAfx.h"
|
|
|
|
#include "Data\CTL_DatE.hpp"
|
|
|
|
#include "Others\CTL_EnLi.hpp"
|
|
#include "Others\CTL_Pub.hpp"
|
|
|
|
//External Modules
|
|
#include "CTL_ErO.hpp"
|
|
//End of External Modules
|
|
|
|
#ifdef _DEBUG
|
|
#define new DEBUG_NEW
|
|
#undef THIS_FILE
|
|
static char THIS_FILE[] = __FILE__;
|
|
#endif
|
|
|
|
//**************************************************************************
|
|
//Constructor / Destructor
|
|
CTL_Editor_EnumData::CTL_Editor_EnumData(CTL_Editor_EnumDescriptor *pclEnumDescriptor,
|
|
CString csScriptName,
|
|
CTL_Editor_DataList *_pclParentList,
|
|
CTL_Editor_Data *pclCurrentBaseData /*= NULL*/)
|
|
: CTL_Editor_Data(CTL_DATA_TYPE__ENUM,
|
|
csScriptName,
|
|
_pclParentList,
|
|
pclCurrentBaseData)
|
|
{
|
|
m_pclCurrentValue = NULL;
|
|
m_pclKeepedValueForUndo = NULL;
|
|
m_pclEnumDescriptor = pclEnumDescriptor;
|
|
}
|
|
|
|
//**************************************************************************
|
|
CTL_Editor_EnumData::~CTL_Editor_EnumData()
|
|
{
|
|
|
|
}
|
|
|
|
//Member functions
|
|
|
|
//**************************************************************************************
|
|
//Function called to Init the data
|
|
void CTL_Editor_EnumData::m_fn_vInitData()
|
|
{
|
|
|
|
}
|
|
|
|
//**************************************************************************
|
|
//Function called to read associated motor's data
|
|
void CTL_Editor_EnumData::m_fn_vGetMotorData()
|
|
{
|
|
BOOL bMustReadData = TRUE;
|
|
if ( m_pro_td_p_fn_bDataMustBeRead != NULL )
|
|
bMustReadData = m_pro_td_p_fn_bDataMustBeRead(this);
|
|
|
|
if ( bMustReadData )
|
|
{
|
|
long lEnumValue;
|
|
switch (m_pclEnumDescriptor->m_fn_ucGetEnumSize())
|
|
{
|
|
case 0:
|
|
char bTempValue;
|
|
CTL_fn_vGetMemory(m_pub_fn_pvGetMotorData(), &bTempValue, 0);
|
|
lEnumValue = bTempValue;
|
|
break;
|
|
case 1:
|
|
char cTempValue;
|
|
CTL_fn_vGetMemory(m_pub_fn_pvGetMotorData(), &cTempValue, 1);
|
|
lEnumValue = cTempValue;
|
|
break;
|
|
case 2:
|
|
short wTempValue;
|
|
CTL_fn_vGetMemory(m_pub_fn_pvGetMotorData(), &wTempValue, 2);
|
|
lEnumValue = wTempValue;
|
|
break;
|
|
case 4:
|
|
CTL_fn_vGetMemory(m_pub_fn_pvGetMotorData(), &lEnumValue, 4);
|
|
break;
|
|
}
|
|
|
|
//Calls Modification function if needed
|
|
if ( m_pro_td_p_fn_vDataModifWhenRead != NULL )
|
|
m_pro_td_p_fn_vDataModifWhenRead(this);
|
|
|
|
//Updates current value (pointer)
|
|
BOOL bFound = FALSE;
|
|
CTL_Editor_EnumElement *m_pclCurrentElement;
|
|
|
|
if ( m_pclEnumDescriptor != NULL )
|
|
{
|
|
POSITION pos = m_pclEnumDescriptor->GetHeadPosition();
|
|
while ( (pos != NULL) && (!bFound) )
|
|
{
|
|
m_pclCurrentElement = m_pclEnumDescriptor->GetNext(pos);
|
|
bFound = ( m_pclCurrentElement->m_pub_fn_lGetValue() == lEnumValue );
|
|
}
|
|
}
|
|
|
|
if ( bFound )
|
|
m_pclCurrentValue = m_pclCurrentElement;
|
|
else
|
|
{
|
|
if ( m_pclEnumDescriptor->GetCount() > 0 )
|
|
m_pclCurrentValue = m_pclEnumDescriptor->GetHead();
|
|
else
|
|
m_pclCurrentValue = NULL;
|
|
}
|
|
}
|
|
}
|
|
|
|
//**************************************************************************
|
|
//Function called to update associated motor's data
|
|
void CTL_Editor_EnumData::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 )
|
|
{
|
|
//Calls Modification function if needed
|
|
if ( m_pro_td_p_fn_vDataModifWhenWrite != NULL )
|
|
m_pro_td_p_fn_vDataModifWhenWrite(this);
|
|
|
|
ERROR_ASSERT( m_pub_fn_pvGetMotorData() != NULL );
|
|
|
|
if ( m_pclCurrentValue != NULL )
|
|
{
|
|
switch ( m_pclEnumDescriptor->m_fn_ucGetEnumSize() )
|
|
{
|
|
case 0:
|
|
{
|
|
char cTempValue = (char)m_pclCurrentValue->m_pub_fn_lGetValue();
|
|
CTL_fn_vSetMemory(m_pub_fn_pvGetMotorData(), &cTempValue, 0);
|
|
}
|
|
break;
|
|
case 1:
|
|
{
|
|
char cTempValue = (char)m_pclCurrentValue->m_pub_fn_lGetValue();
|
|
CTL_fn_vSetMemory(m_pub_fn_pvGetMotorData(), &cTempValue, 1);
|
|
}
|
|
break;
|
|
case 2:
|
|
{
|
|
short sTempValue = (short)m_pclCurrentValue->m_pub_fn_lGetValue();
|
|
CTL_fn_vSetMemory(m_pub_fn_pvGetMotorData(), &sTempValue, 2);
|
|
}
|
|
break;
|
|
case 4:
|
|
{
|
|
long lValue = m_pclCurrentValue->m_pub_fn_lGetValue();
|
|
CTL_fn_vSetMemory(m_pub_fn_pvGetMotorData(), &lValue, 4);
|
|
}
|
|
break;
|
|
}
|
|
|
|
//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 update data with another one
|
|
void CTL_Editor_EnumData::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_pclCurrentValue = ((CTL_Editor_EnumData *)pclSourceData)->m_pclCurrentValue;
|
|
|
|
m_fn_vUpdateMotorData(eReason, _lUserDefinedReason);
|
|
}
|
|
|
|
//************************************************************************
|
|
//Function called to get a string representing the value of the data
|
|
CStringList *CTL_Editor_EnumData::m_fn_pcslFormatDataValueString()
|
|
{
|
|
m_csStringList.RemoveAll();
|
|
|
|
CString csStringToReturn = "!! Unknown !!";
|
|
if ( m_pclCurrentValue != NULL )
|
|
csStringToReturn.Format("%s", LPCTSTR(m_pclCurrentValue->m_pub_fn_csGetElementName()));
|
|
|
|
m_csStringList.AddTail(csStringToReturn);
|
|
|
|
return &m_csStringList;
|
|
}
|
|
|
|
//************************************************************************
|
|
//Function called to set the value of the data according to a string representing it
|
|
void CTL_Editor_EnumData::m_fn_vSetValueWithString(CStringList *pcslValueStringList)
|
|
{
|
|
ERROR_ASSERT(pcslValueStringList->GetCount() == 1);
|
|
CString csValueString = pcslValueStringList->GetHead();
|
|
|
|
m_pclCurrentValue = m_pclEnumDescriptor->m_fn_pclGetElementFromString(csValueString);
|
|
|
|
m_fn_vUpdateMotorData();
|
|
}
|
|
|
|
//************************************************************************
|
|
//Function called to look if data has been modified (by motor for example)
|
|
void CTL_Editor_EnumData::m_fn_vLookIfDataHasBeenModified()
|
|
{
|
|
m_fn_vGetMotorData();
|
|
|
|
m_pub_fn_vSetDataHasChanged(m_pclCurrentValue != m_pclOldValue);
|
|
|
|
if ( m_pub_fn_bGetDataHasChanged() )
|
|
m_pclOldValue = m_pclCurrentValue;
|
|
}
|
|
|
|
//Undo
|
|
//************************************************************************
|
|
//Function called to save the current Value (for Undo)
|
|
void CTL_Editor_EnumData::m_fn_vKeepCurrentValue()
|
|
{
|
|
m_pclKeepedValueForUndo = m_pclCurrentValue;
|
|
}
|
|
|
|
//************************************************************************
|
|
//Function called to validate Undo for the current change
|
|
void CTL_Editor_EnumData::m_fn_vRegisterUndoAction()
|
|
{
|
|
/* if ( m_pclKeepedValueForUndo->m_pub_fn_lGetValue() != m_pclCurrentValue->m_pub_fn_lGetValue() )
|
|
{
|
|
EdActors_ActorEnumDataModif *pclModif = new EdActors_ActorEnumDataModif(this,
|
|
m_pclKeepedValueForUndo,
|
|
m_pclCurrentValue);
|
|
m_pclParentActor->m_clUndoManager.AskFor(pclModif);
|
|
}
|
|
*/
|
|
}
|
|
|
|
//************************************************************************
|
|
CTL_Editor_EnumDescriptor *CTL_Editor_EnumData::m_fn_pclGetEnumDescriptor()
|
|
{
|
|
return m_pclEnumDescriptor;
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
// Method : mfn_bEqualsModifiedDataOldValue
|
|
// Date : 98/06/24
|
|
//////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
// Description :
|
|
// Author : Stegaru Cristian - CPA
|
|
//////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
// Modification :
|
|
// Date :
|
|
// By :
|
|
//////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
BOOL CTL_Editor_EnumData::mfn_bEqualsModifiedDataOldValue (CTL_Editor_Data *pModifiedData)
|
|
{
|
|
ASSERT (pModifiedData);
|
|
|
|
ERROR_ASSERT(pModifiedData->m_pub_fn_tdeGetDataType() == m_pub_fn_tdeGetDataType());
|
|
|
|
return m_pclCurrentValue == ((CTL_Editor_EnumData *)pModifiedData)->m_pclOldValue;
|
|
}
|
|
|
|
|
|
|