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

363 lines
11 KiB
C++

// Classes for the Editor tree
//
// YB
//////////////////////////////////////////////
//BEGIN ROMTEAM Cristi Petrescu 98-05-
#include "StdAfx.h"
#define HieFriend
#include "IADEdttr.hpp"
#include "IADEdtTr.hpp"
#include "IADLnkMt.hpp"
#include "_IADItrf.hpp"
#include "IADVwRst.hpp"
#include "IAD_Res.h"
#include "x:/cpa/tempgrp/tia/inc/ai_intf.hpp"
#include "x:/cpa/main/inc/_EditId.h"
//External Modules
#include "OAc.h"
//End of External Modules
//END ROMTEAM Cristi Petrescu 98-05-
//*********************************************************************
//Constructor
// BEGIN ROMTEAM Cristi Petrescu 98-06-
IAD_EditorTreeNode::IAD_EditorTreeNode(enum AIDebug_tdeSectionType_ _tdeNodeType,
tdstNodeInterpret *_p_stNode,
CPA_Actor *_pclParentActor,
IAD_EditorTreeNode *_pclParentNode,
short _wDepth,
CString _csNodeType,
CString _csNodeName /*= ""*/,
CString _csValue /*= ""*/,
CString _csReturnValue /*= ""*/,
CString _csNodeAdditionnalInfo /*= ""*/,
BOOL bSubtreeBuilded /*= TRUE*/,
unsigned short uwSubtreeTraceIndex /*= -1*/)
// END ROMTEAM Cristi Petrescu 98-06-
{
m_pro_tdeNodeType = _tdeNodeType;
m_p_stMotorNode = _p_stNode;
m_pri_pclParentActor = _pclParentActor;
m_pro_pclParentNode = _pclParentNode;
m_pro_wDepth = _wDepth;
m_pro_csNodeType = _csNodeType;
m_pro_csNodeName = _csNodeName;
m_pro_csReturnValue = _csReturnValue;
m_pro_csValue = _csValue;
m_pro_csNodeAdditionnalInfo = _csNodeAdditionnalInfo;
m_pro_csCompleteString = m_pri_fn_csComputeTotalName();
m_pro_hTreeItem = NULL;
// BEGIN ROMTEAM Cristi Petrescu 98-06-
m_bSubtreeBuilded = bSubtreeBuilded;
m_uwSubtreeTraceIndex = uwSubtreeTraceIndex;
m_lNumberOfVariableValues = 0;
m_a_tdstArrayOfVariableValues = NULL;
// END ROMTEAM Cristi Petrescu 98-06-
}
//*********************************************************************
//Empty Constructor for Root
IAD_EditorTreeNode::IAD_EditorTreeNode()
{
// CG PB DEBUGGER 23/06/98 {
#ifdef ACTIVE_AIDEBUG
m_pro_tdeNodeType = (enum AIDebug_tdeSectionType_)AI_DEBUGGER_CONSTANT_FOR_TREE_ROOT_ID;
#endif // CG PB DEBUGGER }
m_pro_pclParentNode = NULL;
m_pro_wDepth = IAD_NODE_DEPTH_UNKNOWN;
m_pro_csNodeType = "** Root **";
m_pro_csNodeAdditionnalInfo = "";
// BEGIN ROMTEAM Cristi Petrescu 98-06-
m_bSubtreeBuilded = TRUE;
m_uwSubtreeTraceIndex = -1;
m_lNumberOfVariableValues = 0;
m_a_tdstArrayOfVariableValues = NULL;
// END ROMTEAM Cristi Petrescu 98-06-
}
//*********************************************************************
//Destructor
IAD_EditorTreeNode::~IAD_EditorTreeNode()
{
// BEGIN ROMTEAM Cristi Petrescu 98-06-
if (m_a_tdstArrayOfVariableValues != NULL)
free (m_a_tdstArrayOfVariableValues);
// END ROMTEAM Cristi Petrescu 98-06-
}
//////////////////////
// Public Functions //
//////////////////////
//Get/Set functions
////////////////////
//*********************************************************************
IAD_tdListOfNodes *IAD_EditorTreeNode::m_pub_fn_ptdGetListOfChildNodes()
{
return &m_pro_clListOfChildNodes;
}
//BEGIN ROMTEAM Cristi Petrescu 98-05-
//*********************************************************************
void IAD_EditorTreeNode::m_fn_vSetListOfChildNodes (IAD_tdListOfNodes *pclListOfChildNodes)
{
// cleaning
IAD_EditorTreeNode *pclWasteNode;
POSITION pos = m_pro_clListOfChildNodes . GetHeadPosition ();
while (pos != NULL)
{
pclWasteNode = m_pro_clListOfChildNodes . GetNext (pos);
// BEGIN ROMTEAM Cristi Petrescu 98-06-
if (! pclListOfChildNodes -> Find (pclWasteNode))
delete pclWasteNode;
// END ROMTEAM Cristi Petrescu 98-06-
}
m_pro_clListOfChildNodes . RemoveAll ();
// add the new ones
pos = pclListOfChildNodes -> GetHeadPosition ();
while (pos != NULL)
{
m_pro_clListOfChildNodes . AddTail (pclListOfChildNodes -> GetNext (pos));
}
}
//END ROMTEAM Cristi Petrescu 98-05-
//*********************************************************************
IAD_EditorTreeNode *IAD_EditorTreeNode::m_pub_fn_pclGetParentNode()
{
return m_pro_pclParentNode;
}
//BEGIN ROMTEAM Cristi Petrescu 98-05-
//*********************************************************************
IAD_EditorTreeNode *IAD_EditorTreeNode::m_fn_pclGetBehaviourParentNode()
{
// CG PB DEBUGGER 23/06/98 {
#ifdef ACTIVE_AIDEBUG
IAD_EditorTreeNode *pclBehaviourNode = this;
while (pclBehaviourNode && pclBehaviourNode -> m_pub_fn_tdeGetNodeType () != AIDebug_E_SecTyp_ReflexOrAI)
{
pclBehaviourNode = pclBehaviourNode -> m_pub_fn_pclGetParentNode ();
}
return pclBehaviourNode;
#else
return NULL;
#endif
// CG PB DEBUGGER
}
//*********************************************************************
void IAD_EditorTreeNode::m_fn_vAddExecutedNodes (void)
{
// CG PB DEBUGGER 23/06/98 {
#ifdef ACTIVE_AIDEBUG
// for me
if (m_pro_tdeNodeType != AIDebug_E_SecTyp_ReflexOrAI)
{
m_pri_pclParentActor -> m_fn_vSetOneExecutedNode (m_p_stMotorNode);
}
#endif
// CG PB DEBUGGER
// and for all the childs
IAD_EditorTreeNode *pclChildNode;
POSITION pos = m_pro_clListOfChildNodes . GetHeadPosition ();
while (pos != NULL)
{
pclChildNode = m_pro_clListOfChildNodes . GetNext (pos);
pclChildNode -> m_fn_vAddExecutedNodes ();
}
}
//END ROMTEAM Cristi Petrescu 98-05-
// BEGIN ROMTEAM Cristi Petrescu 98-06-
//*********************************************************************
IAD_EditorTreeNode *IAD_EditorTreeNode::m_fn_pclGetEngineLoopParentNode()
{
IAD_EditorTreeNode *pclBehaviourNode = this;
while (pclBehaviourNode && pclBehaviourNode -> m_pub_fn_tdeGetNodeType () != AIDebug_E_SecTyp_EngineLoop)
{
pclBehaviourNode = pclBehaviourNode -> m_pub_fn_pclGetParentNode ();
}
ASSERT (pclBehaviourNode);
return pclBehaviourNode;
}
// END ROMTEAM Cristi Petrescu 98-06-
//*********************************************************************
tdstNodeInterpret *IAD_EditorTreeNode::m_pub_fn_p_stGetMotorNode()
{
return m_p_stMotorNode;
}
//*********************************************************************
CPA_Actor *IAD_EditorTreeNode::m_pub_fn_pclGetParentActor()
{
return m_pri_pclParentActor;
}
//*********************************************************************
short IAD_EditorTreeNode::m_pub_fn_wGetDepth()
{
return m_pro_wDepth;
}
//*********************************************************************
HTREEITEM IAD_EditorTreeNode::m_pub_fn_hGetTreeItem()
{
return m_pro_hTreeItem;
}
//*********************************************************************
void IAD_EditorTreeNode::m_pub_fn_vSetTreeItem(HTREEITEM _hTreeItem)
{
m_pro_hTreeItem = _hTreeItem;
}
//*********************************************************************
enum AIDebug_tdeSectionType_ IAD_EditorTreeNode::m_pub_fn_tdeGetNodeType()
{
return m_pro_tdeNodeType;
}
//*********************************************************************
CString IAD_EditorTreeNode::m_pub_fn_csGetNodeType()
{
return m_pro_csNodeType;
}
//*********************************************************************
CString IAD_EditorTreeNode::m_pub_fn_csGetNodeName()
{
return m_pro_csNodeName;
}
//*********************************************************************
CString IAD_EditorTreeNode::m_pub_fn_csGetNodeValue()
{
return m_pro_csValue;
}
//*********************************************************************
CString IAD_EditorTreeNode::m_pub_fn_csGetNodeReturnValue()
{
return m_pro_csReturnValue;
}
//*********************************************************************
CString IAD_EditorTreeNode::m_pub_fn_csGetNodeAdditionnalInfo()
{
return m_pro_csNodeAdditionnalInfo;
}
//*********************************************************************
void IAD_EditorTreeNode::m_pub_fn_vSetNodeAdditionnalInfo(CString _csNewNodeInfo)
{
m_pro_csNodeAdditionnalInfo = _csNewNodeInfo;
}
//*********************************************************************
CString IAD_EditorTreeNode::m_pub_fn_csGetCompleteString()
{
return m_pro_csCompleteString;
}
//Tree construction
////////////////////
//*********************************************************************
IAD_EditorTreeNode *IAD_EditorTreeNode::m_pub_fn_pclAddChildNode(enum AIDebug_tdeSectionType_ _tdeNodeType,
tdstNodeInterpret *_p_stNode,
CPA_Actor *_pclParentActor,
CString _csNewElementType,
CString _csNewElementName,
CString _csNewElementValue,
CString _csNewElemenReturnValue,
CString _csNodeAdditionnalInfo)
{
IAD_EditorTreeNode *pclNewNode = new IAD_EditorTreeNode(_tdeNodeType,
_p_stNode,
_pclParentActor,
this,
m_pub_fn_wGetDepth() + 1,
_csNewElementType,
_csNewElementName,
_csNewElementValue,
_csNewElemenReturnValue,
_csNodeAdditionnalInfo);
//Adds to internal list
m_pro_clListOfChildNodes.AddTail(pclNewNode);
return pclNewNode;
}
// BEGIN ROMTEAM Cristi Petrescu 98-06-
// Description: this function add a new variable value to a given node
// Note: it uses dinamic reallocation of the array of values
//*********************************************************************
#define BLOCK_INCREMENT 20
void IAD_EditorTreeNode :: m_fn_vAddVariableValue (tdstGetSetParam *p_tdstValue)
{
// realloc
if (m_lNumberOfVariableValues % BLOCK_INCREMENT == 0)
m_a_tdstArrayOfVariableValues = (tdstGetSetParam *) realloc (m_a_tdstArrayOfVariableValues, (m_lNumberOfVariableValues + BLOCK_INCREMENT) * sizeof (tdstGetSetParam));
if (m_a_tdstArrayOfVariableValues)
m_a_tdstArrayOfVariableValues [m_lNumberOfVariableValues ++] = * p_tdstValue;
}
#undef BLOCK_INCREMENT
//*********************************************************************
tdstGetSetParam * IAD_EditorTreeNode :: m_fn_p_tdstGetVariableValue (long lIndex)
{
if (lIndex >= 0 && lIndex < m_lNumberOfVariableValues)
return & m_a_tdstArrayOfVariableValues [lIndex];
else
return NULL;
}
// END ROMTEAM Cristi Petrescu 98-06-
////////////////////////
// Private Functions //
////////////////////////
//*********************************************************************
CString IAD_EditorTreeNode::m_pri_fn_csComputeTotalName()
{
CString csTotalName = m_pro_csNodeType;
if ( !m_pro_csNodeName.IsEmpty() )
csTotalName += CString(" ") + m_pro_csNodeName;
if ( !m_pro_csValue.IsEmpty() )
csTotalName += CString(" = ") + m_pro_csValue;
if ( !m_pro_csReturnValue.IsEmpty() )
csTotalName += CString(" [ returns ") + m_pro_csReturnValue + " ]";
return csTotalName;
}