/*****************************************************************************
* Copyright (c) 1990-98 Digi International Inc., All Rights Reserved
* 
* This software contains proprietary and confidential information of Digi
* International Inc.  By accepting transfer of this copy, Recipient agrees
* to retain this software in confidence, to prevent disclosure to others,
* and to make no use of this software other than that for which it was
* delivered.  This is an unpublished copyrighted work of Digi International
* Inc.  Except as permitted by federal law, 17 USC 117, copying is strictly
* prohibited.
* 
* Restricted Rights Legend
*
* Use, duplication, or disclosure by the Government is subject to
* restrictions set forth in sub-paragraph (c)(1)(ii) of The Rights in
* Technical Data and Computer Software clause at DFARS 252.227-7031 or
* subparagraphs (c)(1) and (2) of the Commercial Computer Software -
* Restricted Rights at 48 CFR 52.227-19, as applicable.
*
* Digi International Inc. 11001 Bren Road East, Minnetonka, MN 55343
*
*****************************************************************************/


// TreeNode.h: interface for the CTreeNode class.
//
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_TREENODE_H__178CA973_09E1_11D2_BB03_00805F9E3135__INCLUDED_)
#define AFX_TREENODE_H__178CA973_09E1_11D2_BB03_00805F9E3135__INCLUDED_

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

class CConfigObject;

class FW_EXPORTED_CLASS CTreeNode  
{
public:
	CTreeNode() { m_strDisplayName = TEXT(""); m_pObj = NULL; }
	CTreeNode(CTreeNode const & Node) { *this = Node; }
	virtual ~CTreeNode() { m_aBranches.RemoveAll(); }

   CTreeNode & operator=(CTreeNode const & rhs)
   {
      m_strDisplayName = rhs.m_strDisplayName;
      m_pObj = rhs.m_pObj;
      m_aBranches.Copy(rhs.m_aBranches);
      return *this;
   }

   void SetDisplayName(CString const & strDisplayName) { m_strDisplayName = strDisplayName; }
   CString GetDisplayName(void) const { return m_strDisplayName; }

   void SetConfigObject(CConfigObject const * const pObj) { ASSERT(pObj != NULL); m_pObj = (CConfigObject *)pObj; }
   CConfigObject * GetConfigObject(void) const { return m_pObj; }

   INT_PTR GetBranchCount(void) const { return m_aBranches.GetSize(); }
   void AddBranch(CTreeNode & Branch) { m_aBranches.Add(Branch); }
   CTreeNode GetBranch(int const nBranch) const
   {
      ASSERT(nBranch >= 0);
      ASSERT(nBranch < m_aBranches.GetSize());
      return m_aBranches[nBranch];
   }

private:
   CString m_strDisplayName;
   CConfigObject * m_pObj;
   CArray<CTreeNode, CTreeNode&> m_aBranches;
};

#endif // !defined(AFX_TREENODE_H__178CA973_09E1_11D2_BB03_00805F9E3135__INCLUDED_)
