SOL9 2.0 Class: IconedDirTree

 SOL9 C++ Class Library  SOL9 Samples  SOL9 Tutorial  SOL9 FAQ  SOL9 ClassTree 

Source code

/*
 * 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);
    }
};

}



Last modified: 1 Feb 2012

Copyright (c) 2009-2012 Antillia.com ALL RIGHTS RESERVED.