123
This commit is contained in:
163
Editor/Controls/FileTree.cpp
Normal file
163
Editor/Controls/FileTree.cpp
Normal file
@@ -0,0 +1,163 @@
|
||||
// FileTree.cpp : implementation file
|
||||
//
|
||||
|
||||
#include "stdafx.h"
|
||||
#include "FileTree.h"
|
||||
|
||||
#ifdef _DEBUG
|
||||
#define new DEBUG_NEW
|
||||
#undef THIS_FILE
|
||||
static char THIS_FILE[] = __FILE__;
|
||||
#endif
|
||||
|
||||
#include <io.h>
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// CFileTree
|
||||
|
||||
CFileTree::CFileTree()
|
||||
{
|
||||
CLogFile::WriteLine("File tree control created");
|
||||
|
||||
m_strFileSpec = "*.cgf";
|
||||
m_strSearchFolder = "Objects";
|
||||
}
|
||||
|
||||
CFileTree::~CFileTree()
|
||||
{
|
||||
CLogFile::WriteLine("File tree control destoried");
|
||||
}
|
||||
|
||||
|
||||
BEGIN_MESSAGE_MAP(CFileTree, CTreeCtrl)
|
||||
//{{AFX_MSG_MAP(CFileTree)
|
||||
ON_WM_CREATE()
|
||||
//}}AFX_MSG_MAP
|
||||
END_MESSAGE_MAP()
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// CFileTree message handlers
|
||||
|
||||
BOOL CFileTree::PreCreateWindow(CREATESTRUCT& cs)
|
||||
{
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
// Modify the window styles
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
|
||||
cs.style |= WS_VISIBLE | WS_CHILD | TVS_HASLINES | TVS_HASBUTTONS | TVS_LINESATROOT;
|
||||
cs.dwExStyle |= WS_EX_CLIENTEDGE;
|
||||
|
||||
return CTreeCtrl::PreCreateWindow(cs);
|
||||
}
|
||||
|
||||
int CFileTree::OnCreate(LPCREATESTRUCT lpCreateStruct)
|
||||
{
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
// Fill the tree control with the correct data
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
|
||||
HTREEITEM hRoot;
|
||||
char szSearchPath[_MAX_PATH];
|
||||
char szRootName[_MAX_PATH + 512];
|
||||
|
||||
if (CTreeCtrl::OnCreate(lpCreateStruct) == -1)
|
||||
return -1;
|
||||
|
||||
// Create the list
|
||||
//m_cImageList.Create(IDB_TREE_VIEW, 16, 1, RGB (255, 0, 255));
|
||||
CMFCUtils::LoadTrueColorImageList( m_cImageList,IDB_TREE_VIEW,16,RGB(255,0,255) );
|
||||
|
||||
// Attach it to the control
|
||||
SetImageList(&m_cImageList, TVSIL_NORMAL);
|
||||
|
||||
// Create name of the root
|
||||
sprintf(szRootName, "Master CD %s Folder", m_strSearchFolder.GetBuffer(0));
|
||||
|
||||
// Add the Master CD folder to the list
|
||||
hRoot = InsertItem(szRootName, 2, 2, TVI_ROOT);
|
||||
|
||||
// Create the folder path
|
||||
sprintf(szSearchPath, "%s%s", GetIEditor()->GetMasterCDFolder(), (const char*)m_strSearchFolder );
|
||||
|
||||
// Fill the list
|
||||
RecurseDirectory(szSearchPath, hRoot, m_strFileSpec.GetBuffer(0));
|
||||
Expand(hRoot, TVE_EXPAND);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void CFileTree::RecurseDirectory(char szFolder[_MAX_PATH], HTREEITEM hRoot, PSTR pszFileSpec)
|
||||
{
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
// Enumerate all files in the passed directory which match to the the
|
||||
// passed pattern. Also continue with adding all subdirectories
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
|
||||
CFileEnum cTempFiles;
|
||||
__finddata64_t sFile;
|
||||
char szFilePath[_MAX_PATH];
|
||||
HTREEITEM hNewRoot, hNewItem;
|
||||
|
||||
ASSERT(pszFileSpec);
|
||||
|
||||
// Make the path ready for appening a folder or filename
|
||||
PathAddBackslash(szFolder);
|
||||
|
||||
// Start the enumeration of the files
|
||||
if (cTempFiles.StartEnumeration(szFolder, "*.*", &sFile))
|
||||
{
|
||||
do
|
||||
{
|
||||
// Construct the full filepath of the current file
|
||||
strcpy(szFilePath, szFolder);
|
||||
strcat(szFilePath, sFile.name);
|
||||
|
||||
// Have we found a directory ?
|
||||
if (sFile.attrib & _A_SUBDIR)
|
||||
{
|
||||
// Skip the parent directory entries
|
||||
if (_stricmp(sFile.name, ".") == 0 ||
|
||||
_stricmp(sFile.name, "..") == 0)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
// Add it to the list and start recursion
|
||||
hNewRoot = InsertItem(sFile.name, 0, 0, hRoot);
|
||||
RecurseDirectory(szFilePath, hNewRoot, pszFileSpec);
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
// Check if the file name maches the pattern
|
||||
if (!PathMatchSpec(sFile.name, pszFileSpec))
|
||||
continue;
|
||||
|
||||
// Remove the extension from the name
|
||||
PathRenameExtension(sFile.name, "");
|
||||
|
||||
// Add the file to the list
|
||||
hNewItem = InsertItem(sFile.name, 1, 1, hRoot);
|
||||
|
||||
// Associate the handle of this item with the path
|
||||
// of its file
|
||||
m_cFileNames[hNewItem] = CString(szFilePath);
|
||||
|
||||
} while (cTempFiles.GetNextFile(&sFile));
|
||||
}
|
||||
}
|
||||
|
||||
CString CFileTree::GetSelectedFile()
|
||||
{
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
// Return the path of the currently selected file. If there is no
|
||||
// currently selected file, just a NULL terminated string will be
|
||||
// returned
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
|
||||
Files::iterator it = m_cFileNames.find(GetSelectedItem());
|
||||
if (it != m_cFileNames.end())
|
||||
return it->second;
|
||||
else
|
||||
return CString("");
|
||||
}
|
||||
Reference in New Issue
Block a user