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

810 lines
30 KiB
C++

//MT 17/04/97 sauvegarde et chargement des ZA & ZAList
//bbb 14/03/97 tout
#include "stdafx.h"
#include "ACP_Base.h"
#include "ITF.h"
#include "TAC.h"
#include "IncMEC.h"
#define D_State_Define
#include "IncGAM.h"
#undef D_State_Define
#include "GLI.h"
#include "DPT.h"
#include "TFA.h" // Family dll include
#include "CPA_Nll.hpp"
#include "_Ainterf.hpp"
#include "EDACstrg.hpp"
//================================================================================
//================================================================================
//================================================================================
// CONSTANTS
//================================================================================
#define C_szNamesListLevelSection "AddToNamesList"
#define C_szNamesListSubSection "NamesList"
#define C_szListSubSection "AddENL"
#define C_szNameEntry "AddName"
#define C_szObjectsListEntry "ObjectsList"
#define C_szZAEntry "ZA"
#define C_szDefaultZAEntry "DefaultZA"
#define C_szZAListEntry "ZAList"
//================================================================================
//================================================================================
CPA_tdoNameList::CPA_tdoNameList
(
//EdActors_EditorActor *p_oCreatorEditorActor,
CString csObjectType,
CPA_BaseObject *p_oOwner,
BOOL bSectionExist,
CString csName
)
: CPA_SaveObject(
g_pclInterface, //creating dll
csObjectType,
E_ss_Responsible,
p_oOwner
)
{
char szFileName[SCR_CV_ui_Cfg_MaxLenName];
char szReferencedSectionName[SCR_CV_ui_Cfg_MaxLenName];
char *p_cPoint;
char *p_cSlash;
GetEditor()->SetMainWorld(p_oOwner->GetEditor()->GetMainWorld());
// Main Section
strcpy( szFileName, p_oOwner -> fn_p_szGetName() );
strcat( szFileName, "\\" );
strcat( szFileName, p_oOwner -> fn_p_szGetName() );
strcat( szFileName, ".enl" );
SCR_fn_v_RdL0_ComputeSectionName( szReferencedSectionName, szFileName, M_MAKECHAR(g_c_csActorScriptNamesListSectionName), "" );
SetSectionData ( this ) ;
SetCallBackSave ( m_fnv_CallBackSave ) ;
SetDataPath ( fn_szGetFamiliesDataPath() ) ;
SetReferencedSectionName ( szReferencedSectionName ) ;
// Name
if ( fn_eRename (csName ) != E_mc_None)
SetDefaultValidName ( ) ;
SetExistingSection ( bSectionExist ) ;
fn_vUpdateSectionName();
// Names Section
SCR_fn_v_RdL0_ComputeSectionName( szFileName, (char*)(LPCTSTR)GetReferencedSectionName(), C_szNamesListSubSection, NULL );
m_p_oNamesSection = new CPA_SectionObject( szFileName, fn_szGetFamiliesDataPath(), m_fnv_CallBackSaveNamesList );
m_p_oNamesSection -> SetSectionData( this );
m_p_oNamesSection -> SetExistingSection( SCR_fn_c_RdL0_IsSectionExists( M_MAKECHAR( m_p_oNamesSection -> GetCompleteSectionName() ) ) );
//
// Level Section
fn_zsGetActualLevelFilename( szFileName, "" );
p_cSlash = strrchr( szFileName, '\\' );
p_cPoint = strrchr( szFileName, '.' );
sprintf( p_cPoint, "\\Families\\%s\\%s.enl", p_oOwner -> fn_p_szGetName(), p_oOwner -> fn_p_szGetName() );
SCR_fn_v_RdL0_ComputeSectionName( szReferencedSectionName, p_cSlash+1, C_szNamesListLevelSection, fn_p_szGetName() );
m_p_oLevelSection = new CPA_SectionObject( szReferencedSectionName, fn_szGetLevelsDataPath(), /*m_fnv_CallBackSaveOnLevel*/m_fnv_CallBackSave );
m_p_oLevelSection -> SetSectionData( this );
m_p_oLevelSection -> SetExistingSection( SCR_fn_c_RdL0_IsSectionExists( M_MAKECHAR( m_p_oLevelSection -> GetCompleteSectionName() ) ) );
//
if ( fn_bCanBeNotified ( ) && ! fn_bSectionExists ( ) )
fn_vNotifySave ( ) ;
//m_p_oCreatorEditorActor = p_oCreatorEditorActor;
m_pEdtListHandler=new EdtListHandler ();
m_pEdtListHandler->fn_vSetNameList(this);
m_bDisplayChildObjectLists = TRUE;
m_p_oDefaultZA = NULL;
}
//================================================================================
CPA_tdoNameList::~CPA_tdoNameList()
{
delete m_pEdtListHandler;
delete m_p_oLevelSection;
}
/*==========================================================
Function name: fn_bNameListHasAVirgeField
Description: returns true if the name list has any vierge field
Input: pointer to the name list
Output: returns true or false
Author: Yann Le Tensorer
Date: february 12, 1997
Revision:
==========================================================*/
BOOL CPA_tdoNameList::m_bHasAVirgeField()
{
return ( m_ulGetNumberOfVirgeFields() >= 1 );
}
/*==========================================================
Function name: fn_bNameListHasACommonField
Description: returns true if the name list has any common field
Input: pointer to the name list
Output: returns true or false
Author: Yann Le Tensorer
Date: february 12, 1997
Revision:
==========================================================*/
BOOL CPA_tdoNameList::m_bHasACommonField()
{
return ( m_ulGetNumberOfVirgeFields() < GetCount() );
}
/*==========================================================
Function name: fn_ulGetNumberOfVirgeFields
Description: returns the number of virge fields
Input: pointer to the name list
Output: returns the number of virge field in name list
Author: Yann Le Tensorer
Date: february 24, 1997
Revision:
==========================================================*/
unsigned long CPA_tdoNameList::m_ulGetNumberOfVirgeFields()
{
tdoObjectName *Name;
POSITION pos;
unsigned long ulRetValue;
if (this == NULL)
return 0;
ulRetValue=0;
pos = GetHeadPosition();
while (pos!=0)
{
Name = GetNext(pos);
if (Name->m_eGetShareMode() == E_sm_Virge)
ulRetValue ++;
}
return ulRetValue;
}
//================================================================================
//================================================================================
//================================================================================
// CallBack Loading
//================================================================================
//================================================================================
//================================================================================
// load main section (common)
SCR_tde_Anl_ReturnValue CPA_tdoNameList::m_fne_CallBackLoad( SCR_tdst_File_Description *_p_stFile, char *_p_szName,
char *_ap_szParams[], SCR_tde_Anl_Action _eAction )
{
CPA_Family *p_oOwnerFamily;
CPA_tdoNameList *p_tdoNameList;
//EdActors_EditorActor *p_oCreatorEditorActor;
BOOL bSaveOnLevel;
SCR_M_RdL0_GetContextLong(0, 0, CPA_Family*, p_oOwnerFamily);
switch (_eAction)
{
case SCR_EA_Anl_BeginSection:
ASSERT( p_oOwnerFamily );
bSaveOnLevel = p_oOwnerFamily -> GetEditor() -> GetMainWorld() -> GetInterface() -> fn_bIsLoadingWorld();
p_oOwnerFamily -> GetEditor() -> GetMainWorld() -> GetInterface() -> SetLoadingWorld( TRUE );
p_tdoNameList = new CPA_tdoNameList(_ap_szParams[0], p_oOwnerFamily, TRUE, _p_szName);
// set
SCR_M_RdL0_SetSectionLong( 0, 0, p_tdoNameList );
SCR_M_RdL0_SetSectionLong( 0, 1, bSaveOnLevel );
SCR_M_RdL0_SetContextLong( 1, 0, p_tdoNameList );
break;
case SCR_EA_Anl_EndSection:
// get current CPA_tdoNameList
SCR_M_RdL0_GetSectionLong(0, 0, CPA_tdoNameList*, p_tdoNameList);
// get current LoadingWorld State
SCR_M_RdL0_GetSectionLong(0, 1, BOOL, bSaveOnLevel);
// if no default ZA, select first (if exists)
if( p_tdoNameList -> m_p_oDefaultZA == NULL )
{
CPA_List<CPA_BaseObject> oList;
long lNbFound = p_tdoNameList -> GetMainWorld() -> fn_lFindObjects( &oList, "", C_szZATypeName, p_tdoNameList );
if( lNbFound> 0 )
p_tdoNameList -> m_p_oDefaultZA = oList . GetHead();
}
// load level section
if( p_tdoNameList -> m_p_oLevelSection -> fn_bSectionExists() )
{
SCR_M_RdL0_SetContextLong( 1, 0, p_tdoNameList );
SCR_fnp_st_RdL0_AnalyseSection( M_MAKECHAR( p_tdoNameList -> m_p_oLevelSection -> GetCompleteSectionName() ), SCR_CDF_uw_Anl_Normal );
}
//
p_tdoNameList -> GetEditor() -> GetMainWorld() -> GetInterface() -> SetLoadingWorld( bSaveOnLevel );
break;
}
return SCR_ERV_Anl_NormalReturn;
}
//================================================================================
//================================================================================
// load main section (level)
SCR_tde_Anl_ReturnValue CPA_tdoNameList::m_fne_CallBackLoadOnLevel( SCR_tdst_File_Description *_p_stFile, char *_p_szName,
char *_ap_szParams[], SCR_tde_Anl_Action _eAction )
{
CPA_tdoNameList *p_tdoNameList;
SCR_M_RdL0_GetContextLong(0, 0, CPA_tdoNameList*, p_tdoNameList);
switch (_eAction)
{
case SCR_EA_Anl_BeginSection:
ASSERT( p_tdoNameList );
SCR_M_RdL0_SetContextLong( 1, 0, p_tdoNameList );
break;
case SCR_EA_Anl_Entry:
break;
case SCR_EA_Anl_EndSection:
break;
}
return SCR_ERV_Anl_NormalReturn;
}
//================================================================================
//================================================================================
// load Names List section (common)
SCR_tde_Anl_ReturnValue CPA_tdoNameList::m_fne_CallBackLoadNamesList( SCR_tdst_File_Description *_p_stFile, char *_p_szName,
char *_ap_szParams[], SCR_tde_Anl_Action _eAction )
{
CPA_tdoNameList *p_tdoNameList;
SCR_M_RdL0_GetContextLong(0, 0, CPA_tdoNameList*, p_tdoNameList);
switch (_eAction)
{
case SCR_EA_Anl_BeginSection:
break;
case SCR_EA_Anl_Entry:
// create tdoObjectName
if( !strcmpi(_p_szName, C_szNameEntry) )
{
tdeShareMode eMode = (tdeShareMode) atoi( _ap_szParams[1] );
tdoObjectName *p_oObjName = new tdoObjectName( p_tdoNameList, _ap_szParams[0], eMode );
p_tdoNameList -> AddTail( p_oObjName );
}
break;
case SCR_EA_Anl_EndSection:
break;
}
return SCR_ERV_Anl_NormalReturn;
}
//================================================================================
//================================================================================
// load AddENL subsection (common && level)
SCR_tde_Anl_ReturnValue CPA_tdoNameList::m_fne_CallBackLoadSubSection( SCR_tdst_File_Description *_p_stFile, char *_p_szName,
char *_ap_szParams[], SCR_tde_Anl_Action _eAction )
{
CPA_tdoNameList *p_tdoNameList;
SCR_M_RdL0_GetContextLong(0, 0, CPA_tdoNameList*, p_tdoNameList);
switch (_eAction)
{
case SCR_EA_Anl_BeginSection:
ASSERT( p_tdoNameList );
break;
case SCR_EA_Anl_Entry:
if ( !strcmpi(_p_szName, C_szObjectsListEntry) )
{
if (p_tdoNameList -> GetType () != C_szWayNameListType)
{
p_tdoNameList -> m_fnp_oCreateNewZoneList( _ap_szParams [0] );
}
}
else if ( !strcmpi(_p_szName, C_szDefaultZAEntry) )
{
p_tdoNameList -> m_p_oDefaultZA = p_tdoNameList -> m_fnp_oCreateNewZA( _ap_szParams[0] );
}
else if ( !strcmpi(_p_szName, C_szZAEntry) )
{
p_tdoNameList -> m_fnp_oCreateNewZA( _ap_szParams[0] );
}
else if ( !strcmpi(_p_szName, C_szZAListEntry) )
{
p_tdoNameList -> m_fnp_oCreateNewZAList( _ap_szParams[0] );
}
break;
case SCR_EA_Anl_EndSection:
break;
}
return SCR_ERV_Anl_NormalReturn;
}
//================================================================================
//================================================================================
//================================================================================
//================================================================================
//================================================================================
//================================================================================
// CallBack Saving
//================================================================================
//================================================================================
//================================================================================
// save main section (Common && Level)
void CPA_tdoNameList::m_fnv_CallBackSave( SCR_tdst_File_Description *_p_stFile, char *_p_szSectionName,
void *_p_vData, SCR_tde_Ntfy_Action _eAction)
{
CPA_tdoNameList *p_tdoNameList = (CPA_tdoNameList*)_p_vData;
char szActionName[SCR_CV_ui_Cfg_MaxLenName];
char szIdName[SCR_CV_ui_Cfg_MaxLenName];
char szSectionName[SCR_CV_ui_Cfg_MaxLenName];
// construct section name
SCR_fn_v_RdL0_SplitSectionName( _p_szSectionName, NULL, szActionName, szIdName );
SCR_fn_v_RdL0_ComputeSectionName( szSectionName, NULL, szActionName, szIdName );
switch ( _eAction )
{
case SCR_EA_Ntfy_AddSection:
case SCR_EA_Ntfy_RebuildSection:
// save begin section
SCR_M_SvL0_SaveBeginSection( _p_stFile, szSectionName, SCR_CC_C_Cfg_NoChar );
SCR_fn_v_SvL0_SaveParameters_MP( _p_stFile, SCR_EF_SvL0_Normal, 1, p_tdoNameList -> fn_p_szGetType() );
// End Section
SCR_M_SvL0_SaveBlankLine( _p_stFile ) ;
SCR_M_SvL0_SaveEndSection( _p_stFile, SCR_CC_C_Cfg_EOL ) ;
SCR_M_SvL0_SaveBlankLine( _p_stFile ) ;
// update SectionObject
if( ! stricmp( szActionName, C_szNamesListLevelSection ) )
p_tdoNameList -> m_p_oLevelSection -> fn_vSectionSaved();
else
p_tdoNameList -> fn_vSectionSaved();
break;
case SCR_EA_Ntfy_DeleteSection:
// update SectionObject
if( ! stricmp( szActionName, C_szNamesListLevelSection ) )
p_tdoNameList -> m_p_oLevelSection -> fn_vSectionDeleted();
else
p_tdoNameList -> fn_vSectionDeleted();
break;
}
}
//================================================================================
// save Names List Section (common)
void CPA_tdoNameList::m_fnv_CallBackSaveNamesList( SCR_tdst_File_Description *_p_stFile, char *_p_szSectionName,
void *_p_vData, SCR_tde_Ntfy_Action _eAction)
{
CPA_tdoNameList *p_tdoNameList = (CPA_tdoNameList*)_p_vData;
POSITION stPos;
switch ( _eAction )
{
case SCR_EA_Ntfy_AddSection:
case SCR_EA_Ntfy_RebuildSection:
// indent subsection
SCR_g_ui_SvL0_IndentationLevel++;
// save begin section
SCR_M_SvL0_SaveBeginSection( _p_stFile, C_szNamesListSubSection, SCR_CC_C_Cfg_EOL );
// save entries
stPos = p_tdoNameList -> GetHeadPosition () ;
while ( stPos )
{
tdoObjectName *p_oObjName = p_tdoNameList -> GetNext ( stPos ) ;
SCR_M_SvL0_SaveEntry( _p_stFile, C_szNameEntry, SCR_CC_C_Cfg_NoChar );
SCR_fn_v_SvL0_SaveParameters_MP( _p_stFile, SCR_EF_SvL0_Scanf, 3, "%s,%d",
p_oObjName -> fn_p_szGetName(),
(int)p_oObjName -> m_eGetShareMode() );
}
// End Section
SCR_M_SvL0_SaveEndSection( _p_stFile, SCR_CC_C_Cfg_EOL ) ;
p_tdoNameList -> m_p_oNamesSection -> fn_vSectionSaved();
// restore indent
SCR_g_ui_SvL0_IndentationLevel--;
break;
case SCR_EA_Ntfy_DeleteSection:
p_tdoNameList -> m_p_oNamesSection -> fn_vSectionDeleted();
break;
}
}
//================================================================================
//================================================================================
// save AddENL subsections (common && level )
void CPA_tdoNameList::m_fnv_CallBackSaveAddENL( SCR_tdst_File_Description *_p_stFile, char *_p_szSectionName,
void *_p_vData, SCR_tde_Ntfy_Action _eAction)
{
CPA_SaveObject *p_oSaveObject = (CPA_SaveObject*) _p_vData;
CPA_tdoNameList *p_tdoNameList = (CPA_tdoNameList*) p_oSaveObject -> GetOwner();
char szSectionName[SCR_CV_ui_Cfg_MaxLenName];
char szActionName[SCR_CV_ui_Cfg_MaxLenName];
char szIdName[SCR_CV_ui_Cfg_MaxLenName];
switch ( _eAction )
{
case SCR_EA_Ntfy_AddSection:
// go to end of main section
SCR_fn_v_SvL1_ToEndSection( _p_stFile );
SCR_fn_v_SvL1_ToPrevLine( _p_stFile );
case SCR_EA_Ntfy_RebuildSection:
// indent subsection
SCR_g_ui_SvL0_IndentationLevel++;
// 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 );
// entry
if( p_oSaveObject -> fn_bIsOfType( C_szZATypeName ) )
{
if( p_oSaveObject == p_tdoNameList -> m_p_oDefaultZA )
{
SCR_M_SvL0_SaveEntry( _p_stFile, C_szDefaultZAEntry, SCR_CC_C_Cfg_NoChar );
}
else
{
SCR_M_SvL0_SaveEntry( _p_stFile, C_szZAEntry, SCR_CC_C_Cfg_NoChar );
}
}
else if( p_oSaveObject -> fn_bIsOfType( C_szZAListTypeName ) )
{
SCR_M_SvL0_SaveEntry( _p_stFile, C_szZAListEntry, SCR_CC_C_Cfg_NoChar );
}
else
{
SCR_M_SvL0_SaveEntry( _p_stFile, C_szObjectsListEntry, SCR_CC_C_Cfg_NoChar );
}
SCR_fn_v_SvL0_SaveParameters_MP( _p_stFile, SCR_EF_SvL0_Normal, 1,
M_MAKECHAR( p_oSaveObject -> GetReferencedSectionName() ) );
// end section
SCR_M_SvL0_SaveEndSection( _p_stFile, SCR_CC_C_Cfg_EOL ) ;
// restore indent
SCR_g_ui_SvL0_IndentationLevel--;
break;
}
}
// MT 13/06/97 }
//================================================================================
//bbb 03/03/97 {
//find the index of the element in the list with the specified name
short CPA_tdoNameList::m_wGetIndexOfName(CString csNameToFind)
{
POSITION xPos = GetHeadPosition();
tdoObjectName *p_oObjectName;
short wIndex = 0;
while ( xPos )
{
p_oObjectName = GetNext(xPos);
if ( !csNameToFind.CompareNoCase(p_oObjectName->GetName()) ) //bbb 24/03/97
return wIndex;
wIndex ++;
}
return CB_ERR;
}
//bbb 03/03/97 }
//bbb 21/03/97 {
//================================================================================
BOOL CPA_tdoNameList::m_bIsNameValid(CString csName)
{
return !g_pclInterface->GetMainWorld()->fn_bExist(csName, "", this); //bbb 04/04/97
}
//bbb 21/03/97 }
//================================================================================
void CPA_tdoNameList::StaticInit()
{
SCR_fn_v_RdL0_RegisterCallback( M_MAKECHAR(g_c_csActorScriptNamesListSectionName), CPA_tdoNameList::m_fne_CallBackLoad, SCR_CRC_c_RdL0_ForSection);
SCR_fn_v_RdL0_RegisterCallback( C_szNamesListLevelSection, CPA_tdoNameList::m_fne_CallBackLoadOnLevel, SCR_CRC_c_RdL0_ForSection);
SCR_fn_v_RdL0_RegisterCallback( C_szListSubSection, CPA_tdoNameList::m_fne_CallBackLoadSubSection, SCR_CRC_c_RdL0_ForSection);
SCR_fn_v_RdL0_RegisterCallback( C_szNamesListSubSection, CPA_tdoNameList::m_fne_CallBackLoadNamesList, SCR_CRC_c_RdL0_ForSection);
}
//================================================================================
EdtList *CPA_tdoNameList::m_fnp_oCreateNewZoneList(char* _szSectionName)
{
EdtList *pEdtList = NULL;
void *p_vEngineList = NULL;
char szLinkName[SCR_CV_ui_Cfg_MaxLenName];
char szName[SCR_CV_ui_Cfg_MaxLenName];
SCR_tdst_Link_Table *pLinkTable;
SCR_tdst_Link_Value *pLinkValue;
// We get the link table for the list of zones
pLinkTable = & g_st3DOSLinkTable . stZDXList;
// construct Complete Name
strcpy (szLinkName, fn_szGetZdxDataPath() );
strcat (szLinkName, "\\" );
strcat( szLinkName, _szSectionName );
// We search the section name of the zone list and it MUST exist
pLinkValue = SCR_fnp_st_Link_SearchKey (pLinkTable , szLinkName);
// If not in the link table, we analyse the section, and then it MUST be in the link table
if (pLinkValue)
p_vEngineList = (void *) SCR_M_ul_Link_GetValue (pLinkValue);
else
{
SCR_tdst_Cxt_Values * pContextValue = SCR_fnp_st_RdL0_AnalyseSection (_szSectionName , SCR_CDF_uw_Anl_Normal);
p_vEngineList = (void *) SCR_M_ul_RdL0_ExtractLongValue (pContextValue , 0);
}
// Create the EdtList
SCR_fn_v_RdL0_SplitSectionName (_szSectionName,NULL,NULL,szName);
pEdtList = m_pEdtListHandler -> fn_poCreateEdtList( this, szName, p_vEngineList, TRUE);
return pEdtList;
}
//================================================================================
CPA_SaveObject *CPA_tdoNameList::m_fnp_oCreateNewZA(char* _szSectionName)
{
CPA_DLLBase *p_oActionDLL = (CPA_DLLBase*)GetMainWorld() -> GetToolDLLWithName( C_szDLLActionName );
if( p_oActionDLL )
{
tdstLoadInfo stLoadInfo;
stLoadInfo . m_p_oNameList = this;
stLoadInfo . m_szName = _szSectionName;
return (CPA_SaveObject*)p_oActionDLL -> OnQueryAction( GetEditor(), C_uiLoadZA, (LPARAM) & stLoadInfo );
}
return NULL;
}
//================================================================================
CPA_SaveObject *CPA_tdoNameList::m_fnp_oCreateNewZAList(char* _szSectionName)
{
CPA_DLLBase *p_oActionDLL = (CPA_DLLBase*)GetMainWorld() -> GetToolDLLWithName( C_szDLLActionName );
if( p_oActionDLL )
{
tdstLoadInfo stLoadInfo;
stLoadInfo . m_p_oNameList = this;
stLoadInfo . m_szName = _szSectionName;
return (CPA_SaveObject*)p_oActionDLL -> OnQueryAction( GetEditor(), C_uiLoadZAList, (LPARAM) & stLoadInfo );
}
return NULL;
}
//================================================================================
tdeMissingCriteria CPA_tdoNameList::fn_eCheckUnicity( const CString csNewName )
{
CPA_BaseObject *p_oFamily = GetOwner();
CPA_List<CPA_BaseObject> oList;
long lNbObjects;
if (csNewName.IsEmpty())
return E_mc_NoName;
//
// search NamesList 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 owner
POSITION xPos = oList . GetHeadPosition();
while( xPos )
{
CPA_BaseObject* p_oNamesList = oList . GetNext( xPos );
if( p_oNamesList -> GetOwner() == p_oFamily )
{
// find one object, invalid name
return ( E_mc_OwnerUnicity );
}
}
}
oList . RemoveAll();
// search NamesList 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_oNamesList = oList . GetNext( xPos );
if( p_oNamesList -> GetOwner() == p_oFamily )
{
// find one object, invalid name
return ( E_mc_OwnerUnicity );
}
}
}
// ok
return ( E_mc_None );
}
//================================================================================
void CPA_tdoNameList::fn_vNotifySave()
{
CPA_SaveObject::fn_vNotifySave();
}
//================================================================================
void CPA_tdoNameList::fn_vNotifyUnSave()
{
CPA_SaveObject::fn_vNotifyUnSave();
m_p_oLevelSection -> fn_vDeleteSection();
}
//================================================================================
void CPA_tdoNameList::fn_vNotifyRestore()
{
CPA_SaveObject::fn_vNotifyRestore();
m_p_oLevelSection -> fn_vRestoreSection();
}
//================================================================================
void CPA_tdoNameList::fn_vNotifyRename()
{
char szFileName[SCR_CV_ui_Cfg_MaxLenName];
char szReferencedSectionName[SCR_CV_ui_Cfg_MaxLenName];
char *p_cPoint;
char *p_cSlash;
CPA_SaveObject::fn_vNotifyRename();
// Names Section
SCR_fn_v_RdL0_ComputeSectionName( szReferencedSectionName, (char*)(LPCTSTR)GetReferencedSectionName(), C_szNamesListSubSection, NULL );
m_p_oNamesSection -> fn_vRenameSection( szReferencedSectionName );
// Level section
fn_zsGetActualLevelFilename( szFileName, "" );
p_cSlash = strrchr( szFileName, '\\' ); // = "\LevelName."
p_cPoint = strrchr( szFileName, '.' ); // = "."
sprintf( p_cPoint, "\\Families\\%s\\%s.enl", GetOwner() -> fn_p_szGetName(), GetOwner() -> fn_p_szGetName() );
SCR_fn_v_RdL0_ComputeSectionName( szReferencedSectionName, p_cSlash+1, C_szNamesListLevelSection, fn_p_szGetName() );
// p_cPoint = "\Families\FamilyName\FamilyName.enl\..."
// p_cSlash = "\LevelName\Families\FamilyName\FamilyName.enl\..."
m_p_oLevelSection -> fn_vRenameSection( szReferencedSectionName );
}
//================================================================================
void CPA_tdoNameList::fn_vUpdateReference (CPA_SaveObject *pReferencedObject)
{
char szSectionName[SCR_CV_ui_Cfg_MaxLenName];
BOOL bOnLevel = FALSE;
if( pReferencedObject == this )
{
m_p_oNamesSection -> fn_vWriteSection();
return;
}
// construct name
if( pReferencedObject -> fn_bIsOfType( C_szZATypeName ) ||
pReferencedObject -> fn_bIsOfType( C_szZAListTypeName )
)
{
// save to Common File
SCR_fn_v_RdL0_ComputeSectionName( szSectionName, (char*)(LPCTSTR)GetCompleteSectionName(), C_szListSubSection,
pReferencedObject -> fn_p_szGetType() );
}
else
{
// Way List or Zone List with virge fields
if( fn_bIsOfType( C_szWayNameListType ) )
{
// save to Levels File
SCR_fn_v_RdL0_ComputeSectionName( szSectionName, (char*)(LPCTSTR)m_p_oLevelSection -> GetCompleteSectionName(),
C_szListSubSection, fn_p_szGetType() );
bOnLevel = TRUE;
}
else if (m_bHasAVirgeField())
{
if (pReferencedObject->fn_bIsOfType(C_szEdtListTypeName) && m_bHasACommonField() &&
((EdtList *)pReferencedObject)->fn_bForModelOnly())
{
// save to _Common File
SCR_fn_v_RdL0_ComputeSectionName( szSectionName, (char*)(LPCTSTR)GetCompleteSectionName(),
C_szListSubSection, fn_p_szGetType() );
}
else
{
// save to Levels File
SCR_fn_v_RdL0_ComputeSectionName( szSectionName, (char*)(LPCTSTR)m_p_oLevelSection -> GetCompleteSectionName(),
C_szListSubSection, fn_p_szGetType() );
bOnLevel = TRUE;
}
}
else
{
// save to _Common File
SCR_fn_v_RdL0_ComputeSectionName( szSectionName, (char*)(LPCTSTR)GetCompleteSectionName(),
C_szListSubSection, fn_p_szGetType() );
}
}
strcat( szSectionName, "___" );
strcat( szSectionName, pReferencedObject -> fn_p_szGetName() );
if( pReferencedObject -> fn_bIsValid() )
{
// notify main section on level file
if( bOnLevel && ! m_p_oLevelSection -> fn_bSectionExists() )
m_p_oLevelSection -> fn_vWriteSection ( ) ;
// notify AddOrRebuild
SCR_fn_v_SvL1_RegisterNotify(szSectionName, m_fnv_CallBackSaveAddENL, pReferencedObject, SCR_EA_Ntfy_AddOrRebuildSection);
}
else
{
// notify delete if exists
SCR_fn_v_SvL1_RegisterNotify(szSectionName, m_fnv_CallBackSaveAddENL, pReferencedObject, SCR_EA_Ntfy_DeleteIfExists);
}
}
//================================================================================
//================================================================================
//================================================================================
//================================================================================
tdoObjectName::tdoObjectName(
CPA_BaseObject *p_oOwner, //the owner name list
CString csName /* = "" */,
tdeShareMode eMode /* = E_sm_None */
)
: CPA_BaseObject(
g_pclInterface, //creating dll
g_c_csObjectNameType, //type
p_oOwner //owner
)
{
if ( fn_eRename (csName ) != E_mc_None)
SetDefaultUniqueName ( ) ;
m_eShareMode = eMode;
}
//================================================================================
tdoObjectName::tdoObjectName(tdoObjectName *p_oOriginalName) :
CPA_BaseObject(
g_pclInterface, //creating dll
g_c_csObjectNameType, //type
p_oOriginalName->GetOwner() //owner
)
{
CString csName = p_oOriginalName->GetName();
if ( fn_eRename (csName ) != E_mc_None)
SetDefaultUniqueName ( ) ;
m_eShareMode = p_oOriginalName->m_eShareMode;
}
//================================================================================
tdoObjectName &tdoObjectName::operator =(CString &r_csString)
{
fn_eRename(r_csString);
return *this;
}