1506 lines
56 KiB
C++
1506 lines
56 KiB
C++
/*=============================================================================
|
|
*
|
|
* Filename: CPAZnAtv.cpp
|
|
* Version: 1.0
|
|
* Date: 14/02/97
|
|
* Author: Marc Trabucato
|
|
*
|
|
* Description: implementation of CPA_ZonesActivating class
|
|
*
|
|
*===========================================================================*/
|
|
|
|
#ifdef ACTIVE_EDITOR
|
|
|
|
#include "stdafx.h"
|
|
|
|
#include "ACP_Base.h"
|
|
#include "ITF.h"
|
|
#include "DPT.h"
|
|
|
|
#include "TAC.h"
|
|
#include "TFa.h"
|
|
#include "OAc.h"
|
|
#include "ErO.h"
|
|
|
|
#include "ACInterf.hpp"
|
|
|
|
|
|
/******************************************************************************
|
|
* Macros
|
|
******************************************************************************/
|
|
#define M_ForEachElement(p_oList,p_oElement,Pos) \
|
|
for( p_oElement = (p_oList) -> GetHeadElement( Pos ) ; \
|
|
p_oElement ; \
|
|
p_oElement = (p_oList) -> GetNextElement( Pos ) \
|
|
)
|
|
|
|
#define M_CHAR(string) ( (char*) (LPCTSTR) (string) )
|
|
|
|
/******************************************************************************
|
|
* Constants
|
|
******************************************************************************/
|
|
#define C_cNoZone 0
|
|
#define C_cZDd 1
|
|
#define C_cZDe 2
|
|
#define C_cZDm 4
|
|
#define C_cZDr 8
|
|
|
|
|
|
/*=============================================================================
|
|
*
|
|
* Description: implementation of CPA_ZdxIndex class
|
|
*
|
|
*===========================================================================*/
|
|
|
|
DeclareTemplateStatic(ZDX_tdxHandleToZdxIndexList)
|
|
DeclareTemplateStatic(ZDX_tdxHandleToZoneSetList)
|
|
DeclareTemplateStatic(ZDX_tdxHandleToCsaList)
|
|
DeclareTemplateStatic(ZDX_tdxHandleToZoneSetEncapsulation)
|
|
|
|
|
|
void del(ZDX_tdxHandleToZdxIndexList h)
|
|
{
|
|
if (M_GetMainApp()->m_bLeavingApplication)
|
|
return;
|
|
|
|
fn_vFreeZdxIndexListElement(h);
|
|
}
|
|
|
|
|
|
|
|
|
|
// ----------------------------------------------------------------------------
|
|
// Description : init engine functions
|
|
// ----------------------------------------------------------------------------
|
|
void CPA_ZdxIndex::Init()
|
|
{
|
|
CPA_EdMot<ZDX_tdxHandleToZdxIndexList>::Init(fn_p_stCreateZdxIndexListElement,NULL/*ZDX_fn_vCopyStruct_ZdxIndexListElement*/,del);
|
|
}
|
|
|
|
// ----------------------------------------------------------------------------
|
|
// Description : constructor
|
|
// ----------------------------------------------------------------------------
|
|
CPA_ZdxIndex::CPA_ZdxIndex(ZDX_tdxHandleToZdxIndexList _hEngineStruct)
|
|
:CPA_EdMot<ZDX_tdxHandleToZdxIndexList>(_hEngineStruct)
|
|
{
|
|
if( !_hEngineStruct && !GetStruct() )
|
|
SetStruct(fn_p_stCreateZdxIndexListElement());
|
|
}
|
|
|
|
// ----------------------------------------------------------------------------
|
|
// Description : destructor
|
|
// ----------------------------------------------------------------------------
|
|
CPA_ZdxIndex::~CPA_ZdxIndex()
|
|
{
|
|
}
|
|
|
|
// ----------------------------------------------------------------------------
|
|
// Description :
|
|
// ----------------------------------------------------------------------------
|
|
void CPA_ZdxIndex::mfn_vSetIndex(unsigned short usIndex)
|
|
{
|
|
if( GetStruct() )
|
|
{
|
|
//fn_vSetIndexOfZdxIndexList( GetStruct(), usIndex );
|
|
GetStruct() -> uwZdxIndex = usIndex;
|
|
}
|
|
}
|
|
|
|
// ----------------------------------------------------------------------------
|
|
// Description :
|
|
// ----------------------------------------------------------------------------
|
|
unsigned short CPA_ZdxIndex::mfn_usGetIndex(void)
|
|
{
|
|
return ( GetStruct() ? fn_uwGetIndexFromZdxIndexList( GetStruct() ) : -1 );
|
|
}
|
|
|
|
|
|
|
|
/*=============================================================================*
|
|
*=============================================================================*
|
|
*=============================================================================*
|
|
*=============================================================================*
|
|
*=============================================================================*
|
|
*
|
|
*
|
|
* Description: implementation of CPA_ZonesActivating class
|
|
*
|
|
*
|
|
*=============================================================================*
|
|
*=============================================================================*
|
|
*=============================================================================*
|
|
*=============================================================================*
|
|
*=============================================================================*/
|
|
|
|
// ----------------------------------------------------------------------------
|
|
// Description : init engine functions
|
|
// ----------------------------------------------------------------------------
|
|
void CPA_ZonesActivating::Init()
|
|
{
|
|
CPA_EdMot<ZDX_tdxHandleToZoneSetList>::Init(fn_p_stCreateZoneSetListElement,NULL,fn_vFreeZoneSetListElement);
|
|
}
|
|
|
|
/*-----------------------------------------------------------------------------
|
|
* Description : save 'NewActivationZone' section
|
|
*---------------------------------------------------------------------------*/
|
|
void CPA_ZonesActivating::fn_vCallBackSave( SCR_tdst_File_Description *_p_stFile, char *_p_szSectionName,
|
|
void *_p_vData, SCR_tde_Ntfy_Action _eAction)
|
|
{
|
|
CPA_ZonesActivating *p_oZA = (CPA_ZonesActivating*)_p_vData;
|
|
char szActionName[SCR_CV_ui_Cfg_MaxLenName];
|
|
char szIdName[SCR_CV_ui_Cfg_MaxLenName];
|
|
char szSectionName[SCR_CV_ui_Cfg_MaxLenName];
|
|
POSITION stPos;
|
|
CPA_ZdxIndex *p_oZdxIndex;
|
|
char szValue[10];
|
|
unsigned int uiLastIndent = SCR_g_ui_SvL0_IndentationLevel;
|
|
|
|
SCR_g_ui_SvL0_IndentationLevel = 1;
|
|
switch ( _eAction )
|
|
{
|
|
case SCR_EA_Ntfy_AddSection:
|
|
case SCR_EA_Ntfy_RebuildSection:
|
|
// construct section name
|
|
SCR_fn_v_RdL0_SplitSectionName( _p_szSectionName, NULL, szActionName, szIdName );
|
|
SCR_fn_v_RdL0_ComputeSectionName( szSectionName, NULL, szActionName, szIdName );
|
|
// save begin section
|
|
SCR_M_SvL0_SaveBeginSection(_p_stFile, szSectionName, SCR_CC_C_Cfg_EOL );
|
|
// save entries
|
|
M_ForEachElement( &p_oZA -> m_oListOfZDxNameIdx, p_oZdxIndex, stPos )
|
|
{
|
|
SCR_M_SvL0_SaveEntry(_p_stFile, "ZdxIndex", SCR_CC_C_Cfg_NoChar );
|
|
SCR_fn_v_SvL0_SaveParameters_MP(_p_stFile, SCR_EF_SvL0_Normal, 1, itoa( p_oZdxIndex -> mfn_usGetIndex(), szValue, 10 ) );
|
|
}
|
|
// save end section
|
|
SCR_M_SvL0_SaveEndSection(_p_stFile, SCR_CC_C_Cfg_EOL );
|
|
SCR_M_SvL0_SaveBlankLine( _p_stFile );
|
|
// update 'Existing section' bool
|
|
p_oZA -> fn_vSectionSaved();
|
|
break;
|
|
case SCR_EA_Ntfy_DeleteSection:
|
|
p_oZA -> fn_vSectionDeleted();
|
|
break;
|
|
}
|
|
SCR_g_ui_SvL0_IndentationLevel = uiLastIndent;
|
|
}
|
|
|
|
// ----------------------------------------------------------------------------
|
|
// Description : constructor (to create a new element)
|
|
// ----------------------------------------------------------------------------
|
|
CPA_ZonesActivating::CPA_ZonesActivating( CPA_EditorBase *_p_oEditor, CPA_BaseObject *_p_oOwnerNamesList, CString _csName /*=""*/)
|
|
:CPA_SaveObject( _p_oEditor, C_szZATypeName, E_ss_Responsible, _p_oOwnerNamesList, TRUE,
|
|
fn_szGetFamiliesDataPath(), CPA_ZonesActivating::fn_vCallBackSave),
|
|
CPA_EdMot<ZDX_tdxHandleToZoneSetList>()
|
|
{
|
|
ASSERT( _p_oOwnerNamesList );
|
|
// Section and File Name
|
|
char szFileName[SCR_CV_ui_Cfg_MaxLenName];
|
|
char szSectionName[SCR_CV_ui_Cfg_MaxLenName];
|
|
char szReferencedSectionName[SCR_CV_ui_Cfg_MaxLenName];
|
|
|
|
strcpy( szFileName, _p_oOwnerNamesList -> GetOwner() -> fn_p_szGetName() );
|
|
strcat( szFileName, "\\" );
|
|
strcat( szFileName, _p_oOwnerNamesList -> GetOwner() -> fn_p_szGetName() );
|
|
strcat( szFileName, ".acz" );
|
|
|
|
SCR_fn_v_RdL0_ComputeSectionName( szSectionName, szFileName, "ActivationZone", NULL );
|
|
SCR_fn_v_RdL0_ComputeSectionName( szReferencedSectionName, szSectionName, "NewActivationZone", "" );
|
|
SetReferencedSectionName( szReferencedSectionName );
|
|
SetSectionData( this );
|
|
|
|
SetExistingSection( FALSE );
|
|
// Name
|
|
if( fn_eRename( _csName ) != E_mc_None )
|
|
SetDefaultValidName( _csName );
|
|
|
|
fn_vUpdateSectionName();
|
|
|
|
// Init Datas
|
|
m_oListOfZDxNameIdx . SetEngineAnchor ( GetStruct() ? & GetStruct() -> hZdxIndexList : NULL ) ;
|
|
m_oListOfZAListUsing . RemoveAll();
|
|
//
|
|
fn_vNotifySave();
|
|
}
|
|
|
|
// ----------------------------------------------------------------------------
|
|
// Description : constructor (to encapsulate an existing engine element)
|
|
// ----------------------------------------------------------------------------
|
|
CPA_ZonesActivating::CPA_ZonesActivating(CPA_EditorBase *_p_oEditor, CPA_BaseObject *_p_oOwnerNamesList, CString _csName,
|
|
ZDX_tdxHandleToZoneSetList hZoneSetList)
|
|
:CPA_SaveObject( _p_oEditor, C_szZATypeName, E_ss_Responsible, _p_oOwnerNamesList, TRUE,
|
|
fn_szGetFamiliesDataPath(), CPA_ZonesActivating::fn_vCallBackSave),
|
|
CPA_EdMot<ZDX_tdxHandleToZoneSetList>(hZoneSetList)
|
|
{
|
|
ASSERT( _p_oOwnerNamesList );
|
|
// Section and File Name
|
|
char szFileName[SCR_CV_ui_Cfg_MaxLenName];
|
|
char szSectionName[SCR_CV_ui_Cfg_MaxLenName];
|
|
char szReferencedSectionName[SCR_CV_ui_Cfg_MaxLenName];
|
|
|
|
strcpy( szFileName, _p_oOwnerNamesList -> GetOwner() -> fn_p_szGetName() );
|
|
strcat( szFileName, "\\" );
|
|
strcat( szFileName, _p_oOwnerNamesList -> GetOwner() -> fn_p_szGetName() );
|
|
strcat( szFileName, ".acz" );
|
|
SCR_fn_v_RdL0_ComputeSectionName( szSectionName, szFileName, "ActivationZone", NULL );
|
|
SCR_fn_v_RdL0_ComputeSectionName( szReferencedSectionName, szSectionName, "NewActivationZone", "" );
|
|
SetReferencedSectionName( szReferencedSectionName );
|
|
SetSectionData( this );
|
|
|
|
SetExistingSection( TRUE );
|
|
// Name
|
|
if( fn_eRename( _csName ) != E_mc_None )
|
|
SetDefaultValidName( _csName );
|
|
|
|
fn_vUpdateSectionName();
|
|
|
|
// Init Datas
|
|
m_oListOfZDxNameIdx . SetEngineAnchor ( GetStruct() ? & GetStruct() -> hZdxIndexList : NULL ) ;
|
|
// fill list of ZdxIndex
|
|
ZDX_tdxHandleToZdxIndexList hZdxIndexList;
|
|
int iIndex = 0;
|
|
LST2_M_StaticForEachElementOf( & GetStruct() -> hZdxIndexList, hZdxIndexList, iIndex)
|
|
{
|
|
CPA_ZdxIndex *p_ZdxIndex = new CPA_ZdxIndex( hZdxIndexList );
|
|
m_oListOfZDxNameIdx . AddTail( p_ZdxIndex, FALSE );
|
|
}
|
|
|
|
m_oListOfZAListUsing . RemoveAll();
|
|
}
|
|
|
|
// ----------------------------------------------------------------------------
|
|
// Description : destructor
|
|
// ----------------------------------------------------------------------------
|
|
CPA_ZonesActivating::~CPA_ZonesActivating()
|
|
{
|
|
if (M_GetMainApp()->m_bLeavingApplication == FALSE)
|
|
{
|
|
while( ! m_oListOfZDxNameIdx . IsEmpty() )
|
|
{
|
|
delete (m_oListOfZDxNameIdx . RemoveHead());
|
|
}
|
|
|
|
while( ! m_oListOfZAListUsing . IsEmpty() )
|
|
{
|
|
free( m_oListOfZAListUsing . RemoveHead() );
|
|
}
|
|
}
|
|
}
|
|
|
|
// ----------------------------------------------------------------------------
|
|
// Description : check unicity using family
|
|
// ----------------------------------------------------------------------------
|
|
tdeMissingCriteria CPA_ZonesActivating::fn_eCheckUnicity( const CString csNewName )
|
|
{
|
|
CPA_BaseObject *p_oFamily = GetOwner() -> GetOwner();
|
|
CPA_List<CPA_BaseObject> oList;
|
|
long lNbObjects;
|
|
|
|
if (csNewName.IsEmpty())
|
|
return E_mc_NoName;
|
|
//
|
|
// search ZA with same name on invalid objects
|
|
lNbObjects = GetInvalidObjectList() -> fn_lFindObjects( & oList, csNewName, GetType() );
|
|
if( lNbObjects > 0 )
|
|
{
|
|
// find objects with same name
|
|
// search object with same family
|
|
POSITION xPos = oList . GetHeadPosition();
|
|
while( xPos )
|
|
{
|
|
CPA_BaseObject* p_oZA = oList . GetNext( xPos );
|
|
if( p_oZA -> GetOwner() -> GetOwner() == p_oFamily )
|
|
{
|
|
// find one object, invalid name
|
|
return ( E_mc_OwnerUnicity );
|
|
}
|
|
}
|
|
}
|
|
oList . RemoveAll();
|
|
// search ZA with same name on valid objects
|
|
lNbObjects = GetBaseObjectList() -> fn_lFindObjects( & oList, csNewName, GetType() );
|
|
if( lNbObjects > 0 )
|
|
{
|
|
// find objects with same name
|
|
// search object with same family
|
|
POSITION xPos = oList . GetHeadPosition();
|
|
while( xPos )
|
|
{
|
|
CPA_BaseObject* p_oZA = oList . GetNext( xPos );
|
|
if( p_oZA -> GetOwner() -> GetOwner() == p_oFamily )
|
|
{
|
|
// find one object, invalid name
|
|
return ( E_mc_OwnerUnicity );
|
|
}
|
|
}
|
|
}
|
|
// ok
|
|
return ( E_mc_None );
|
|
}
|
|
|
|
// ----------------------------------------------------------------------------
|
|
// Description : overload SetStruct function
|
|
// ----------------------------------------------------------------------------
|
|
void CPA_ZonesActivating::SetStruct(ZDX_tdxHandleToZoneSetList _hZdxIndexList)
|
|
{
|
|
CPA_EdMot<ZDX_tdxHandleToZoneSetList>::SetStruct(_hZdxIndexList);
|
|
m_oListOfZDxNameIdx . SetEngineAnchor ( GetStruct() ? & GetStruct() -> hZdxIndexList : NULL ) ;
|
|
}
|
|
|
|
// ----------------------------------------------------------------------------
|
|
// Description : set Activation of given zone
|
|
// ----------------------------------------------------------------------------
|
|
void CPA_ZonesActivating::mfn_vSetZoneActivation(unsigned short _usZoneIndex, BOOL _bActivation)
|
|
{
|
|
if ( _usZoneIndex < ((CPA_tdoNameList*)GetOwner())->GetCount() )
|
|
{
|
|
POSITION stPos = mfn_xGetPosZoneActivation( _usZoneIndex );
|
|
if( stPos && !_bActivation)
|
|
{
|
|
CPA_ZdxIndex *p_oZdxIndex = m_oListOfZDxNameIdx . GetAt( stPos );
|
|
m_oListOfZDxNameIdx . RemoveAt( stPos );
|
|
delete p_oZdxIndex;
|
|
}
|
|
else if( !stPos && _bActivation )
|
|
{
|
|
CPA_ZdxIndex *p_oZdxIndex = new CPA_ZdxIndex();
|
|
p_oZdxIndex -> mfn_vSetIndex( _usZoneIndex );
|
|
|
|
stPos = m_oListOfZDxNameIdx . GetHeadPosition();
|
|
while( stPos && m_oListOfZDxNameIdx . GetAt( stPos ) -> mfn_usGetIndex() < _usZoneIndex )
|
|
{
|
|
m_oListOfZDxNameIdx . GetNext( stPos );
|
|
}
|
|
|
|
if( stPos )
|
|
m_oListOfZDxNameIdx . InsertBefore( stPos, p_oZdxIndex );
|
|
else
|
|
m_oListOfZDxNameIdx . AddTail( p_oZdxIndex );
|
|
}
|
|
}
|
|
}
|
|
|
|
// ----------------------------------------------------------------------------
|
|
// Description : delete zone of given index and shift bigger indexes
|
|
// ----------------------------------------------------------------------------
|
|
void CPA_ZonesActivating::mfn_vRemoveZone(unsigned short _usZoneIndex)
|
|
{
|
|
POSITION xPos = m_oListOfZDxNameIdx . GetHeadPosition();
|
|
while ( xPos )
|
|
{
|
|
POSITION xCurPos = xPos;
|
|
|
|
CPA_ZdxIndex *p_oZdxIndex = m_oListOfZDxNameIdx . GetNext( xPos );
|
|
unsigned short usCurrentIdx = p_oZdxIndex -> mfn_usGetIndex();
|
|
//
|
|
if( usCurrentIdx == _usZoneIndex )
|
|
{
|
|
// remove current index
|
|
m_oListOfZDxNameIdx . RemoveAt( xCurPos );
|
|
delete p_oZdxIndex;
|
|
}
|
|
else if( usCurrentIdx > _usZoneIndex )
|
|
{
|
|
// shift current index
|
|
p_oZdxIndex -> mfn_vSetIndex( usCurrentIdx-1 );
|
|
}
|
|
}
|
|
}
|
|
|
|
// ----------------------------------------------------------------------------
|
|
// Description : insert zone of given index and shift bigger indexes
|
|
// ----------------------------------------------------------------------------
|
|
void CPA_ZonesActivating::mfn_vInsertZone(unsigned short _usZoneIndex)
|
|
{
|
|
POSITION stPos = m_oListOfZDxNameIdx . GetHeadPosition();
|
|
while ( stPos )
|
|
{
|
|
CPA_ZdxIndex *p_oZdxIndex = m_oListOfZDxNameIdx . GetNext( stPos );
|
|
unsigned short usCurrentIdx = p_oZdxIndex -> mfn_usGetIndex();
|
|
//
|
|
if( usCurrentIdx >= _usZoneIndex )
|
|
{
|
|
// shift current index
|
|
p_oZdxIndex -> mfn_vSetIndex( usCurrentIdx+1 );
|
|
}
|
|
}
|
|
}
|
|
|
|
// ----------------------------------------------------------------------------
|
|
// Description : return copy of current ZA
|
|
// ----------------------------------------------------------------------------
|
|
CPA_ZonesActivating *CPA_ZonesActivating::mfn_p_oDuplicateZA()
|
|
{
|
|
CPA_ZonesActivating *p_oNewZA = new CPA_ZonesActivating( GetEditor(), GetOwner(), "CopyOf"+GetName() );
|
|
|
|
POSITION stPos = m_oListOfZDxNameIdx . GetHeadPosition();
|
|
while( stPos )
|
|
{
|
|
CPA_ZdxIndex *p_oZdxIndex = m_oListOfZDxNameIdx . GetNext( stPos );
|
|
p_oNewZA -> mfn_vSetZoneActivation( p_oZdxIndex -> mfn_usGetIndex(), TRUE );
|
|
}
|
|
return p_oNewZA;
|
|
}
|
|
|
|
// ----------------------------------------------------------------------------
|
|
// Description : return POSITION of given zone
|
|
// ----------------------------------------------------------------------------
|
|
POSITION CPA_ZonesActivating::mfn_xGetPosZoneActivation(unsigned short _usZoneIndex)
|
|
{
|
|
POSITION stPos = m_oListOfZDxNameIdx . GetHeadPosition();
|
|
while ( stPos && ( m_oListOfZDxNameIdx . GetAt ( stPos ) -> mfn_usGetIndex() != _usZoneIndex ) )
|
|
{
|
|
m_oListOfZDxNameIdx . GetNext ( stPos );
|
|
}
|
|
return stPos;
|
|
}
|
|
|
|
// ----------------------------------------------------------------------------
|
|
// Description :
|
|
// ----------------------------------------------------------------------------
|
|
void CPA_ZonesActivating::mfn_vUsedByZAList(CPA_ZonesActivatingList *_p_oZAList, CPA_State *_p_oState)
|
|
{
|
|
if( _p_oZAList -> GetOwner() != GetOwner() )
|
|
return;
|
|
|
|
if( fn_bIsValid() )
|
|
{
|
|
POSITION xPos = mfn_xGetZAListPos( _p_oZAList, _p_oState );
|
|
|
|
if( xPos == NULL )
|
|
{
|
|
// create new
|
|
tdstZAUsed *p_stUsed = (tdstZAUsed*) malloc( sizeof(tdstZAUsed) );
|
|
p_stUsed -> p_oZAList = _p_oZAList;
|
|
p_stUsed -> p_oState = _p_oState;
|
|
m_oListOfZAListUsing . AddTail( p_stUsed );
|
|
}
|
|
}
|
|
}
|
|
|
|
// ----------------------------------------------------------------------------
|
|
// Description :
|
|
// ----------------------------------------------------------------------------
|
|
void CPA_ZonesActivating::mfn_vDontUsedByZAList(CPA_ZonesActivatingList *_p_oZAList, CPA_State *_p_oState)
|
|
{
|
|
if( _p_oZAList -> GetOwner() != GetOwner() )
|
|
return;
|
|
|
|
if( fn_bIsValid() )
|
|
{
|
|
POSITION xPos = mfn_xGetZAListPos( _p_oZAList, _p_oState );
|
|
|
|
if( xPos != NULL )
|
|
{
|
|
// delete
|
|
free( m_oListOfZAListUsing . GetAt( xPos ) );
|
|
m_oListOfZAListUsing . RemoveAt( xPos );
|
|
}
|
|
}
|
|
}
|
|
|
|
// ----------------------------------------------------------------------------
|
|
// Description :
|
|
// ----------------------------------------------------------------------------
|
|
POSITION CPA_ZonesActivating::mfn_xGetZAListPos(CPA_ZonesActivatingList *_p_oZAList, CPA_State *_p_oState)
|
|
{
|
|
POSITION xPos = m_oListOfZAListUsing . GetHeadPosition();
|
|
while( xPos )
|
|
{
|
|
tdstZAUsed *p_stUsed = m_oListOfZAListUsing . GetAt( xPos );
|
|
if( ( p_stUsed -> p_oZAList == _p_oZAList ) && ( p_stUsed -> p_oState == _p_oState ) )
|
|
break;
|
|
m_oListOfZAListUsing . GetNext( xPos );
|
|
}
|
|
return xPos;
|
|
}
|
|
|
|
/*=============================================================================*
|
|
*=============================================================================*
|
|
*=============================================================================*
|
|
*
|
|
* Description: description of CPA_ActivationState class
|
|
*
|
|
*=============================================================================*
|
|
*=============================================================================*
|
|
*=============================================================================*/
|
|
|
|
// ----------------------------------------------------------------------------
|
|
// Description : init engine functions
|
|
// ----------------------------------------------------------------------------
|
|
void CPA_ActivationState::Init()
|
|
{
|
|
CPA_EdMot<ZDX_tdxHandleToZoneSetEncapsulation>::Init(fn_p_stCreateZoneSetEncapsulation,NULL,fn_vFreeZoneSetEncapsulation);
|
|
}
|
|
|
|
// ----------------------------------------------------------------------------
|
|
// Description : constructor (new element)
|
|
// ----------------------------------------------------------------------------
|
|
CPA_ActivationState::CPA_ActivationState(CPA_ZonesActivatingList *_p_oZAList, CPA_State *_p_oState, CPA_ZonesActivating *_p_oZA,
|
|
BOOL _bSectionExists)
|
|
:CPA_SectionObject("", fn_szGetFamiliesDataPath(), CPA_ActivationState::fn_vCallBackSave, NULL, _bSectionExists),
|
|
CPA_EdMot<ZDX_tdxHandleToZoneSetEncapsulation>()
|
|
{
|
|
ASSERT( _p_oZAList );
|
|
BOOL bCanDo = ( !_p_oZA || ( _p_oZAList -> GetOwner() == _p_oZA -> GetOwner() ) );
|
|
|
|
if( !bCanDo )
|
|
{
|
|
CString csMessage1 = "Create a CPA_ActivationState (" + _p_oZAList -> GetName() + ", " + (_p_oZA ? _p_oZA -> GetName() : "NO ZA") + ", " + (_p_oState ? _p_oState -> GetName() : "NO STATE") + ")";
|
|
CString csMessage2 = "CPA_ActivationState::CPA_ActivationState";
|
|
CString csMessage3 = "ZAList and ZA haven\'t same NamesList";
|
|
|
|
ERROR_PREPARE_M( C_szTACModuleNameErO, csMessage1, csMessage2, E_ERROR_GRAVITY_FATAL, csMessage3 );
|
|
ERROR_ASSERT(0);
|
|
}
|
|
else
|
|
{
|
|
// datas
|
|
m_p_oZAList = _p_oZAList;
|
|
m_p_oZA = _p_oZA;
|
|
m_p_oState = _p_oState;
|
|
//
|
|
char szSectionName[SCR_CV_ui_Cfg_MaxLenName];
|
|
// Referenced Section Name
|
|
mfn_vComputeReferencedSectionName( szSectionName, _p_oState );
|
|
SetReferencedSectionName( szSectionName );
|
|
SetSectionData( this );
|
|
//
|
|
m_p_oState -> mfn_vAddOnZAList( m_p_oZAList, m_p_oZA );
|
|
mfn_bUpdate( NULL );
|
|
}
|
|
}
|
|
|
|
// ----------------------------------------------------------------------------
|
|
// Description : constructor (existing element)
|
|
// ----------------------------------------------------------------------------
|
|
CPA_ActivationState::CPA_ActivationState(CPA_ZonesActivatingList *_p_oZAList, ZDX_tdxHandleToZoneSetEncapsulation _hZoneSetEncapsulation /*=NULL*/)
|
|
:CPA_SectionObject("", fn_szGetFamiliesDataPath(), CPA_ActivationState::fn_vCallBackSave, NULL, TRUE),
|
|
CPA_EdMot<ZDX_tdxHandleToZoneSetEncapsulation>(_hZoneSetEncapsulation)
|
|
{
|
|
ASSERT( _p_oZAList );
|
|
ASSERT( _hZoneSetEncapsulation );
|
|
// init datas
|
|
m_p_oZAList = _p_oZAList;
|
|
m_p_oZA = NULL;
|
|
m_p_oState = NULL;
|
|
// update datas
|
|
mfn_vInitZA();
|
|
mfn_vInitState();
|
|
}
|
|
|
|
// ----------------------------------------------------------------------------
|
|
// Description : copy constructor
|
|
// ----------------------------------------------------------------------------
|
|
CPA_ActivationState::CPA_ActivationState(CPA_ActivationState &_r_oSource)
|
|
:CPA_SectionObject(_r_oSource),
|
|
CPA_EdMot<ZDX_tdxHandleToZoneSetEncapsulation>(_r_oSource . GetStruct())
|
|
{
|
|
SetExistingSection( FALSE );
|
|
SetSectionData( this );
|
|
// datas
|
|
m_p_oZAList = _r_oSource . m_p_oZAList;
|
|
m_p_oZA = _r_oSource . m_p_oZA;
|
|
m_p_oState = _r_oSource . m_p_oState;
|
|
//
|
|
m_p_oState -> mfn_vAddOnZAList( m_p_oZAList, m_p_oZA );
|
|
}
|
|
|
|
// ----------------------------------------------------------------------------
|
|
// Description : init editor ZA with engine Encapsulation ZA
|
|
// ----------------------------------------------------------------------------
|
|
void CPA_ActivationState::mfn_vInitZA(void)
|
|
{
|
|
ASSERT( m_p_oZAList );
|
|
ASSERT( GetStruct() );
|
|
|
|
if( GetStruct() -> p_stZoneSetList )
|
|
{
|
|
m_p_oZA = (CPA_ZonesActivating*)m_p_oZAList -> GetEditor() -> GetBaseObject( GetStruct() -> p_stZoneSetList, C_szZATypeName, m_p_oZAList -> GetOwner() );
|
|
if( m_p_oZA )
|
|
{
|
|
if( m_p_oZA -> GetOwner() != m_p_oZAList -> GetOwner() )
|
|
{
|
|
CString csMessage1 = "Try to Create a CPA_ActivationState";
|
|
CString csMessage2 = "CPA_ActivationState::mfn_vInitZA";
|
|
CString csMessage3 = "ZA hasn\'t same NamesList as ZAList";
|
|
|
|
ERROR_PREPARE_M( C_szTACModuleNameErO, csMessage1, csMessage2, E_ERROR_GRAVITY_FATAL, csMessage3 );
|
|
ERROR_ASSERT(0);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
CString csMessage1 = "Try to Create a CPA_ActivationState";
|
|
CString csMessage2 = "CPA_ActivationState::mfn_vInitZA";
|
|
CString csMessage3 = "Can't find editor ZA corresponding to engine ZA";
|
|
|
|
ERROR_PREPARE_M( C_szTACModuleNameErO, csMessage1, csMessage2, E_ERROR_GRAVITY_FATAL, csMessage3 );
|
|
ERROR_ASSERT(0);
|
|
}
|
|
}
|
|
else
|
|
SetExistingSection( FALSE );
|
|
}
|
|
|
|
// ----------------------------------------------------------------------------
|
|
// Description : init editor state with engine Encapsulation state
|
|
// ----------------------------------------------------------------------------
|
|
void CPA_ActivationState::mfn_vInitState(void)
|
|
{
|
|
ASSERT( m_p_oZAList );
|
|
ASSERT( GetStruct() );
|
|
|
|
tdxHandleToState hState = NULL;
|
|
CPA_Family *p_oFamily = (CPA_Family*)m_p_oZAList -> GetOwner() -> GetOwner();
|
|
unsigned short uwI;
|
|
|
|
LST2_M_StaticGetElementNumber( & p_oFamily -> GetStruct() -> hForStateArray, hState, GetStruct() -> uwIndex, uwI );
|
|
if( hState )
|
|
{
|
|
m_p_oState = (CPA_State*)m_p_oZAList -> GetEditor() -> GetBaseObject( hState, C_szStateTypeName, p_oFamily );
|
|
if( m_p_oState )
|
|
{
|
|
//
|
|
char szSectionName[SCR_CV_ui_Cfg_MaxLenName];
|
|
// Referenced Section Name
|
|
mfn_vComputeReferencedSectionName( szSectionName, m_p_oState );
|
|
SetReferencedSectionName( szSectionName );
|
|
SetSectionData( this );
|
|
//
|
|
m_p_oState -> mfn_vAddOnZAList( m_p_oZAList, m_p_oZA );
|
|
if( m_p_oZA )
|
|
m_p_oZA -> mfn_vUsedByZAList( m_p_oZAList, m_p_oState );
|
|
}
|
|
else
|
|
{
|
|
CString csMessage1 = "Try to Create a CPA_ActivationState";
|
|
CString csMessage2 = "CPA_ActivationState::mfn_vInitState";
|
|
CString csMessage3 = "Can't find editor state corresponding to engine state";
|
|
|
|
ERROR_PREPARE_M( C_szTACModuleNameErO, csMessage1, csMessage2, E_ERROR_GRAVITY_FATAL, csMessage3 );
|
|
ERROR_ASSERT(0);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
CString csMessage1 = "Try to Create a CPA_ActivationState";
|
|
CString csMessage2 = "CPA_ActivationState::mfn_vInitState";
|
|
CString csMessage3 = "tdstZoneSetEncapsulation has no state";
|
|
|
|
ERROR_PREPARE_M( C_szTACModuleNameErO, csMessage1, csMessage2, E_ERROR_GRAVITY_FATAL, csMessage3 );
|
|
ERROR_ASSERT(0);
|
|
}
|
|
}
|
|
|
|
// ----------------------------------------------------------------------------
|
|
// Description :
|
|
// ----------------------------------------------------------------------------
|
|
void CPA_ActivationState::mfn_vComputeReferencedSectionName( char * _p_szSectionName, CPA_State *_p_oState )
|
|
{
|
|
if( _p_oState != NULL)
|
|
SCR_fn_v_RdL0_ComputeSectionName( _p_szSectionName, (char*)(LPCTSTR)m_p_oZAList -> fn_csComputeReferencedSectionName(m_p_oZAList -> GetName()), "AddActivation", _p_oState -> fn_p_szGetName() );
|
|
else
|
|
SCR_fn_v_RdL0_ComputeSectionName( _p_szSectionName, (char*)(LPCTSTR)m_p_oZAList -> fn_csComputeReferencedSectionName(m_p_oZAList -> GetName()), "AddActivation", NULL );
|
|
|
|
}
|
|
// ----------------------------------------------------------------------------
|
|
// Description :
|
|
// ----------------------------------------------------------------------------
|
|
void CPA_ActivationState::mfn_vSetZA(CPA_ZonesActivating *_p_oZA)
|
|
{
|
|
BOOL bCanDo = ( !_p_oZA || ( m_p_oZAList -> GetOwner() == _p_oZA -> GetOwner() ) );
|
|
|
|
if( !bCanDo )
|
|
{
|
|
CString csMessage1 = "Set ZA to CPA_ActivationState (" + m_p_oZAList -> GetName() + ", " + (_p_oZA ? _p_oZA -> GetName() : "NO ZA" ) + ", " + (m_p_oState ? m_p_oState -> GetName() : "NO STATE" ) + ")";
|
|
CString csMessage2 = "CPA_ActivationState::mfn_vSetZA";
|
|
CString csMessage3 = "ZA hasn\'t same NamesList as ZAList";
|
|
|
|
ERROR_PREPARE_M( C_szTACModuleNameErO, csMessage1, csMessage2, E_ERROR_GRAVITY_FATAL, csMessage3);
|
|
ERROR_ASSERT(0);
|
|
return ;
|
|
}
|
|
|
|
if( m_p_oZA )
|
|
{
|
|
// previous ZA exists
|
|
if( _p_oZA && ( m_p_oZA != _p_oZA ) )
|
|
{
|
|
// ZA changed
|
|
if( GetCurrentNotification() == SCR_EA_Ntfy_DeleteSection )
|
|
fn_vRestoreSection();
|
|
else
|
|
fn_vWriteSection();
|
|
// update link
|
|
m_p_oState -> mfn_vAddOnZAList( m_p_oZAList, _p_oZA );
|
|
}
|
|
else
|
|
{
|
|
// ZA deleted
|
|
fn_vDeleteSection();
|
|
// delete previous link
|
|
m_p_oState -> mfn_vDelOnZAList( m_p_oZAList );
|
|
}
|
|
}
|
|
else
|
|
{
|
|
// no previous ZA
|
|
if( _p_oZA )
|
|
{
|
|
// new ZA
|
|
if( GetCurrentNotification() == SCR_EA_Ntfy_DeleteSection )
|
|
fn_vRestoreSection();
|
|
// Shaitan => state list in the level
|
|
else if (!m_p_oState->GetEditor()->GetInterface()->fn_bIsLoadingWorld())
|
|
// End Shaitan => state list in the level
|
|
fn_vWriteSection();
|
|
// add link
|
|
m_p_oState -> mfn_vAddOnZAList( m_p_oZAList, _p_oZA );
|
|
}
|
|
}
|
|
m_p_oZA = _p_oZA;
|
|
mfn_bUpdate( NULL );
|
|
}
|
|
|
|
// ----------------------------------------------------------------------------
|
|
// Description : update engine datas with editor datas
|
|
// ----------------------------------------------------------------------------
|
|
BOOL CPA_ActivationState::mfn_bUpdate(CPA_ZonesActivating *_p_oDefaultZA)
|
|
{
|
|
BOOL bOK = FALSE;
|
|
|
|
// update State Index
|
|
if( m_p_oState )
|
|
{
|
|
tdxHandleToState hState = (m_p_oState ? m_p_oState -> GetStruct() : NULL );
|
|
tdxHandleToState hStateTmp;
|
|
unsigned short uwIndex;
|
|
LST2_M_StaticWhatElementNumber(hState, hStateTmp, uwIndex);
|
|
GetStruct() -> uwIndex = uwIndex;
|
|
bOK = TRUE;
|
|
}
|
|
// update ZA
|
|
if( m_p_oZA )
|
|
{
|
|
GetStruct() -> p_stZoneSetList = m_p_oZA -> GetStruct();
|
|
}
|
|
else if ( _p_oDefaultZA )
|
|
{
|
|
GetStruct() -> p_stZoneSetList = _p_oDefaultZA -> GetStruct();
|
|
}
|
|
return bOK;
|
|
}
|
|
|
|
// ----------------------------------------------------------------------------
|
|
// Description :
|
|
// ----------------------------------------------------------------------------
|
|
CPA_State* CPA_ActivationState::mfn_p_oGetState(void)
|
|
{
|
|
return m_p_oState;
|
|
}
|
|
|
|
// ----------------------------------------------------------------------------
|
|
// Description :
|
|
// ----------------------------------------------------------------------------
|
|
CPA_ZonesActivating* CPA_ActivationState::mfn_p_oGetZA(void)
|
|
{
|
|
return m_p_oZA;
|
|
}
|
|
|
|
// ----------------------------------------------------------------------------
|
|
// Description :
|
|
// ----------------------------------------------------------------------------
|
|
CPA_ZonesActivatingList* CPA_ActivationState::mfn_p_oGetZAList(void)
|
|
{
|
|
return m_p_oZAList;
|
|
}
|
|
|
|
/*-----------------------------------------------------------------------------
|
|
* Description : save 'AddActivation' subsection
|
|
*---------------------------------------------------------------------------*/
|
|
void CPA_ActivationState::fn_vCallBackSave( SCR_tdst_File_Description *_p_stFile, char *_p_szSectionName,
|
|
void *_p_vData, SCR_tde_Ntfy_Action _eAction)
|
|
{
|
|
// HORROR HORROR
|
|
if( _eAction == SCR_EA_Ntfy_DeleteSection )
|
|
return;
|
|
// HORROR HORROR
|
|
|
|
|
|
CPA_ActivationState *p_oActSt = (CPA_ActivationState*)_p_vData;
|
|
CPA_State *p_oState = p_oActSt -> mfn_p_oGetState();
|
|
CPA_ZonesActivating *p_oZA = p_oActSt -> mfn_p_oGetZA();
|
|
CPA_ZonesActivatingList *p_oZAList = p_oActSt -> mfn_p_oGetZAList();
|
|
|
|
char szActionName[SCR_CV_ui_Cfg_MaxLenName];
|
|
char szIdName[SCR_CV_ui_Cfg_MaxLenName];
|
|
char szSectionName[SCR_CV_ui_Cfg_MaxLenName];
|
|
char szZARef[SCR_CV_ui_Cfg_MaxLenName];
|
|
char szBuffer[SCR_CV_ui_Cfg_MaxLenName];
|
|
|
|
|
|
switch ( _eAction )
|
|
{
|
|
case SCR_EA_Ntfy_AddSection:
|
|
case SCR_EA_Ntfy_RebuildSection:
|
|
if ( p_oZAList && p_oState && p_oZA )
|
|
{
|
|
BOOL bCanSave = ( p_oZAList -> GetOwner() == p_oZA -> GetOwner() );
|
|
|
|
if( !bCanSave )
|
|
{
|
|
CString csMessage1 = "Save CPA_ActivationState (" + p_oZAList -> GetName() + ", " + p_oZA -> GetName() + ", " + p_oState -> GetName() + ")";
|
|
CString csMessage2 = "CPA_ActivationState::fn_vCallBackSave";
|
|
CString csMessage3 = "ZA hasn\'t same NamesList as ZAList";
|
|
|
|
ERROR_PREPARE_M( C_szTACModuleNameErO, csMessage1, csMessage2, E_ERROR_GRAVITY_FATAL, csMessage3);
|
|
ERROR_ASSERT(0);
|
|
return;
|
|
}
|
|
|
|
// construct section name
|
|
SCR_fn_v_RdL0_SplitSectionName( _p_szSectionName, NULL, szActionName, szIdName );
|
|
//SCR_fn_v_RdL0_ComputeSectionName( szSectionName, NULL, szActionName, szIdName );
|
|
SCR_fn_v_RdL0_ComputeSectionName( szSectionName, NULL, szActionName, p_oState -> fn_p_szGetName() );
|
|
// indent subsection
|
|
SCR_g_ui_SvL0_IndentationLevel+=2;
|
|
// save begin section
|
|
SCR_M_SvL0_SaveBeginSection(_p_stFile, szSectionName, SCR_CC_C_Cfg_EOL );
|
|
// save entry
|
|
if( p_oState && p_oZA )
|
|
{
|
|
SCR_M_SvL0_SaveEntry(_p_stFile, "ActivationZone", SCR_CC_C_Cfg_NoChar );
|
|
// construct ZA Reference
|
|
SCR_fn_v_RdL0_ComputeSectionName( szBuffer, "*", "ActivationZone", NULL );
|
|
SCR_fn_v_RdL0_ComputeSectionName( szZARef, szBuffer, "NewActivationZone", p_oZA -> fn_p_szGetName() );
|
|
SCR_fn_v_SvL0_SaveParameters_MP(_p_stFile, SCR_EF_SvL0_Normal, 2, szZARef, M_CHAR( p_oState -> GetReferencedSectionName() ) );
|
|
}
|
|
// save end section
|
|
SCR_M_SvL0_SaveEndSection(_p_stFile, SCR_CC_C_Cfg_EOL );
|
|
// restore indent
|
|
SCR_g_ui_SvL0_IndentationLevel-=2;
|
|
// update 'Existing section' bool
|
|
p_oActSt -> fn_vSectionSaved();
|
|
// SECURE
|
|
if( strcmp( szIdName, p_oState -> fn_p_szGetName() ) )
|
|
{
|
|
p_oActSt -> mfn_vComputeReferencedSectionName( szSectionName, p_oState );
|
|
p_oActSt -> SetReferencedSectionName( szSectionName );
|
|
}
|
|
}
|
|
else
|
|
{
|
|
BOOL bPreviousExistence = p_oActSt -> fn_bSectionExists();
|
|
p_oActSt -> fn_vSectionSaved();
|
|
p_oActSt -> SetExistingSection( bPreviousExistence );
|
|
}
|
|
break;
|
|
case SCR_EA_Ntfy_DeleteSection:
|
|
p_oActSt -> fn_vSectionDeleted();
|
|
break;
|
|
}
|
|
}
|
|
/*=============================================================================*
|
|
*=============================================================================*
|
|
*=============================================================================*
|
|
*
|
|
* Description: description of CPA_ZonesActivatingList class
|
|
*
|
|
*=============================================================================*
|
|
*=============================================================================*
|
|
*=============================================================================*/
|
|
|
|
|
|
|
|
void del(ZDX_tdxHandleToCsaList h)
|
|
{
|
|
if (M_GetMainApp()->m_bLeavingApplication)
|
|
return;
|
|
|
|
fn_vFreeCsaListElement(h);
|
|
}
|
|
|
|
|
|
|
|
// ----------------------------------------------------------------------------
|
|
// Description : init engine functions
|
|
// ----------------------------------------------------------------------------
|
|
void CPA_ZonesActivatingList::Init()
|
|
{
|
|
CPA_EdMot<ZDX_tdxHandleToCsaList>::Init(fn_p_stCreateCsaListElement,NULL,del);
|
|
}
|
|
|
|
/*-----------------------------------------------------------------------------
|
|
* Description : save 'CreateNewArrayOfZoneSet' section
|
|
*---------------------------------------------------------------------------*/
|
|
void CPA_ZonesActivatingList::fn_vCallBackSave( SCR_tdst_File_Description *_p_stFile, char *_p_szSectionName,
|
|
void *_p_vData, SCR_tde_Ntfy_Action _eAction)
|
|
{
|
|
CPA_ZonesActivatingList *p_oZAList = (CPA_ZonesActivatingList*)_p_vData;
|
|
CPA_tdoNameList *p_oNmList = p_oZAList -> mfn_p_oGetZDxNameList();
|
|
char szActionName[SCR_CV_ui_Cfg_MaxLenName];
|
|
char szIdName[SCR_CV_ui_Cfg_MaxLenName];
|
|
char szSectionName[SCR_CV_ui_Cfg_MaxLenName];
|
|
CPA_tdoNameList *p_oNamesList = (CPA_tdoNameList*)p_oZAList -> GetOwner();
|
|
unsigned int uiLastIndent = SCR_g_ui_SvL0_IndentationLevel;
|
|
CPA_Family *p_oFamily = (CPA_Family*) p_oNamesList -> GetOwner();
|
|
|
|
SCR_g_ui_SvL0_IndentationLevel = 1;
|
|
switch ( _eAction )
|
|
{
|
|
case SCR_EA_Ntfy_AddSection:
|
|
case SCR_EA_Ntfy_RebuildSection:
|
|
// construct section name
|
|
SCR_fn_v_RdL0_SplitSectionName( _p_szSectionName, NULL, szActionName, szIdName );
|
|
SCR_fn_v_RdL0_ComputeSectionName( szSectionName, NULL, szActionName, szIdName );
|
|
// save begin section
|
|
SCR_M_SvL0_SaveBeginSection(_p_stFile, szSectionName, SCR_CC_C_Cfg_EOL );
|
|
// save end section
|
|
SCR_M_SvL0_SaveEndSection(_p_stFile, SCR_CC_C_Cfg_EOL );
|
|
SCR_M_SvL0_SaveBlankLine( _p_stFile );
|
|
// update 'Existing section' bool
|
|
p_oZAList -> fn_vSectionSaved();
|
|
break;
|
|
case SCR_EA_Ntfy_DeleteSection:
|
|
p_oZAList -> fn_vSectionDeleted();
|
|
break;
|
|
}
|
|
SCR_g_ui_SvL0_IndentationLevel = uiLastIndent;
|
|
}
|
|
|
|
// ----------------------------------------------------------------------------
|
|
// Description : constructor
|
|
// ----------------------------------------------------------------------------
|
|
CPA_ZonesActivatingList::CPA_ZonesActivatingList(CPA_EditorBase *_p_oEditor, CPA_BaseObject *_p_oOwnerNamesList,
|
|
CString _csName /*=""*/,
|
|
ZDX_tdxHandleToCsaList _hEngineCsaList /*=NULL*/)
|
|
:CPA_SaveObject( _p_oEditor, C_szZAListTypeName, E_ss_Responsible, _p_oOwnerNamesList, TRUE,
|
|
fn_szGetFamiliesDataPath(), CPA_ZonesActivatingList::fn_vCallBackSave),
|
|
CPA_EdMot<ZDX_tdxHandleToCsaList>(_hEngineCsaList)
|
|
{
|
|
ASSERT( _p_oOwnerNamesList );
|
|
// Section and File Name
|
|
char szFileName[SCR_CV_ui_Cfg_MaxLenName];
|
|
char szSectionName[SCR_CV_ui_Cfg_MaxLenName];
|
|
char szReferencedSectionName[SCR_CV_ui_Cfg_MaxLenName];
|
|
|
|
strcpy( szFileName, _p_oOwnerNamesList -> GetOwner() -> fn_p_szGetName() );
|
|
strcat( szFileName, "\\" );
|
|
strcat( szFileName, _p_oOwnerNamesList -> GetOwner() -> fn_p_szGetName() );
|
|
strcat( szFileName, ".acz" );
|
|
SCR_fn_v_RdL0_ComputeSectionName( szSectionName, szFileName, "ArrayOfZoneSet", NULL );
|
|
SCR_fn_v_RdL0_ComputeSectionName( szReferencedSectionName, szSectionName, "CreateNewArrayOfZoneSet", "" );
|
|
SetReferencedSectionName( szReferencedSectionName );
|
|
SetSectionData( this );
|
|
|
|
SetExistingSection( _hEngineCsaList != NULL );
|
|
//
|
|
// create engine data
|
|
if( GetStruct() == NULL )
|
|
{
|
|
SetStruct(fn_p_stCreateCsaListElement());
|
|
}
|
|
//
|
|
// Name
|
|
if( fn_eRename( _csName ) != E_mc_None )
|
|
SetDefaultValidName( _csName );
|
|
|
|
fn_vUpdateSectionName();
|
|
|
|
CPA_Family *p_oFamily = (CPA_Family*) _p_oOwnerNamesList -> GetOwner();
|
|
|
|
// update data
|
|
m_oListOfZAState . SetEngineAnchor ( GetStruct() ? & GetStruct() -> hZoneSetEncapsulationList : NULL ) ;
|
|
m_oListOfUnusedZAState . RemoveAll();
|
|
if( !_hEngineCsaList )
|
|
{
|
|
fn_vNotifySave();
|
|
// fill list with default ZA
|
|
mfn_vUpdateEditorList();
|
|
}
|
|
else
|
|
{
|
|
// existing object
|
|
ASSERT( LST2_M_StaticGetNumberOfElements( & GetStruct() -> hZoneSetEncapsulationList ) <= LST2_M_StaticGetNumberOfElements( & p_oFamily -> GetStruct() -> hForStateArray ) );
|
|
}
|
|
m_bMustBeUpdated = FALSE;
|
|
}
|
|
|
|
// ----------------------------------------------------------------------------
|
|
// Description : destructor
|
|
// ----------------------------------------------------------------------------
|
|
CPA_ZonesActivatingList::~CPA_ZonesActivatingList()
|
|
{
|
|
if (M_GetMainApp()->m_bLeavingApplication == FALSE)
|
|
{
|
|
while( ! m_oListOfZAState . IsEmpty() )
|
|
{
|
|
delete (m_oListOfZAState . RemoveHead());
|
|
}
|
|
|
|
while( ! m_oListOfUnusedZAState . IsEmpty() )
|
|
{
|
|
free( m_oListOfUnusedZAState . RemoveHead() );
|
|
}
|
|
}
|
|
}
|
|
|
|
void CPA_ZonesActivatingList::SetStruct(ZDX_tdxHandleToCsaList hCsaList)
|
|
{
|
|
CPA_EdMot<ZDX_tdxHandleToCsaList>::SetStruct(hCsaList);
|
|
m_oListOfZAState . SetEngineAnchor ( GetStruct() ? & GetStruct() -> hZoneSetEncapsulationList : NULL );
|
|
}
|
|
|
|
// ----------------------------------------------------------------------------
|
|
// Description : check unicity using family
|
|
// ----------------------------------------------------------------------------
|
|
tdeMissingCriteria CPA_ZonesActivatingList::fn_eCheckUnicity( const CString csNewName )
|
|
{
|
|
CPA_BaseObject *p_oFamily = GetOwner() -> GetOwner();
|
|
CPA_List<CPA_BaseObject> oList;
|
|
long lNbObjects;
|
|
|
|
if (csNewName.IsEmpty())
|
|
return E_mc_NoName;
|
|
|
|
// search ZAList with same name on invalid objects
|
|
lNbObjects = GetInvalidObjectList() -> fn_lFindObjects( & oList, csNewName, GetType() );
|
|
if( lNbObjects > 0 )
|
|
{
|
|
// find objects with same name
|
|
// search object with same family
|
|
POSITION xPos = oList . GetHeadPosition();
|
|
while( xPos )
|
|
{
|
|
CPA_BaseObject* p_oZAList = oList . GetNext( xPos );
|
|
if( p_oZAList -> GetOwner() -> GetOwner() == p_oFamily )
|
|
{
|
|
// find one object, invalid name
|
|
return ( E_mc_OwnerUnicity );
|
|
}
|
|
}
|
|
}
|
|
oList . RemoveAll();
|
|
// search ZAList with same name on valid objects
|
|
lNbObjects = GetBaseObjectList() -> fn_lFindObjects( & oList, csNewName, GetType() );
|
|
if( lNbObjects > 0 )
|
|
{
|
|
// find objects with same name
|
|
// search object with same family
|
|
POSITION xPos = oList . GetHeadPosition();
|
|
while( xPos )
|
|
{
|
|
CPA_BaseObject* p_oZAList = oList . GetNext( xPos );
|
|
if( p_oZAList -> GetOwner() -> GetOwner() == p_oFamily )
|
|
{
|
|
// find one object, invalid name
|
|
return ( E_mc_OwnerUnicity );
|
|
}
|
|
}
|
|
}
|
|
// ok
|
|
return ( E_mc_None );
|
|
}
|
|
|
|
// ----------------------------------------------------------------------------
|
|
// Description : overload fn_vNotify function
|
|
// ----------------------------------------------------------------------------
|
|
void CPA_ZonesActivatingList::fn_vNotifySave()
|
|
{
|
|
CPA_ActivationState *p_oStZA = NULL;
|
|
POSITION xPos;
|
|
|
|
CPA_SaveObject::fn_vNotifySave();
|
|
M_ForEachElement( & m_oListOfZAState, p_oStZA, xPos )
|
|
{
|
|
p_oStZA -> fn_vWriteSection();
|
|
}
|
|
}
|
|
|
|
// ----------------------------------------------------------------------------
|
|
// Description : overload fn_vNotify function
|
|
// ----------------------------------------------------------------------------
|
|
void CPA_ZonesActivatingList::fn_vNotifyUnSave()
|
|
{
|
|
CPA_ActivationState *p_oStZA = NULL;
|
|
POSITION xPos;
|
|
|
|
CPA_SaveObject::fn_vNotifyUnSave();
|
|
M_ForEachElement( & m_oListOfZAState, p_oStZA, xPos )
|
|
{
|
|
p_oStZA -> fn_vDeleteSection();
|
|
}
|
|
}
|
|
|
|
// ----------------------------------------------------------------------------
|
|
// Description : overload fn_vNotify function
|
|
// ----------------------------------------------------------------------------
|
|
void CPA_ZonesActivatingList::fn_vNotifyRestore()
|
|
{
|
|
CPA_ActivationState *p_oStZA = NULL;
|
|
POSITION xPos;
|
|
|
|
CPA_SaveObject::fn_vNotifyRestore();
|
|
M_ForEachElement( & m_oListOfZAState, p_oStZA, xPos )
|
|
{
|
|
p_oStZA -> fn_vRestoreSection();
|
|
}
|
|
}
|
|
|
|
// ----------------------------------------------------------------------------
|
|
// Description : overload fn_vNotify function
|
|
// ----------------------------------------------------------------------------
|
|
void CPA_ZonesActivatingList::fn_vNotifyRename()
|
|
{
|
|
CPA_ActivationState *p_oStZA = NULL;
|
|
POSITION xPos;
|
|
char szSectionName[SCR_CV_ui_Cfg_MaxLenName];
|
|
|
|
M_ForEachElement( & m_oListOfZAState, p_oStZA, xPos )
|
|
{
|
|
p_oStZA -> mfn_vComputeReferencedSectionName( szSectionName, p_oStZA -> mfn_p_oGetState() );
|
|
p_oStZA -> fn_vRenameSection( szSectionName );
|
|
}
|
|
CPA_SaveObject::fn_vNotifyRename();
|
|
}
|
|
|
|
// ----------------------------------------------------------------------------
|
|
// Description :
|
|
// ----------------------------------------------------------------------------
|
|
void CPA_ZonesActivatingList::fn_vUpdateReference ( CPA_SaveObject *_p_oObject )
|
|
{
|
|
if ( _p_oObject -> fn_bIsOfType( C_szStateTypeName ) )
|
|
{
|
|
CPA_ActivationState *p_StZA = mfn_p_oGetActivationStateFromState( (CPA_State*) _p_oObject );
|
|
p_StZA -> fn_vWriteSection();
|
|
}
|
|
}
|
|
|
|
// ----------------------------------------------------------------------------
|
|
// Description :
|
|
// ----------------------------------------------------------------------------
|
|
void CPA_ZonesActivatingList::mfn_vFillZAList(void)
|
|
{
|
|
CPA_Family *p_oFamily = (CPA_Family*)GetOwner() -> GetOwner();
|
|
|
|
// existing object
|
|
ASSERT( LST2_M_StaticGetNumberOfElements( & GetStruct() -> hZoneSetEncapsulationList ) <= LST2_M_StaticGetNumberOfElements( & p_oFamily -> GetStruct() -> hForStateArray ) );
|
|
|
|
// fill List with existing tdstZoneSetEncapsulationList
|
|
ZDX_tdxHandleToZoneSetEncapsulation hEncapsulation;
|
|
int iIndex = 0;
|
|
LST2_M_StaticForEachElementOf( & GetStruct() -> hZoneSetEncapsulationList, hEncapsulation, iIndex)
|
|
{
|
|
CPA_ActivationState *p_oActSt = new CPA_ActivationState( this, hEncapsulation );
|
|
m_oListOfZAState . AddTail( p_oActSt, FALSE ); // already on engine list
|
|
}
|
|
// fill list with default ZA
|
|
mfn_vUpdateEditorList();
|
|
}
|
|
|
|
// ----------------------------------------------------------------------------
|
|
// Description :
|
|
// ----------------------------------------------------------------------------
|
|
int CPA_ZonesActivatingList::mfn_iGetNbZDxNames(void)
|
|
{
|
|
return mfn_p_oGetZDxNameList() -> GetCount();
|
|
}
|
|
|
|
// ----------------------------------------------------------------------------
|
|
// Description : write all ActivationState using given ZA
|
|
// ----------------------------------------------------------------------------
|
|
void CPA_ZonesActivatingList::mfn_vZARenamed(CPA_ZonesActivating *_p_oZA)
|
|
{
|
|
CPA_ActivationState *p_oStZA = NULL;
|
|
POSITION xPos;
|
|
|
|
M_ForEachElement( & m_oListOfZAState, p_oStZA, xPos )
|
|
{
|
|
if( p_oStZA -> mfn_p_oGetZA() == _p_oZA )
|
|
p_oStZA -> fn_vWriteSection();
|
|
}
|
|
}
|
|
|
|
// ----------------------------------------------------------------------------
|
|
// Description :
|
|
// ----------------------------------------------------------------------------
|
|
void CPA_ZonesActivatingList::mfn_vStateRenamed(CPA_State *_p_oState)
|
|
{
|
|
CPA_ActivationState *p_oStZA = mfn_p_oGetActivationStateFromState( _p_oState );
|
|
|
|
if ( p_oStZA != NULL )
|
|
{
|
|
char szReferencedSectionName[SCR_CV_ui_Cfg_MaxLenName];
|
|
|
|
p_oStZA -> mfn_vComputeReferencedSectionName( szReferencedSectionName, _p_oState );
|
|
p_oStZA -> fn_vRenameSection( szReferencedSectionName );
|
|
}
|
|
}
|
|
|
|
// ----------------------------------------------------------------------------
|
|
// Description : append ZA associated with given state
|
|
// ----------------------------------------------------------------------------
|
|
void CPA_ZonesActivatingList::mfn_vSetZAFromState(CPA_ZonesActivating *_p_oZA, CPA_State *_p_oState)
|
|
{
|
|
ASSERT( _p_oState );
|
|
BOOL bCanDo = ( !_p_oZA || ( GetOwner() == _p_oZA -> GetOwner() ) );
|
|
|
|
if( !bCanDo )
|
|
{
|
|
CString csMessage1 = "Set ZA to State (" + GetName() + ", " + (_p_oZA ? _p_oZA -> GetName() : "NO ZA") + ", " + _p_oState -> GetName() + ")";
|
|
CString csMessage2 = "CPA_ZonesActivatingList::mfn_vSetZAFromState()";
|
|
CString csMessage3 = "ZA hasn\'t same NamesList as ZAList";
|
|
|
|
ERROR_PREPARE_M( C_szTACModuleNameErO, csMessage1, csMessage2, E_ERROR_GRAVITY_WARNING, csMessage3 );
|
|
ERROR_ASSERT(0);
|
|
return ;
|
|
}
|
|
CPA_ActivationState *p_oStZA = mfn_p_oGetActivationStateFromState( _p_oState, TRUE );
|
|
CPA_ZonesActivating *p_oPreviousZA = p_oStZA -> mfn_p_oGetZA();
|
|
|
|
if ( p_oPreviousZA != _p_oZA )
|
|
{
|
|
// delete previous ZA
|
|
if( p_oPreviousZA )
|
|
p_oPreviousZA -> mfn_vDontUsedByZAList( this, _p_oState );
|
|
// add new za
|
|
p_oStZA -> mfn_vSetZA( _p_oZA );
|
|
if( _p_oZA )
|
|
_p_oZA -> mfn_vUsedByZAList( this, _p_oState );
|
|
|
|
m_bMustBeUpdated = TRUE;
|
|
}
|
|
}
|
|
|
|
// ----------------------------------------------------------------------------
|
|
// Description : remove State from ZAList
|
|
// ----------------------------------------------------------------------------
|
|
void CPA_ZonesActivatingList::mfn_vRemoveState(CPA_State *_p_oState)
|
|
{
|
|
POSITION xPos = mfn_xGetPosActivationStateFromState( _p_oState );
|
|
if( xPos )
|
|
{
|
|
CPA_ActivationState *p_oStZA = m_oListOfZAState . GetAt( xPos );
|
|
p_oStZA -> fn_vDeleteSection();
|
|
m_oListOfZAState . RemoveAt( xPos );
|
|
m_oListOfUnusedZAState . AddTail( p_oStZA );
|
|
}
|
|
}
|
|
|
|
// ----------------------------------------------------------------------------
|
|
// Description : append ZA associated with given state
|
|
// ----------------------------------------------------------------------------
|
|
CPA_ZonesActivating *CPA_ZonesActivatingList::mfn_p_oGetZAFromState(CPA_State *_p_oState)
|
|
{
|
|
CPA_ActivationState *p_oStZA = mfn_p_oGetActivationStateFromState( _p_oState );
|
|
return p_oStZA -> mfn_p_oGetZA();
|
|
}
|
|
|
|
// ----------------------------------------------------------------------------
|
|
// Description :
|
|
// ----------------------------------------------------------------------------
|
|
CPA_ActivationState *CPA_ZonesActivatingList::mfn_p_oGetActivationStateFromState(CPA_State *_p_oState, BOOL _bWithUnused /*=FALSE*/)
|
|
{
|
|
CPA_ActivationState *p_oStZA = NULL;
|
|
POSITION xPos = mfn_xGetPosActivationStateFromState( _p_oState );
|
|
|
|
if( xPos )
|
|
return m_oListOfZAState . GetAt( xPos );
|
|
//
|
|
if( _p_oState != NULL )
|
|
{
|
|
if( _bWithUnused )
|
|
{
|
|
// search on unused
|
|
xPos = mfn_xGetPosUnusedActivationStateFromState( _p_oState );
|
|
if( xPos )
|
|
{
|
|
p_oStZA = m_oListOfUnusedZAState . GetAt( xPos );
|
|
// swap from one list to another
|
|
m_oListOfUnusedZAState . RemoveAt( xPos );
|
|
mfn_vInsertActivationState( p_oStZA );
|
|
//
|
|
return p_oStZA;
|
|
}
|
|
}
|
|
// create new StZA
|
|
p_oStZA = new CPA_ActivationState( this, _p_oState, NULL, FALSE);
|
|
mfn_vInsertActivationState( p_oStZA );
|
|
}
|
|
return p_oStZA;
|
|
}
|
|
|
|
// ----------------------------------------------------------------------------
|
|
// Description :
|
|
// ----------------------------------------------------------------------------
|
|
POSITION CPA_ZonesActivatingList::mfn_xGetPosActivationStateFromState(CPA_State *_p_oState)
|
|
{
|
|
CPA_ActivationState *p_oStZA = NULL;
|
|
POSITION xPos;
|
|
|
|
xPos = m_oListOfZAState . GetHeadPosition();
|
|
while ( xPos )
|
|
{
|
|
p_oStZA = m_oListOfZAState . GetAt( xPos );
|
|
if( p_oStZA -> mfn_p_oGetState() == _p_oState )
|
|
return xPos;
|
|
m_oListOfZAState . GetNext( xPos );
|
|
}
|
|
return NULL;
|
|
}
|
|
|
|
// ----------------------------------------------------------------------------
|
|
// Description : construct Engine List with local Map
|
|
// ----------------------------------------------------------------------------
|
|
BOOL CPA_ZonesActivatingList::mfn_bUpdate()
|
|
{
|
|
BOOL bOK = TRUE;
|
|
|
|
CPA_ZonesActivating *p_oDefaultZA = (CPA_ZonesActivating*)((CPA_tdoNameList*)GetOwner()) -> m_fnp_oGetDefaultZA();
|
|
CPA_ActivationState *p_oStZA = NULL;
|
|
POSITION xPos;
|
|
|
|
M_ForEachElement( & m_oListOfZAState, p_oStZA, xPos )
|
|
{
|
|
bOK &= p_oStZA -> mfn_bUpdate( p_oDefaultZA );
|
|
}
|
|
return bOK;
|
|
}
|
|
|
|
// ----------------------------------------------------------------------------
|
|
// Description :
|
|
// ----------------------------------------------------------------------------
|
|
void CPA_ZonesActivatingList::mfn_vUpdateEditorList(void)
|
|
{
|
|
POSITION stPos;
|
|
CPA_Family *p_oFamily = (CPA_Family*)GetOwner()->GetOwner();
|
|
CPA_ZonesActivating *p_oDefaultZA = (CPA_ZonesActivating*) ((CPA_tdoNameList*)GetOwner()) -> m_fnp_oGetDefaultZA();
|
|
/*
|
|
if( p_oDefaultZA == NULL )
|
|
return;
|
|
*/
|
|
BOOL bCanDo = ( !p_oDefaultZA || ( GetOwner() == p_oDefaultZA -> GetOwner() ) );
|
|
if( !bCanDo )
|
|
{
|
|
CString csMessage1 = "Fill Empty states with default ZA : default ZA error ( ZAList : " + GetName() + ", ZA : " + p_oDefaultZA -> GetName() + ")";
|
|
CString csMessage2 = "CPA_ZonesActivatingList::mfn_vSetZAFromState()";
|
|
CString csMessage3 = "ZA hasn\'t same NamesList as ZAList";
|
|
|
|
ERROR_PREPARE_M( C_szTACModuleNameErO, csMessage1, csMessage2, E_ERROR_GRAVITY_FATAL, csMessage3 );
|
|
ERROR_ASSERT( 0 );
|
|
return ;
|
|
}
|
|
// fill engine list of ZA
|
|
stPos = p_oFamily -> m_oListOfStates . GetHeadPosition();
|
|
while ( stPos )
|
|
{
|
|
CPA_State *p_oState = p_oFamily -> m_oListOfStates . GetNext( stPos );
|
|
CPA_ZonesActivating *p_oZA = mfn_p_oGetZAFromState( p_oState );
|
|
|
|
if( p_oZA == NULL )
|
|
mfn_vSetZAFromState( p_oDefaultZA, p_oState );
|
|
}
|
|
}
|
|
|
|
// ----------------------------------------------------------------------------
|
|
// Description : return a copy of ZA List
|
|
// ----------------------------------------------------------------------------
|
|
CPA_ZonesActivatingList *CPA_ZonesActivatingList::mfn_p_oDuplicateZAList()
|
|
{
|
|
CPA_ZonesActivatingList *p_oNewZAList = new CPA_ZonesActivatingList( GetEditor(), GetOwner(), "CopyOf"+GetName() );
|
|
CPA_ActivationState *p_oStZA = NULL;
|
|
POSITION xPos;
|
|
|
|
M_ForEachElement( & m_oListOfZAState, p_oStZA, xPos )
|
|
{
|
|
p_oNewZAList -> mfn_vSetZAFromState( p_oStZA -> mfn_p_oGetZA(), p_oStZA -> mfn_p_oGetState() );
|
|
}
|
|
return p_oNewZAList;
|
|
}
|
|
|
|
// ----------------------------------------------------------------------------
|
|
// Description : find CPA_ZoneActivating using given ZdxIndexList
|
|
// ----------------------------------------------------------------------------
|
|
CPA_ZonesActivating *CPA_ZonesActivatingList::mfn_p_oGetZAWithEngineZdxIndexList(LST2_M_StaticAnchorDeclaration(ZDX_tdxHandleToZdxIndexList) hEngineZdxIndexListList, BOOL _bUseOwner /*=TRUE*/)
|
|
{
|
|
CPA_List<CPA_BaseObject> oList;
|
|
|
|
if( _bUseOwner )
|
|
GetEditor() -> fn_lFindObjects( &oList, "", C_szZATypeName, GetOwner() );
|
|
else
|
|
GetEditor() -> fn_lFindObjects( &oList, "", C_szZATypeName );
|
|
|
|
POSITION xPos = oList . GetHeadPosition();
|
|
while ( xPos )
|
|
{
|
|
CPA_ZonesActivating *p_oZA = (CPA_ZonesActivating*) oList . GetNext( xPos );
|
|
if( p_oZA && !memcmp( & p_oZA -> GetStruct() -> hZdxIndexList, &hEngineZdxIndexListList, sizeof hEngineZdxIndexListList ) )
|
|
return p_oZA;
|
|
}
|
|
return NULL;
|
|
}
|
|
|
|
// ----------------------------------------------------------------------------
|
|
// Description : return existing Default ZA, or search next default ZA
|
|
// ----------------------------------------------------------------------------
|
|
CPA_ZonesActivating *CPA_ZonesActivating::mfn_p_oGetDefaultZA(void)
|
|
{
|
|
CPA_ZonesActivating *p_oZAResult;
|
|
CPA_List<CPA_BaseObject> oList;
|
|
|
|
p_oZAResult = (CPA_ZonesActivating*) ((CPA_tdoNameList*)GetOwner()) -> m_fnp_oGetDefaultZA() ;
|
|
if( p_oZAResult != NULL )
|
|
return p_oZAResult;
|
|
|
|
if( GetEditor() -> fn_lFindObjects(&oList, "", C_szZATypeName, GetOwner()) > 0 )
|
|
{
|
|
return (CPA_ZonesActivating*) oList . GetHead();
|
|
}
|
|
return NULL;
|
|
}
|
|
|
|
// ----------------------------------------------------------------------------
|
|
// Description :
|
|
// ----------------------------------------------------------------------------
|
|
POSITION CPA_ZonesActivatingList::mfn_xGetPosUnusedActivationStateFromState(CPA_State *_p_oState)
|
|
{
|
|
CPA_ActivationState *p_oStZA = NULL;
|
|
POSITION xPos;
|
|
|
|
xPos = m_oListOfUnusedZAState . GetHeadPosition();
|
|
while ( xPos )
|
|
{
|
|
p_oStZA = m_oListOfUnusedZAState . GetAt( xPos );
|
|
if( p_oStZA -> mfn_p_oGetState() == _p_oState )
|
|
return xPos;
|
|
m_oListOfUnusedZAState . GetNext( xPos );
|
|
}
|
|
return NULL;
|
|
}
|
|
|
|
void CPA_ZonesActivatingList::mfn_vInsertActivationState(CPA_ActivationState *_p_oStZA, BOOL _bEngine /*=TRUE*/)
|
|
{
|
|
if( _p_oStZA )
|
|
{
|
|
unsigned short uwIndex = _p_oStZA -> GetStruct() -> uwIndex;
|
|
CPA_ActivationState *p_oCurrentStZA;
|
|
POSITION xPos = m_oListOfZAState . GetTailPosition();
|
|
while( xPos )
|
|
{
|
|
p_oCurrentStZA = m_oListOfZAState . GetAt( xPos );
|
|
if( p_oCurrentStZA -> GetStruct() -> uwIndex < uwIndex )
|
|
{
|
|
m_oListOfZAState . InsertAfter( xPos , _p_oStZA , _bEngine );
|
|
break;
|
|
}
|
|
m_oListOfZAState . GetPrev( xPos );
|
|
}
|
|
if( xPos == NULL )
|
|
{
|
|
m_oListOfZAState . AddTail( _p_oStZA , _bEngine );
|
|
}
|
|
}
|
|
}
|
|
|
|
#endif // ACTIVE_EDITORee
|