403 lines
12 KiB
C++
403 lines
12 KiB
C++
// Implementation for the class CMyDocument
|
|
/////////////////////////////////////////////
|
|
#include "StdAfx.h"
|
|
#define HieFriend
|
|
|
|
#include "SCR.h"
|
|
|
|
#include "IADDoc.hpp"
|
|
|
|
#include "IADVwMn.hpp"
|
|
#include "IADVwRst.hpp"
|
|
#include "_IADItrf.hpp"
|
|
#include "IADDgStp.hpp"
|
|
#include "IADLnkMt.hpp"
|
|
|
|
#include "x:\cpa\main\inc\_EditID.h"
|
|
|
|
//External Modules
|
|
#include "OAC.h"
|
|
#include "ErO.h"
|
|
//End of External Modules
|
|
|
|
long g_lCurrentId = 2000;
|
|
|
|
#ifdef _DEBUG
|
|
#define new DEBUG_NEW
|
|
#undef THIS_FILE
|
|
static char THIS_FILE[] = __FILE__;
|
|
#endif
|
|
|
|
//****************************************************************************
|
|
IAD_MyDocument::IAD_MyDocument()
|
|
{
|
|
// AfxEnableMemoryTracking(TRUE);
|
|
|
|
//Initializes editor's state
|
|
|
|
m_pclControlView = NULL;
|
|
m_pclResultView = NULL;
|
|
//BEGIN ROMTEAM Cristi Petrescu 98-05-
|
|
m_pclVariableView = NULL;
|
|
//END ROMTEAM Cristi Petrescu 98-05-
|
|
|
|
m_pri_lCurrentIndexInFoundItemsList = -1;
|
|
|
|
m_pri_p_stSelectedActor = NULL;
|
|
|
|
m_pri_tdstFindInfo.bAllLevels = TRUE;
|
|
m_pri_tdstFindInfo.lBeginningLevel = 0;
|
|
m_pri_tdstFindInfo.lEndLevel = 10;
|
|
|
|
m_pri_bDebuggerIsOn = TRUE;
|
|
|
|
m_pub_bIsDeletingTree = FALSE;
|
|
|
|
//Editor's Setup var. Init.
|
|
//...
|
|
|
|
IAD_g_fn_vInitGetStringCallBacks();
|
|
|
|
//Init. the INI file name
|
|
m_csIniFileName = M_GetMainApp()->m_csEditorDataPath + "Tools\\IA_Debug\\IA_Debug.ini";
|
|
|
|
//Reads INI file
|
|
m_fn_bReadIniFile();
|
|
|
|
//PROVISOIRE...
|
|
m_csHelpFileNameAndPath = M_GetMainApp()->m_csEditorDataPath + "Tools\\IA_Debug\\IADebug.hlp >Normale";
|
|
}
|
|
|
|
//****************************************************************************
|
|
IAD_MyDocument::~IAD_MyDocument()
|
|
{
|
|
// m_fn_bWriteIniFile();
|
|
}
|
|
|
|
|
|
//****************************************************************************
|
|
HTREEITEM IAD_MyDocument::m_pub_fn_hFindInTree(IAD_EditorTreeNode *_pclRoot,
|
|
TID_tdstFindInfo *_p_tdstFindInfo)
|
|
{
|
|
//Inits recursive search
|
|
m_pri_lCurrentIndexInFoundItemsList = 0;
|
|
m_pri_clListOfFoundNodes.RemoveAll();
|
|
m_pri_fn_vFindInOneLevelOfTree(_pclRoot, _p_tdstFindInfo);
|
|
|
|
if ( m_pri_clListOfFoundNodes.GetCount() > 0 )
|
|
{
|
|
HTREEITEM hFirstItem = m_pri_clListOfFoundNodes.GetHead()->m_pub_fn_hGetTreeItem();
|
|
|
|
m_pclResultView->m_fn_vEnableFindPrevButton(FALSE);
|
|
m_pclResultView->m_fn_vEnableFindNextButton( m_pri_clListOfFoundNodes.GetCount() > 1 );
|
|
|
|
CString csStatusText;
|
|
csStatusText.Format("Finder has selected occurence %ld on %ld", m_pri_lCurrentIndexInFoundItemsList + 1,
|
|
m_pri_clListOfFoundNodes.GetCount());
|
|
m_pclResultView->m_pub_fn_vSetFindStatusText(csStatusText);
|
|
|
|
return hFirstItem;
|
|
}
|
|
else
|
|
{
|
|
m_pclResultView->m_pub_fn_vSetFindStatusText("No occurence found in Tree");
|
|
|
|
m_pclResultView->m_fn_vEnableFindNextButton(FALSE);
|
|
m_pclResultView->m_fn_vEnableFindPrevButton(FALSE);
|
|
return NULL;
|
|
}
|
|
}
|
|
|
|
//****************************************************************************
|
|
HTREEITEM IAD_MyDocument::m_pub_fn_hFindNextInTree()
|
|
{
|
|
m_pri_lCurrentIndexInFoundItemsList ++;
|
|
|
|
POSITION pos = m_pri_clListOfFoundNodes.FindIndex(m_pri_lCurrentIndexInFoundItemsList);
|
|
HTREEITEM hNextItem = m_pri_clListOfFoundNodes.GetAt(pos)->m_pub_fn_hGetTreeItem();
|
|
|
|
m_pclResultView->m_fn_vEnableFindNextButton( m_pri_lCurrentIndexInFoundItemsList < (m_pri_clListOfFoundNodes.GetCount() - 1) );
|
|
m_pclResultView->m_fn_vEnableFindPrevButton(TRUE);
|
|
|
|
CString csStatusText;
|
|
csStatusText.Format("Finder has selected occurence %ld on %ld", m_pri_lCurrentIndexInFoundItemsList + 1,
|
|
m_pri_clListOfFoundNodes.GetCount());
|
|
m_pclResultView->m_pub_fn_vSetFindStatusText(csStatusText);
|
|
|
|
return hNextItem;
|
|
}
|
|
|
|
//****************************************************************************
|
|
HTREEITEM IAD_MyDocument::m_pub_fn_hFindPreviousInTree()
|
|
{
|
|
m_pri_lCurrentIndexInFoundItemsList --;
|
|
|
|
POSITION pos = m_pri_clListOfFoundNodes.FindIndex(m_pri_lCurrentIndexInFoundItemsList);
|
|
|
|
HTREEITEM hNextItem = m_pri_clListOfFoundNodes.GetPrev(pos)->m_pub_fn_hGetTreeItem();
|
|
|
|
m_pclResultView->m_fn_vEnableFindNextButton(TRUE);
|
|
m_pclResultView->m_fn_vEnableFindPrevButton( m_pri_lCurrentIndexInFoundItemsList > 0 );
|
|
|
|
CString csStatusText;
|
|
csStatusText.Format("Finder has selected occurence %ld on %ld", m_pri_lCurrentIndexInFoundItemsList + 1,
|
|
m_pri_clListOfFoundNodes.GetCount());
|
|
m_pclResultView->m_pub_fn_vSetFindStatusText(csStatusText);
|
|
|
|
return hNextItem;
|
|
}
|
|
|
|
//****************************************************************************
|
|
TID_tdstFindInfo *IAD_MyDocument::m_pub_p_tdstGetFindInfo()
|
|
{
|
|
return &m_pri_tdstFindInfo;
|
|
}
|
|
|
|
//****************************************************************************
|
|
struct IAD_stInternalActorDescription *IAD_MyDocument::m_pub_fn_p_stGetSelectedActor()
|
|
{
|
|
return m_pri_p_stSelectedActor;
|
|
}
|
|
|
|
//****************************************************************************
|
|
void IAD_MyDocument::m_pub_fn_vSetSelectedActor(struct IAD_stInternalActorDescription *_p_stNewSelectedActor)
|
|
{
|
|
m_pri_p_stSelectedActor = _p_stNewSelectedActor;
|
|
}
|
|
|
|
//****************************************************************************
|
|
void IAD_MyDocument::m_pub_fn_vFreeEditorTraceForActor(struct IAD_stInternalActorDescription *_p_stActorToFree)
|
|
{
|
|
if ( _p_stActorToFree != NULL )
|
|
{
|
|
if ( _p_stActorToFree->pclRoot != NULL )
|
|
{
|
|
//Frees all nodes
|
|
m_pri_fn_vFreeNodes(_p_stActorToFree->pclRoot);
|
|
|
|
_p_stActorToFree->pclRoot = NULL;
|
|
}
|
|
}
|
|
}
|
|
|
|
//****************************************************************************
|
|
void IAD_MyDocument::m_pub_fn_vFreeEditorTraceForEditedActor()
|
|
{
|
|
m_pub_fn_vFreeEditorTraceForActor(m_pri_p_stSelectedActor);
|
|
|
|
m_pri_p_stSelectedActor = NULL;
|
|
|
|
//Resets 'Find' list
|
|
m_pri_clListOfFoundNodes.RemoveAll();
|
|
m_pclResultView->m_pub_fn_vSetFindStatusText("Nothing has been searched");
|
|
|
|
//Resets Tree Control
|
|
m_pclResultView->m_pub_fn_vDeleteAllInTreeControl();
|
|
m_pclResultView->m_pub_fn_vSetStatusText("Ready !");
|
|
m_pclResultView->m_pub_fn_vSetEditedActorName("<< Nothing edited >>");
|
|
|
|
m_pclControlView->m_pub_fn_vUnselectAllItems();
|
|
}
|
|
|
|
//****************************************************************************
|
|
void IAD_MyDocument::m_pub_fn_vReInitEditorTraceForActors()
|
|
{
|
|
IAD_td_stInternalActorDescription *p_stCurrentActorDesc;
|
|
POSITION pos = m_pclControlView->m_pri_clListOfActors.GetHeadPosition();
|
|
while ( pos != NULL )
|
|
{
|
|
p_stCurrentActorDesc = m_pclControlView->m_pri_clListOfActors.GetNext(pos);
|
|
|
|
if ( p_stCurrentActorDesc->bTraceIsEnabled )
|
|
{
|
|
m_pub_fn_vFreeEditorTraceForActor(p_stCurrentActorDesc);
|
|
|
|
if ( M_GetMainApp()->m_bAutoReinitTheMap )
|
|
{
|
|
//Calls motor re-init
|
|
AI_tdstMind *p_stMind = M_pstGetMindOfBrain( ((tdstEngineObject *)p_stCurrentActorDesc->pclActor->GetStruct())->h_Brain );
|
|
ERROR_ASSERT( p_stMind != NULL );
|
|
|
|
// CG PB DEBUGGER 23/06/98 {
|
|
#ifdef ACTIVE_AIDEBUG
|
|
AIDebug_fn_vReinitTrace(p_stMind);
|
|
#endif // CG PB DEBUGGER }
|
|
}
|
|
}
|
|
}
|
|
|
|
//Resets display in Editor
|
|
m_pri_p_stSelectedActor = NULL;
|
|
|
|
//Resets 'Find' list
|
|
m_pri_clListOfFoundNodes.RemoveAll();
|
|
m_pclResultView->m_pub_fn_vSetFindStatusText("Nothing has been searched");
|
|
|
|
//Resets Tree Control
|
|
m_pclResultView->m_pub_fn_vDeleteAllInTreeControl();
|
|
m_pclResultView->m_pub_fn_vSetStatusText("Ready !");
|
|
m_pclResultView->m_pub_fn_vSetEditedActorName("<< Nothing edited >>");
|
|
|
|
m_pclControlView->m_pub_fn_vUnselectAllItems();
|
|
}
|
|
|
|
//****************************************************************************
|
|
BOOL IAD_MyDocument::m_pub_fn_bIsDebuggerOn()
|
|
{
|
|
return m_pri_bDebuggerIsOn;
|
|
}
|
|
|
|
//****************************************************************************
|
|
void IAD_MyDocument::m_pub_fn_vSetDebuggerOn(BOOL _bDebuggerOn /*= TRUE*/)
|
|
{
|
|
m_pri_bDebuggerIsOn = _bDebuggerOn;
|
|
}
|
|
|
|
///////////////////////
|
|
// Private functions //
|
|
///////////////////////
|
|
|
|
//****************************************************************************
|
|
void IAD_MyDocument::m_pri_fn_vFindInOneLevelOfTree(IAD_EditorTreeNode *_pclParentNode,
|
|
TID_tdstFindInfo *_p_tdstFindInfo)
|
|
{
|
|
IAD_EditorTreeNode *pclCurrentChildNode;
|
|
BOOL bMustGoOn = TRUE;
|
|
BOOL bMustAdd = TRUE;
|
|
POSITION pos = _pclParentNode->m_pub_fn_ptdGetListOfChildNodes()->GetHeadPosition();
|
|
while ( (pos != NULL) && (bMustGoOn) )
|
|
{
|
|
pclCurrentChildNode = _pclParentNode->m_pub_fn_ptdGetListOfChildNodes()->GetNext(pos);
|
|
|
|
if ( !_p_tdstFindInfo->bAllLevels )
|
|
{
|
|
bMustGoOn = ( pclCurrentChildNode->m_pub_fn_wGetDepth() <= _p_tdstFindInfo->lEndLevel );
|
|
bMustAdd = ( pclCurrentChildNode->m_pub_fn_wGetDepth() >= _p_tdstFindInfo->lBeginningLevel );
|
|
}
|
|
|
|
if ( bMustGoOn )
|
|
{
|
|
//Analyses current Node
|
|
if ( bMustAdd )
|
|
{
|
|
if ( m_pri_fn_bNodeRespectsFindCriteria(pclCurrentChildNode, _p_tdstFindInfo) )
|
|
m_pri_clListOfFoundNodes.AddTail(pclCurrentChildNode);
|
|
}
|
|
|
|
//Looks in childs
|
|
m_pri_fn_vFindInOneLevelOfTree(pclCurrentChildNode, _p_tdstFindInfo);
|
|
}
|
|
}
|
|
}
|
|
|
|
//****************************************************************************
|
|
BOOL IAD_MyDocument::m_pri_fn_bNodeRespectsFindCriteria(IAD_EditorTreeNode *_pclNode,
|
|
TID_tdstFindInfo *_p_tdstFindInfo)
|
|
{
|
|
BOOL bCriteriaRespected;
|
|
|
|
if ( _p_tdstFindInfo->bSimpleSearch )
|
|
{
|
|
bCriteriaRespected = m_pri_fn_bCompareStringsWithCriteria(_pclNode->m_pub_fn_csGetCompleteString(),
|
|
_p_tdstFindInfo->csSimpleSearchString,
|
|
_p_tdstFindInfo->bSimpleSearch_CaseSensitive,
|
|
_p_tdstFindInfo->bSimpleSearch_Exact);
|
|
}
|
|
else
|
|
{
|
|
//Analyses type
|
|
bCriteriaRespected = ( _pclNode->m_pub_fn_tdeGetNodeType() == _p_tdstFindInfo->eNodeType );
|
|
|
|
if ( bCriteriaRespected )
|
|
{
|
|
if ( !_p_tdstFindInfo->csName.IsEmpty() )
|
|
bCriteriaRespected = m_pri_fn_bCompareStringsWithCriteria(_pclNode->m_pub_fn_csGetNodeName(),
|
|
_p_tdstFindInfo->csName,
|
|
_p_tdstFindInfo->bName_CaseSensitive,
|
|
_p_tdstFindInfo->bName_Exact);
|
|
}
|
|
|
|
if ( bCriteriaRespected )
|
|
{
|
|
if ( !_p_tdstFindInfo->csValue.IsEmpty() )
|
|
bCriteriaRespected = m_pri_fn_bCompareStringsWithCriteria(_pclNode->m_pub_fn_csGetNodeValue(),
|
|
_p_tdstFindInfo->csValue,
|
|
_p_tdstFindInfo->bValue_CaseSensitive,
|
|
_p_tdstFindInfo->bValue_Exact);
|
|
}
|
|
|
|
if ( bCriteriaRespected )
|
|
{
|
|
if ( !_p_tdstFindInfo->csRetValue.IsEmpty() )
|
|
bCriteriaRespected = m_pri_fn_bCompareStringsWithCriteria(_pclNode->m_pub_fn_csGetNodeReturnValue(),
|
|
_p_tdstFindInfo->csRetValue,
|
|
_p_tdstFindInfo->bRetValue_CaseSensitive,
|
|
_p_tdstFindInfo->bRetValue_Exact);
|
|
}
|
|
}
|
|
|
|
return bCriteriaRespected;
|
|
}
|
|
|
|
//****************************************************************************
|
|
BOOL IAD_MyDocument::m_pri_fn_bCompareStringsWithCriteria(CString _csString1,
|
|
CString _csString2,
|
|
BOOL _bMatchCase,
|
|
BOOL _bExact)
|
|
{
|
|
BOOL bStringsRespectCriteria = FALSE;
|
|
|
|
CString csTempStr1 = _csString1;
|
|
CString csTempStr2 = _csString2;
|
|
|
|
if ( !_bMatchCase )
|
|
{
|
|
csTempStr1.MakeLower();
|
|
csTempStr2.MakeLower();
|
|
}
|
|
|
|
if ( _bExact )
|
|
bStringsRespectCriteria = ( csTempStr1.Compare(csTempStr2) == 0 );
|
|
else
|
|
bStringsRespectCriteria = ( csTempStr1.Find(csTempStr2) != -1 );
|
|
|
|
return bStringsRespectCriteria;
|
|
}
|
|
|
|
//****************************************************************************
|
|
void IAD_MyDocument::m_pub_fn_vDisplaySetup()
|
|
{
|
|
TID_Dialog_Setup SetupDial(AfxGetMainWnd());
|
|
|
|
SetupDial.DoModal();
|
|
|
|
//Saves INI file
|
|
m_fn_bWriteIniFile();
|
|
|
|
//Refreshes Tree
|
|
m_pclResultView->m_pub_fn_vRefreshTree();
|
|
}
|
|
|
|
//****************************************************************************
|
|
void IAD_MyDocument::m_pri_fn_vFreeNodes(IAD_EditorTreeNode *_pclParentNode)
|
|
{
|
|
IAD_EditorTreeNode *pclCurrentChildNode;
|
|
POSITION pos = _pclParentNode->m_pub_fn_ptdGetListOfChildNodes()->GetHeadPosition();
|
|
while ( pos != NULL )
|
|
{
|
|
pclCurrentChildNode = _pclParentNode->m_pub_fn_ptdGetListOfChildNodes()->GetNext(pos);
|
|
|
|
//Deletes childs of current child
|
|
m_pri_fn_vFreeNodes(pclCurrentChildNode);
|
|
|
|
//Deletes current childs
|
|
delete pclCurrentChildNode;
|
|
}
|
|
}
|
|
|
|
//****************************************************************************
|
|
struct AI_tdstMind_ *IAD_MyDocument::m_pub_fn_p_stGetMindOfActor(IAD_td_stInternalActorDescription *_p_stInternalActor)
|
|
{
|
|
return M_pstGetMindOfBrain( ((tdstEngineObject *)_p_stInternalActor->pclActor->GetStruct())->h_Brain );
|
|
}
|