Serious-Engine/Sources/WorldEditor/VirtualTreeNode.cpp
2016-03-11 15:57:17 +02:00

130 lines
3.0 KiB
C++

/* Copyright (c) 2002-2012 Croteam Ltd. 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);
}