mirror of
https://github.com/ptitSeb/Serious-Engine
synced 2024-11-29 21:25:54 +01:00
130 lines
3.0 KiB
C++
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);
|
||
|
}
|