// Classes for the Editor tree
//
// YB
//////////////////////////////////////////////
#ifndef _IA_DEBUGGER_EDITOR_TREE_
#define _IA_DEBUGGER_EDITOR_TREE_

#if _MSC_VER >= 1000
#pragma once
#endif // _MSC_VER >= 1000

#include <afxtempl.h>

// For "IncAI.h" !!
#include "ACP_Base.h"
#include "IncAI.h"
// End For "IncAI.h" !!

typedef CList<class IAD_EditorTreeNode *, class IAD_EditorTreeNode *> IAD_tdListOfNodes;

#define IAD_NODE_DEPTH_UNKNOWN		(-1)

class CPA_Actor;

//##########################################################################################
class IAD_EditorTreeNode
{
public:
	//Constructor
	// BEGIN ROMTEAM Cristi Petrescu 98-06-
	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-

	//Empty Constructor for Root
	IAD_EditorTreeNode();

	//Destructor
	~IAD_EditorTreeNode();

//Members
public:
	// BEGIN ROMTEAM Cristi Petrescu 98-06-
	// used for partial tree construction
	BOOL			m_bSubtreeBuilded;		// is the subtree builded?
	unsigned short	m_uwSubtreeTraceIndex;	// begining of the subtree trace raw info
	unsigned short	m_lNumberOfVariableValues;
	tdstGetSetParam *m_a_tdstArrayOfVariableValues;
	// END ROMTEAM Cristi Petrescu 98-06-

protected:
	IAD_tdListOfNodes m_pro_clListOfChildNodes;
	IAD_EditorTreeNode *m_pro_pclParentNode;
	tdstNodeInterpret *m_p_stMotorNode;
	CPA_Actor *m_pri_pclParentActor;

	short m_pro_wDepth;

	CString m_pro_csNodeType;
	CString m_pro_csNodeName;
	CString m_pro_csValue;				//<--> ID
	CString m_pro_csReturnValue;	//For functions aso

	CString m_pro_csNodeAdditionnalInfo;

	CString m_pro_csCompleteString;

	enum AIDebug_tdeSectionType_ m_pro_tdeNodeType;

	HTREEITEM m_pro_hTreeItem;

private:


//Functions
public:
	//Get/Set functions
	////////////////////
	IAD_tdListOfNodes *m_pub_fn_ptdGetListOfChildNodes();
	//BEGIN ROMTEAM Cristi Petrescu 98-05-
	void m_fn_vSetListOfChildNodes (IAD_tdListOfNodes *);
	//END ROMTEAM Cristi Petrescu 98-05-

	IAD_EditorTreeNode *m_pub_fn_pclGetParentNode();
	//BEGIN ROMTEAM Cristi Petrescu 98-05-
	void m_fn_vSetParentNode (IAD_EditorTreeNode * _pclParentNode) {m_pro_pclParentNode = _pclParentNode;};
	// only works after post processation
	IAD_EditorTreeNode *m_fn_pclGetBehaviourParentNode (void);
	void m_fn_vAddExecutedNodes (void);
	//END ROMTEAM Cristi Petrescu 98-05-
	// BEGIN ROMTEAM Cristi Petrescu 98-06-
	IAD_EditorTreeNode *m_fn_pclGetEngineLoopParentNode (void);
	// END ROMTEAM Cristi Petrescu 98-06-
	
	tdstNodeInterpret *m_pub_fn_p_stGetMotorNode();
	
	CPA_Actor *m_pub_fn_pclGetParentActor();
	
	short m_pub_fn_wGetDepth();
	
	enum AIDebug_tdeSectionType_ m_pub_fn_tdeGetNodeType();
	
	HTREEITEM m_pub_fn_hGetTreeItem();
	void m_pub_fn_vSetTreeItem(HTREEITEM _hTreeItem);

	CString m_pub_fn_csGetNodeType();
	CString m_pub_fn_csGetNodeName();
	CString m_pub_fn_csGetNodeValue();
	CString m_pub_fn_csGetNodeReturnValue();

	CString m_pub_fn_csGetNodeAdditionnalInfo();
	void m_pub_fn_vSetNodeAdditionnalInfo(CString _csNewNodeInfo);

	CString m_pub_fn_csGetCompleteString();

	//Tree construction
	////////////////////
	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);
	// BEGIN ROMTEAM Cristi Petrescu 98-06-
	tdstGetSetParam * m_fn_p_tdstGetVariableValue (long);
	void m_fn_vAddVariableValue (tdstGetSetParam *);
	// END ROMTEAM Cristi Petrescu 98-06-

protected:

private:
	CString m_pri_fn_csComputeTotalName();


};



#endif //_IA_DEBUGGER_EDITOR_TREE_