reman3/Rayman_X/cpa/tempgrp/TID/Src/IADDoc.cpp

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 );
}