/*
* IconedDirTree.h
* Copyright (c) 2011 Antillia.com TOSHIYUKI ARAI. ALL RIGHTS RESERVED.
*/
// SOL++2000
// 2000.07.01
#pragma once
#include <sol\TreeView.h>
#include <sol\SystemImageList.h>
#include <sol\FileFinder.h>
#include <sol/FileInfo.h>
namespace SOL {
class IconedDirTree :public TreeView {
private:
SystemImageList imageList;
public:
IconedDirTree(): TreeView() { }
public:
/**
* Constructor
*/
IconedDirTree(View* parent, const TCHAR* name, Args& args)
:TreeView(parent, name, args),
imageList()
{
setImageList(&imageList, TVSIL_NORMAL);
}
public:
~IconedDirTree()
{
setImageList((HIMAGELIST)NULL, TVSIL_NORMAL);
}
public:
Boolean create(View* parent, const TCHAR* name, Args& args)
{
Boolean rc = TreeView::create(parent, name, args);
setImageList(&imageList, TVSIL_NORMAL);
return rc;
}
public:
HTREEITEM addItemWithIcon(HTREEITEM parent, HTREEITEM item, TCHAR* path)
{
int id1 = imageList.getDirectoryIndex(path);
int id2 = imageList.getOpenDirectoryIndex(path);
//FileInfo fileInfo;
//String type = _T("");
//fileInfo.getFileType(name, type);
return addItem(parent, item, path, id1, id2);
}
public:
void findDirectories(HTREEITEM parent, TCHAR* dir,
int level, int max)
{
if(level < max) {
WIN32_FIND_DATA data;
HTREEITEM item = (HTREEITEM)TVI_FIRST;
TCHAR* buffer = new TCHAR[_MAX_PATH];
_stprintf_s(buffer, _MAX_PATH, _T("%s\\*"), dir);
FileFinder fileFinder(buffer);
if (fileFinder.getFirst(&data)) {
do {
if (data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) {
if (strcmp(_T("."), data.cFileName) != 0 &&
strcmp(_T(".."), data.cFileName) != 0) {
int id1 = imageList.getDirectoryIndex(data.cFileName);
int id2 = imageList.getOpenDirectoryIndex(data.cFileName);
item = addItem(parent, item, data.cFileName, id1, id2);
TCHAR* subDir = new TCHAR[_MAX_PATH];
_stprintf_s(subDir, _MAX_PATH, _T("%s\\%s"), dir, data.cFileName);
// Go to next level of trees.
findDirectories(item, subDir, (level+1), max);
delete [] subDir;
}
}
} while (fileFinder.getNext(&data));
}
delete [] buffer;
}
}
public:
// Delete all children and siblings
void deleteChildren(HTREEITEM htreeItem)
{
HTREEITEM child = getChild(htreeItem);
while(child) {
HTREEITEM sibling = getNextSibling(child);
deleteItem(child);
child = sibling;
}
}
public:
// Get fullpathname
void getHierachy(HTREEITEM selItem, TCHAR* buff, TCHAR* delim)
{
TV_ITEM hitem;
HTREEITEM parent = getParent(selItem);
if(parent) {
//
getHierachy(parent, buff, delim);
TCHAR* text = new TCHAR[_MAX_PATH];
hitem.mask = TVIF_TEXT|TVIF_HANDLE;
hitem.hItem = selItem;
hitem.pszText = text;
hitem.cchTextMax = _MAX_PATH;
getItem(&hitem);
strcat(buff, delim);
strcat(buff, text);
delete [] text;
}
else {
TCHAR* text = new TCHAR[_MAX_PATH];
hitem.mask = TVIF_TEXT|TVIF_HANDLE;
hitem.hItem = selItem;
hitem.pszText = text;
hitem.cchTextMax = _MAX_PATH;
getItem(&hitem);
strcat(buff, text);
delete [] text;
}
}
public:
HIMAGELIST detachImageList() {
return setImageList((HIMAGELIST)NULL, LVSIL_SMALL);
}
};
}
|