text: /* 
   *  VirtualTreeNode.cpp - Virtual Tree function implementation
   *  World Editor
   *  Copyright (c) 1997, CroTeam. All rights reserved.
   */
  
  #include "stdafx.h"
  #include "WorldEditor.h"
  #include "VirtualTreeNode.h"
  
  CVirtualTreeNode::CVirtualTreeNode()
  {
    vtn_pTextureData = NULL;
    vtn_bmBrowsingMode = BM_ICONS_MEDIUM;
    vtn_bSelected = FALSE;
  }
  
  CVirtualTreeNode::~CVirtualTreeNode()
  {
    FORDELETELIST( CVirtualTreeNode, vtn_lnInDirectory, vtn_lhChildren, litDel)
    {
      delete &litDel.Current();
    }
  }
  
  INDEX _iTabs=0;
  void CVirtualTreeNode::Dump(CTStream *pFile)
  {
    for( INDEX iTab=0; iTab<_iTabs; iTab++)
    {
      pFile->PutString_t("  ");
    }
    if( vtn_bIsDirectory)
    {
      CTString strDirectory;
      strDirectory.PrintF("Directory: %s", vtn_strName);
      pFile->PutLine_t(strDirectory);
      _iTabs++;
      
      FOREACHINLIST(CVirtualTreeNode, vtn_lnInDirectory, vtn_lhChildren, it)
      {
        it->Dump(pFile);
      }
      _iTabs--;
    }
    else
    {
      CTString strItem;
      strItem.PrintF("Item: %s", vtn_fnItem);
      pFile->PutLine_t(strItem);
    }
  }
  
  void CVirtualTreeNode::Read_t( CTStream *pFile, CVirtualTreeNode* pParent)
  {
    if( pParent != NULL)
    {
      pParent->vtn_lhChildren.AddTail( vtn_lnInDirectory);
    }
    vnt_pvtnParent = pParent;
    pFile->Read_t( &vtn_bIsDirectory, sizeof(BOOL));
    
    if( vtn_bIsDirectory)
    {
      pFile->Read_t( &vtn_itIconType, sizeof(INDEX));     // Symbolic icons for directories
      pFile->Read_t( &vtn_bmBrowsingMode, sizeof(INDEX)); // Icons (and size) or descriptions
      *pFile >> vtn_strName;
      INDEX iDirEntries;
      pFile->Read_t( &iDirEntries, sizeof(INDEX));
      for( INDEX i=0; i<iDirEntries; i++)
      {
        CVirtualTreeNode *pVTN = new CVirtualTreeNode;
        pVTN->Read_t( pFile, this);
      }
    }
    else
    {
      pFile->Read_t( &vtn_bSelected, sizeof(BOOL));       // Item's selection bit
      *pFile >> vtn_strName;
      *pFile >> vtn_fnItem;
    }
  }
  
  void CVirtualTreeNode::Write_t( CTStream *pFile)
  {
    *pFile << (INDEX) vtn_bIsDirectory;
    if( vtn_bIsDirectory)
    {
      pFile->Write_t( &vtn_itIconType, sizeof(INDEX));
      pFile->Write_t( &vtn_bmBrowsingMode, sizeof(INDEX));
      *pFile << vtn_strName;
      INDEX iDirEntries = vtn_lhChildren.Count();
      pFile->Write_t( &iDirEntries, sizeof(INDEX));
      FOREACHINLIST(CVirtualTreeNode, vtn_lnInDirectory, vtn_lhChildren, it)
      {
        it->Write_t( pFile);
      }
    }
    else
    {
      pFile->Write_t( &vtn_bSelected, sizeof(BOOL));
      *pFile << vtn_strName;
      *pFile << vtn_fnItem;
    }
  }
  
  void CVirtualTreeNode::MakeRoot(void)
  {
    FORDELETELIST( CVirtualTreeNode, vtn_lnInDirectory, vtn_lhChildren, litDel)
    {
      delete &litDel.Current();
    }
    
    vtn_bIsDirectory=TRUE;
    vnt_pvtnParent=NULL;
    vtn_Handle=NULL;
    vtn_itIconType=0;
    vtn_bmBrowsingMode=BM_ICONS_MEDIUM;
    vtn_bSelected=FALSE;
    vtn_pTextureData=NULL;
    vtn_strName="VRT not loaded";
    vtn_fnItem=CTString("");
  }
  
  void CVirtualTreeNode::MoveToDirectory(CVirtualTreeNode *pVTNDst)
  {
    ASSERT( vnt_pvtnParent!=NULL);
    if( vnt_pvtnParent==NULL) return;
  
    vnt_pvtnParent=pVTNDst;
    vtn_lnInDirectory.Remove();
    pVTNDst->vtn_lhChildren.AddTail( vtn_lnInDirectory);
  }
  