flatten Entry/ShellEntry class hierarchy
Modified:
branches/lean-explorer/reactos/subsys/system/explorer/explorer.cpp
Modified:
branches/lean-explorer/reactos/subsys/system/explorer/explorer.dsp
Modified:
branches/lean-explorer/reactos/subsys/system/explorer/explorer.h
Modified:
branches/lean-explorer/reactos/subsys/system/explorer/globals.h
Modified:
branches/lean-explorer/reactos/subsys/system/explorer/shell/entries.cpp
Modified:
branches/lean-explorer/reactos/subsys/system/explorer/shell/entries.h
Modified:
branches/lean-explorer/reactos/subsys/system/explorer/shell/shellbrowser
.cpp
Modified:
branches/lean-explorer/reactos/subsys/system/explorer/shell/shellbrowser
.h
Modified:
branches/lean-explorer/reactos/subsys/system/explorer/shell/shellfs.cpp
Deleted:
branches/lean-explorer/reactos/subsys/system/explorer/shell/shellfs.h
Modified:
branches/lean-explorer/reactos/subsys/system/explorer/taskbar/quicklaunc
h.cpp
Modified:
branches/lean-explorer/reactos/subsys/system/explorer/taskbar/quicklaunc
h.h
Modified:
branches/lean-explorer/reactos/subsys/system/explorer/taskbar/startmenu.
cpp
Modified:
branches/lean-explorer/reactos/subsys/system/explorer/taskbar/startmenu.
h
  _____
Modified:
branches/lean-explorer/reactos/subsys/system/explorer/explorer.cpp
--- branches/lean-explorer/reactos/subsys/system/explorer/explorer.cpp
2005-12-31 15:47:15 UTC (rev 20485)
+++ branches/lean-explorer/reactos/subsys/system/explorer/explorer.cpp
2005-12-31 15:54:25 UTC (rev 20486)
@@ -86,35 +86,6 @@
 }
-bool FileTypeManager::is_exe_file(LPCTSTR ext)
-{
-       static const LPCTSTR s_executable_extensions[] = {
-               TEXT("COM"),
-               TEXT("EXE"),
-               TEXT("BAT"),
-               TEXT("CMD"),
-               TEXT("CMM"),
-               TEXT("BTM"),
-               TEXT("AWK"),
-               0
-       };
-
-       TCHAR ext_buffer[_MAX_EXT];
-       const LPCTSTR* p;
-       LPCTSTR s;
-       LPTSTR d;
-
-       for(s=ext+1,d=ext_buffer; (*d=toupper(*s)); s++)
-               ++d;
-
-       for(p=s_executable_extensions; *p; p++)
-               if (!lstrcmp(ext_buffer, *p))
-                       return true;
-
-       return false;
-}
-
-
 const FileTypeInfo& FileTypeManager::operator[](String ext)
 {
        _tcslwr((LPTSTR)ext.c_str());
@@ -149,7 +120,7 @@
        return ftype;
 }
-LPCTSTR FileTypeManager::set_type(Entry* entry, bool dont_hide_ext)
+LPCTSTR FileTypeManager::set_type(ShellEntry* entry, bool
dont_hide_ext)
 {
        LPCTSTR ext = _tcsrchr(entry->_data.cFileName, TEXT('.'));
@@ -163,9 +134,6 @@
                        _tcsncpy(entry->_display_name,
entry->_data.cFileName, len);
                        entry->_display_name[len] = TEXT('\0');
                }
-
-               if (is_exe_file(ext))
-                       entry->_data.dwFileAttributes |=
ATTRIBUTE_EXECUTABLE;
        }
        return ext;
  _____
Modified:
branches/lean-explorer/reactos/subsys/system/explorer/explorer.dsp
--- branches/lean-explorer/reactos/subsys/system/explorer/explorer.dsp
2005-12-31 15:47:15 UTC (rev 20485)
+++ branches/lean-explorer/reactos/subsys/system/explorer/explorer.dsp
2005-12-31 15:54:25 UTC (rev 20486)
@@ -406,10 +406,6 @@
 # End Source File
 # Begin Source File
-SOURCE=.\shell\shellfs.h
-# End Source File
-# Begin Source File
-
 SOURCE=.\shell\startup.c
 # SUBTRACT CPP /YX /Yc /Yu
 # End Source File
  _____
Modified:
branches/lean-explorer/reactos/subsys/system/explorer/explorer.h
--- branches/lean-explorer/reactos/subsys/system/explorer/explorer.h
2005-12-31 15:47:15 UTC (rev 20485)
+++ branches/lean-explorer/reactos/subsys/system/explorer/explorer.h
2005-12-31 15:54:25 UTC (rev 20486)
@@ -34,7 +34,6 @@
 #include "utility/shellclasses.h"
 #include "shell/entries.h"
-#include "shell/shellfs.h"
 #include "utility/window.h"
  _____
Modified:
branches/lean-explorer/reactos/subsys/system/explorer/globals.h
--- branches/lean-explorer/reactos/subsys/system/explorer/globals.h
2005-12-31 15:47:15 UTC (rev 20485)
+++ branches/lean-explorer/reactos/subsys/system/explorer/globals.h
2005-12-31 15:54:25 UTC (rev 20486)
@@ -39,9 +39,7 @@
        const FileTypeInfo& operator[](String ext);
-       static bool is_exe_file(LPCTSTR ext);
-
-       LPCTSTR set_type(struct Entry* entry, bool dont_hide_ext=false);
+       LPCTSTR set_type(struct ShellEntry* entry, bool
dont_hide_ext=false);
 };
  _____
Modified:
branches/lean-explorer/reactos/subsys/system/explorer/shell/entries.cpp
---
branches/lean-explorer/reactos/subsys/system/explorer/shell/entries.cpp
2005-12-31 15:47:15 UTC (rev 20485)
+++
branches/lean-explorer/reactos/subsys/system/explorer/shell/entries.cpp
2005-12-31 15:54:25 UTC (rev 20486)
@@ -30,7 +30,7 @@
  // allocate and initialise a directory entry
-Entry::Entry()
+ShellEntry::ShellEntry()
 {
        _up = NULL;
        _next = NULL;
@@ -42,9 +42,10 @@
        _display_name = _data.cFileName;
 }
-Entry::Entry(Entry* parent)
- :     _up(parent)
+ShellEntry::ShellEntry(LPITEMIDLIST shell_path)
+ : _pidl(shell_path)
 {
+       _up = NULL;
        _next = NULL;
        _down = NULL;
        _expanded = false;
@@ -54,10 +55,51 @@
        _display_name = _data.cFileName;
 }
-Entry::Entry(const Entry& other)
+ShellEntry::ShellEntry(const ShellPath& shell_path)
+ : _pidl(shell_path)
 {
+       _up = NULL;
        _next = NULL;
        _down = NULL;
+       _expanded = false;
+       _scanned = false;
+       _level = 0;
+       _icon_id = ICID_UNKNOWN;
+       _display_name = _data.cFileName;
+}
+
+
+ShellEntry::ShellEntry(ShellDirectory* parent, const ShellPath&
shell_path)
+ :     _up(parent),
+       _pidl(shell_path)
+{
+       _next = NULL;
+       _down = NULL;
+       _expanded = false;
+       _scanned = false;
+       _level = 0;
+       _icon_id = ICID_UNKNOWN;
+       _display_name = _data.cFileName;
+}
+
+ShellEntry::ShellEntry(ShellDirectory* parent, LPITEMIDLIST shell_path)
+ :     _up(parent),
+       _pidl(shell_path)
+{
+       _next = NULL;
+       _down = NULL;
+       _expanded = false;
+       _scanned = false;
+       _level = 0;
+       _icon_id = ICID_UNKNOWN;
+       _display_name = _data.cFileName;
+}
+
+ShellEntry::ShellEntry(const ShellEntry& other)
+ :     _pidl(other._pidl)
+{
+       _next = NULL;
+       _down = NULL;
        _up = NULL;
        assert(!other._next);
@@ -77,7 +119,7 @@
 }
  // free a directory entry
-Entry::~Entry()
+ShellEntry::~ShellEntry()
 {
        if (_icon_id > ICID_NONE)
                g_Globals._icon_cache.free_icon(_icon_id);
@@ -88,24 +130,27 @@
  // read directory tree and expand to the given location
-Entry* Entry::read_tree(const void* path, SORT_ORDER sortOrder)
+ShellEntry* ShellDirectory::read_tree(const void* path, SORT_ORDER
sortOrder)
 {
-       CONTEXT("Entry::read_tree()");
+       CONTEXT("ShellEntry::read_tree()");
        HCURSOR old_cursor = SetCursor(LoadCursor(0, IDC_WAIT));
-       Entry* entry = this;
+       ShellDirectory* entry = this;
        for(const void*p=path; p && entry; ) {
+               if (!(entry->_data.dwFileAttributes &
FILE_ATTRIBUTE_DIRECTORY))
+                       break;
+
                entry->read_directory(sortOrder);
                if (entry->_down)
                        entry->_expanded = true;
-               Entry* next_entry = entry->find_entry(p);
+               ShellEntry* next_entry = entry->find_entry(p);
                p = entry->get_next_path_component(p);
-               entry = next_entry;
+               entry = static_cast<ShellDirectory*>(next_entry);
        }
        SetCursor(old_cursor);
@@ -114,19 +159,21 @@
 }
-void Entry::read_directory(SORT_ORDER sortOrder, int scan_flags)
+void ShellDirectory::read_directory(SORT_ORDER sortOrder, int
scan_flags)
 {
-       CONTEXT("Entry::read_directory(SORT_ORDER)");
+       CONTEXT("ShellEntry::read_directory(SORT_ORDER)");
         // call into subclass
        read_directory(scan_flags);
 #ifndef ROSSHELL
        if (g_Globals._prescan_nodes) { //@todo _prescan_nodes should
not be used for reading the start menu.
-               for(Entry*entry=_down; entry; entry=entry->_next)
+               for(ShellEntry*entry=_down; entry; entry=entry->_next)
                        if (entry->_data.dwFileAttributes &
FILE_ATTRIBUTE_DIRECTORY) {
-                               entry->read_directory(scan_flags);
-                               entry->sort_directory(sortOrder);
+                               ShellDirectory* dir =
static_cast<ShellDirectory*>(entry);
+
+                               dir->read_directory(scan_flags);
+                               dir->sort_directory(sortOrder);
                        }
        }
 #endif
@@ -170,8 +217,8 @@
 static int compareName(const void* arg1, const void* arg2)
 {
-       const WIN32_FIND_DATA* fd1 = &(*(Entry**)arg1)->_data;
-       const WIN32_FIND_DATA* fd2 = &(*(Entry**)arg2)->_data;
+       const WIN32_FIND_DATA* fd1 = &(*(ShellEntry**)arg1)->_data;
+       const WIN32_FIND_DATA* fd2 = &(*(ShellEntry**)arg2)->_data;
        int cmp = compareType(fd1, fd2);
        if (cmp)
@@ -182,8 +229,8 @@
 static int compareExt(const void* arg1, const void* arg2)
 {
-       const WIN32_FIND_DATA* fd1 = &(*(Entry**)arg1)->_data;
-       const WIN32_FIND_DATA* fd2 = &(*(Entry**)arg2)->_data;
+       const WIN32_FIND_DATA* fd1 = &(*(ShellEntry**)arg1)->_data;
+       const WIN32_FIND_DATA* fd2 = &(*(ShellEntry**)arg2)->_data;
        const TCHAR *name1, *name2, *ext1, *ext2;
        int cmp = compareType(fd1, fd2);
@@ -215,8 +262,8 @@
 static int compareSize(const void* arg1, const void* arg2)
 {
-       WIN32_FIND_DATA* fd1 = &(*(Entry**)arg1)->_data;
-       WIN32_FIND_DATA* fd2 = &(*(Entry**)arg2)->_data;
+       WIN32_FIND_DATA* fd1 = &(*(ShellEntry**)arg1)->_data;
+       WIN32_FIND_DATA* fd2 = &(*(ShellEntry**)arg2)->_data;
        int cmp = compareType(fd1, fd2);
        if (cmp)
@@ -236,8 +283,8 @@
 static int compareDate(const void* arg1, const void* arg2)
 {
-       WIN32_FIND_DATA* fd1 = &(*(Entry**)arg1)->_data;
-       WIN32_FIND_DATA* fd2 = &(*(Entry**)arg2)->_data;
+       WIN32_FIND_DATA* fd1 = &(*(ShellEntry**)arg1)->_data;
+       WIN32_FIND_DATA* fd2 = &(*(ShellEntry**)arg2)->_data;
        int cmp = compareType(fd1, fd2);
        if (cmp)
@@ -256,11 +303,11 @@
 };
-void Entry::sort_directory(SORT_ORDER sortOrder)
+void ShellDirectory::sort_directory(SORT_ORDER sortOrder)
 {
        if (sortOrder != SORT_NONE) {
-               Entry* entry = _down;
-               Entry** array, **p;
+               ShellEntry* entry = _down;
+               ShellEntry** array, **p;
                int len;
                len = 0;
@@ -268,7 +315,7 @@
                        ++len;
                if (len) {
-                       array = (Entry**) alloca(len*sizeof(Entry*));
+                       array = (ShellEntry**)
alloca(len*sizeof(ShellEntry*));
                        p = array;
                        for(entry=_down; entry; entry=entry->_next)
@@ -288,9 +335,9 @@
 }
-void Entry::smart_scan(int scan_flags)
+void ShellDirectory::smart_scan(int scan_flags)
 {
-       CONTEXT("Entry::smart_scan()");
+       CONTEXT("ShellEntry::smart_scan()");
        if (!_scanned) {
                free_subentries();
@@ -299,7 +346,7 @@
 }
-int Entry::extract_icon()
+int ShellEntry::extract_icon()
 {
        TCHAR path[MAX_PATH];
@@ -367,7 +414,7 @@
        return icon_id;
 }
-int Entry::safe_extract_icon()
+int ShellEntry::safe_extract_icon()
 {
        try {
                return extract_icon();
@@ -379,82 +426,10 @@
 }
-BOOL Entry::launch_entry(HWND hwnd, UINT nCmdShow)
-{
-       TCHAR cmd[MAX_PATH];
-
-       if (!get_path(cmd))
-               return FALSE;
-
-        // add path to the recent file list
-       SHAddToRecentDocs(SHARD_PATH, cmd);
-
-        // start program, open document...
-       return launch_file(hwnd, cmd, nCmdShow);
-}
-
-
-HRESULT Entry::GetUIObjectOf(HWND hWnd, REFIID riid, LPVOID* ppvOut)
-{
-       TCHAR path[MAX_PATH];
-/*
-       if (!get_path(path))
-               return E_FAIL;
-
-       ShellPath shell_path(path);
-
-       IShellFolder* pFolder;
-       LPCITEMIDLIST pidl_last = NULL;
-
-       static DynamicFct<HRESULT(WINAPI*)(LPCITEMIDLIST, REFIID,
LPVOID*, LPCITEMIDLIST*)> SHBindToParent(TEXT("SHELL32"),
"SHBindToParent");
-
-       if (!SHBindToParent)
-               return E_NOTIMPL;
-
-       HRESULT hr = (*SHBindToParent)(shell_path, IID_IShellFolder,
(LPVOID*)&pFolder, &pidl_last);
-       if (FAILED(hr))
-               return hr;
-
-       ShellFolder shell_folder(pFolder);
-
-       shell_folder->Release();
-
-       return shell_folder->GetUIObjectOf(hWnd, 1, &pidl_last, riid,
NULL, ppvOut);
-*/
-       if (!_up)
-               return E_INVALIDARG;
-
-       if (!_up->get_path(path))
-               return E_FAIL;
-
-       ShellPath shell_path(path);
-       ShellFolder shell_folder(shell_path);
-
-#ifdef UNICODE
-       LPWSTR wname = _data.cFileName;
-#else
-       WCHAR wname[MAX_PATH];
-       MultiByteToWideChar(CP_ACP, 0, _data.cFileName, -1, wname,
MAX_PATH);
-#endif
-
-       LPITEMIDLIST pidl_last = NULL;
-       HRESULT hr = shell_folder->ParseDisplayName(hWnd, NULL, wname,
NULL, &pidl_last, NULL);
-
-       if (FAILED(hr))
-               return hr;
-
-       hr = shell_folder->GetUIObjectOf(hWnd, 1,
(LPCITEMIDLIST*)&pidl_last, riid, NULL, ppvOut);
-
-       ShellMalloc()->Free((void*)pidl_last);
-
-       return hr;
-}
-
-
  // recursively free all child entries
-void Entry::free_subentries()
+void ShellEntry::free_subentries()
 {
-       Entry *entry, *next=_down;
+       ShellEntry *entry, *next=_down;
        if (next) {
                _down = 0;
  _____
Modified:
branches/lean-explorer/reactos/subsys/system/explorer/shell/entries.h
---
branches/lean-explorer/reactos/subsys/system/explorer/shell/entries.h
2005-12-31 15:47:15 UTC (rev 20485)
+++
branches/lean-explorer/reactos/subsys/system/explorer/shell/entries.h
2005-12-31 15:54:25 UTC (rev 20486)
@@ -1,5 +1,5 @@
 /*
- * Copyright 2003, 2004 Martin Fuchs
+ * Copyright 2003, 2004, 2005 Martin Fuchs
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
@@ -40,28 +40,32 @@
 };
 #ifndef ATTRIBUTE_SYMBOLIC_LINK
-#define        ATTRIBUTE_LONGNAME                      0x08000000
-#define        ATTRIBUTE_VOLNAME                       0x10000000
-#define        ATTRIBUTE_ERASED                        0x20000000
 #define ATTRIBUTE_SYMBOLIC_LINK                0x40000000
 #define        ATTRIBUTE_EXECUTABLE            0x80000000
 #endif
- /// base of all file and directory entries
-struct Entry
+struct ShellDirectory;
+
+
+ /// base of all file entries
+struct ShellEntry
 {
+       ShellEntry();
+       ShellEntry(const ShellEntry& other);
+       ShellEntry(ShellDirectory* parent, LPITEMIDLIST shell_path);
+       ShellEntry(ShellDirectory* parent, const ShellPath& shell_path);
+
 protected:
-       Entry();
-       Entry(Entry* parent);
-       Entry(const Entry&);
+       ShellEntry(LPITEMIDLIST shell_path);
+       ShellEntry(const ShellPath& shell_path);
 public:
-       virtual ~Entry();
+       virtual ~ShellEntry();
-       Entry*          _next;
-       Entry*          _down;
-       Entry*          _up;
+       ShellEntry*     _next;
+       ShellEntry*     _down;
+       ShellDirectory* _up;
        bool            _expanded;
        bool            _scanned;
@@ -74,22 +78,19 @@
        int /*ICON_ID*/ _icon_id;
+       ShellPath       _pidl;  // parent relative PIDL
+
        void    free_subentries();
-       void    read_directory(SORT_ORDER sortOrder, int scan_flags=0);
-       Entry*  read_tree(const void* path, SORT_ORDER sortOrder);
-       void    sort_directory(SORT_ORDER sortOrder);
-       void    smart_scan(int scan_flags=0);
        int             extract_icon();
        int             safe_extract_icon();
-       virtual void read_directory(int scan_flags=0) {}
-       virtual const void* get_next_path_component(const void*) const
{return NULL;}
-       virtual Entry* find_entry(const void*) {return NULL;}
-       virtual bool get_path(PTSTR path) const = 0;
-       virtual ShellPath create_absolute_pidl() const {return
(LPCITEMIDLIST)NULL;}
-       virtual HRESULT GetUIObjectOf(HWND hWnd, REFIID riid, LPVOID*
ppvOut);
-       virtual BOOL launch_entry(HWND hwnd, UINT
nCmdShow=SW_SHOWNORMAL);
+       virtual bool get_path(PTSTR path) const;
+       ShellPath create_absolute_pidl() const;
+       BOOL launch_entry(HWND hwnd, UINT nCmdShow=SW_SHOWNORMAL);
+       HRESULT GetUIObjectOf(HWND hWnd, REFIID riid, LPVOID* ppvOut);
+
+       IShellFolder* get_parent_folder() const;
 };
@@ -103,12 +104,92 @@
 };
+ /// shell folder entry
+struct ShellDirectory : public ShellEntry, public Directory
+{
+       ShellDirectory(ShellFolder& root_folder, const ShellPath&
shell_path, HWND hwnd)
+        :      ShellEntry(shell_path),
+               _folder(root_folder, shell_path),
+               _hwnd(hwnd)
+       {
+               CONTEXT("ShellDirectory::ShellDirectory()");
+
+               lstrcpy(_data.cFileName,
root_folder.get_name(shell_path, SHGDN_FORPARSING));
+               _data.dwFileAttributes = FILE_ATTRIBUTE_DIRECTORY;
+               _shell_attribs = SFGAO_FOLDER;
+
+               ShellFolder subfolder(root_folder, shell_path);
+               IShellFolder* pFolder = subfolder;
+               pFolder->AddRef();
+               _path = pFolder;
+       }
+
+       explicit ShellDirectory(ShellDirectory* parent, LPITEMIDLIST
shell_path, HWND hwnd)
+        :      ShellEntry(parent, shell_path),
+               _folder(parent->_folder, shell_path),
+               _hwnd(hwnd)
+       {
+               /* not neccessary - the caller will fill the info
+               lstrcpy(_data.cFileName, _folder.get_name(shell_path));
+               _data.dwFileAttributes = FILE_ATTRIBUTE_DIRECTORY;
+               _shell_attribs = SFGAO_FOLDER; */
+
+               _folder->AddRef();
+               _path = _folder;
+       }
+
+       ShellDirectory(const ShellDirectory& other)
+        :      ShellEntry(other),
+               Directory(other),
+               _folder(other._folder),
+               _hwnd(other._hwnd)
+       {
+               IShellFolder* pFolder = (IShellFolder*)_path;
+               pFolder->AddRef();
+       }
+
+       ~ShellDirectory()
+       {
+               IShellFolder* pFolder = (IShellFolder*)_path;
+               _path = NULL;
+               pFolder->Release();
+       }
+
+       ShellEntry*     read_tree(const void* path, SORT_ORDER
sortOrder);
+       void    read_directory(SORT_ORDER sortOrder, int scan_flags=0);
+       void    read_directory(int scan_flags=0);
+       void    sort_directory(SORT_ORDER sortOrder);
+       void    smart_scan(int scan_flags=0);
+       virtual const void* get_next_path_component(const void*) const;
+       virtual ShellEntry* find_entry(const void* p);
+
+       virtual bool get_path(PTSTR path) const;
+
+       int     extract_icons();
+
+       ShellFolder _folder;
+       HWND    _hwnd;
+
+protected:
+       void    fill_w32fdata_shell(LPCITEMIDLIST pidl, SFGAOF attribs,
WIN32_FIND_DATA*, bool do_access=true);
+};
+
+
+inline IShellFolder* ShellEntry::get_parent_folder() const
+{
+       if (_up)
+               return static_cast<ShellDirectory*>(_up)->_folder;
+       else
+               return GetDesktopFolder();
+}
+
+
  /// root entry for file system trees
 struct Root {
        Root();
        ~Root();
-       Entry*  _entry;
+       ShellDirectory* _entry;
        TCHAR   _path[MAX_PATH];
        TCHAR   _volname[_MAX_FNAME];
        TCHAR   _fs[_MAX_DIR];
  _____
Modified:
branches/lean-explorer/reactos/subsys/system/explorer/shell/shellbrowser
.cpp
---
branches/lean-explorer/reactos/subsys/system/explorer/shell/shellbrowser
.cpp    2005-12-31 15:47:15 UTC (rev 20485)
+++
branches/lean-explorer/reactos/subsys/system/explorer/shell/shellbrowser
.cpp    2005-12-31 15:54:25 UTC (rev 20486)
@@ -201,9 +201,9 @@
        LPARAM itemData = TreeView_GetItemData(hwndTreeView, hItem);
        if (itemData) {
-               Entry* entry = (Entry*)itemData;
+               ShellEntry* entry = (ShellEntry*)itemData;
-               ShellDirectory* dir =
static_cast<ShellDirectory*>(entry->_up);
+               ShellDirectory* dir = entry->_up;
                ShellFolder folder = dir? dir->_folder:
GetDesktopFolder();
                LPCITEMIDLIST pidl =
static_cast<ShellEntry*>(entry)->_pidl;
@@ -238,7 +238,7 @@
        }
 }
-int ShellBrowserChild::get_entry_image(Entry* entry, LPCITEMIDLIST
pidl, int shgfi_flags, ImageMap& cache)
+int ShellBrowserChild::get_entry_image(ShellEntry* entry, LPCITEMIDLIST
pidl, int shgfi_flags, ImageMap& cache)
 {
        SHFILEINFO sfi;
        int idx = -1;
@@ -296,7 +296,7 @@
        }
 }
-int ShellBrowserChild::InsertSubitems(HTREEITEM hParentItem, Entry*
entry)
+int ShellBrowserChild::InsertSubitems(HTREEITEM hParentItem,
ShellDirectory* dir)
 {
        CONTEXT("ShellBrowserChild::InsertSubitems()");
@@ -307,15 +307,21 @@
        SendMessage(_left_hwnd, WM_SETREDRAW, FALSE, 0);
        try {
-               entry->smart_scan();
+               dir->smart_scan();
        } catch(COMException& e) {
                HandleException(e, g_Globals._hMainWnd);
        }
+        // remove old children items
+       for(HTREEITEM hchild,hnext=TreeView_GetChild(_left_hwnd,
hParentItem); hchild=hnext; ) {
+               hnext = TreeView_GetNextSibling(_left_hwnd, hchild);
+               TreeView_DeleteItem(_left_hwnd, hchild);
+       }
+
        TV_ITEM tvItem;
        TV_INSERTSTRUCT tvInsert;
-       for(entry=entry->_down; entry; entry=entry->_next) {
+       for(ShellEntry*entry=dir->_down; entry; entry=entry->_next) {
 #ifndef _LEFT_FILES
                if (entry->_data.dwFileAttributes &
FILE_ATTRIBUTE_DIRECTORY)
 #endif
@@ -354,7 +360,7 @@
        CONTEXT("ShellBrowserChild::OnTreeItemSelected()");
        _last_sel = pnmtv->itemNew.hItem;
-       Entry* entry = (Entry*)pnmtv->itemNew.lParam;
+       ShellDirectory* entry = (ShellDirectory*)pnmtv->itemNew.lParam;
        jump_to(entry);
 }
@@ -583,7 +589,7 @@
                                        UINT firstOffset =
pida->aoffset[1];
                                        LPITEMIDLIST pidl =
(LPITEMIDLIST)((LPBYTE)pida+firstOffset);
-                                       Entry* entry =
parent->find_entry(pidl);
+                                       ShellEntry* entry =
parent->find_entry(pidl);
                                        if (entry &&
(entry->_data.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY))
                                                if
(expand_folder(static_cast<ShellDirectory*>(entry)))
@@ -639,10 +645,10 @@
 void ShellBrowserChild::jump_to(LPCITEMIDLIST pidl)
 {
-       Entry* entry = NULL;
+       ShellDirectory* entry = NULL;
        if (!_cur_dir)
-               _cur_dir = static_cast<ShellDirectory*>(_root._entry);
+               _cur_dir = _root._entry;
        if (_cur_dir) {
                static DynamicFct<LPITEMIDLIST(WINAPI*)(LPCITEMIDLIST,
LPCITEMIDLIST)> ILFindChild(TEXT("SHELL32"), 24);
@@ -655,7 +661,7 @@
                                _cur_dir->smart_scan();
-                               entry =
_cur_dir->find_entry(child_pidl);
+                               entry =
static_cast<ShellDirectory*>(_cur_dir->find_entry(child_pidl));
                                if (!entry)
                                        break;
@@ -664,7 +670,7 @@
                } else {
                        _cur_dir->smart_scan();
-                       entry = _cur_dir->find_entry(pidl);  // This
is not correct in the common case, but works on the desktop level.
+                       entry =
static_cast<ShellDirectory*>(_cur_dir->find_entry(pidl));      // This
is not correct in the common case, but works on the desktop level.
                        if (entry)
                                jump_to(entry);
@@ -676,10 +682,10 @@
                UpdateFolderView(ShellFolder(pidl));
 }
-void ShellBrowserChild::jump_to(Entry* entry)
+void ShellBrowserChild::jump_to(ShellDirectory* entry)
 {
        IShellFolder* folder;
-       ShellDirectory* se = static_cast<ShellDirectory*>(entry);
+       ShellDirectory* se = entry;
        if (se->_data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
                folder = static_cast<ShellDirectory*>(se)->_folder;
  _____
Modified:
branches/lean-explorer/reactos/subsys/system/explorer/shell/shellbrowser
.h
---
branches/lean-explorer/reactos/subsys/system/explorer/shell/shellbrowser
.h      2005-12-31 15:47:15 UTC (rev 20485)
+++
branches/lean-explorer/reactos/subsys/system/explorer/shell/shellbrowser
.h      2005-12-31 15:54:25 UTC (rev 20486)
@@ -102,8 +102,6 @@
                return E_NOTIMPL;
        }
-       const Root& get_root() const {return _root;}
-
 protected:
        HWND    _hwnd;
        HWND    _left_hwnd;
@@ -128,7 +126,7 @@
        LRESULT Init();
        void    InitializeTree();
-       int             InsertSubitems(HTREEITEM hParentItem, Entry*
entry);
+       int             InsertSubitems(HTREEITEM hParentItem,
ShellDirectory* dir);
        bool    InitDragDrop();
        HRESULT OnDefaultCommand(LPIDA pida);
@@ -152,16 +150,16 @@
        void    jump_to(LPCTSTR path);
        void    jump_to(LPCITEMIDLIST pidl);
-       void    jump_to(Entry* entry);
+       void    jump_to(ShellDirectory* entry);
 protected:
        ShellDirectory* _cur_dir;
        CtxMenuInterfaces& _cm_ifs;
-       typedef map<Entry*, int> ImageMap;
+       typedef map<ShellEntry*, int> ImageMap;
        ImageMap _image_map;
        ImageMap _image_map_open;
-       int             get_entry_image(Entry* entry, LPCITEMIDLIST
pidl, int shgfi_flags, ImageMap& cache);
+       int             get_entry_image(ShellEntry* entry, LPCITEMIDLIST
pidl, int shgfi_flags, ImageMap& cache);
        void    invalidate_cache();
 };
  _____
Modified:
branches/lean-explorer/reactos/subsys/system/explorer/shell/shellfs.cpp
---
branches/lean-explorer/reactos/subsys/system/explorer/shell/shellfs.cpp
2005-12-31 15:47:15 UTC (rev 20485)
+++
branches/lean-explorer/reactos/subsys/system/explorer/shell/shellfs.cpp
2005-12-31 15:54:25 UTC (rev 20486)
@@ -195,8 +195,8 @@
        int level = _level + 1;
-       Entry* first_entry = NULL;
-       Entry* last = NULL;
+       ShellEntry* first_entry = NULL;
+       ShellEntry* last = NULL;
        /*if (_folder.empty())
                return;*/
@@ -251,7 +251,7 @@
                        fill_w32fdata_shell(pidls[n], attribs, &w32fd,
!(scan_flags&SCAN_DONT_ACCESS)&&!removeable);
                        try {
-                               Entry* entry = NULL;    // eliminate
useless GCC warning by initializing entry
+                               ShellEntry* entry = NULL;       //
eliminate useless GCC warning by initializing entry
                                if (w32fd.dwFileAttributes &
FILE_ATTRIBUTE_DIRECTORY)
                                        entry = new ShellDirectory(this,
pidls[n], _hwnd);
@@ -319,11 +319,11 @@
        return pidl;
 }
-Entry* ShellDirectory::find_entry(const void* p)
+ShellEntry* ShellDirectory::find_entry(const void* p)
 {
        LPITEMIDLIST pidl = (LPITEMIDLIST) p;
-       for(Entry*entry=_down; entry; entry=entry->_next) {
+       for(ShellEntry*entry=_down; entry; entry=entry->_next) {
                ShellEntry* se = static_cast<ShellEntry*>(entry);
                if (se->_pidl && se->_pidl->mkid.cb==pidl->mkid.cb
&&
!memcmp(se->_pidl, pidl, se->_pidl->mkid.cb))
@@ -337,7 +337,7 @@
 {
        int cnt = 0;
-       for(Entry*entry=_down; entry; entry=entry->_next)
+       for(ShellEntry*entry=_down; entry; entry=entry->_next)
                if (entry->_icon_id == ICID_UNKNOWN) {
                        entry->_icon_id = entry->extract_icon();
  _____
Deleted:
branches/lean-explorer/reactos/subsys/system/explorer/shell/shellfs.h
---
branches/lean-explorer/reactos/subsys/system/explorer/shell/shellfs.h
2005-12-31 15:47:15 UTC (rev 20485)
+++
branches/lean-explorer/reactos/subsys/system/explorer/shell/shellfs.h
2005-12-31 15:54:25 UTC (rev 20486)
@@ -1,123 +0,0 @@
-/*
- * Copyright 2003, 2004 Martin Fuchs
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307
USA
- */
-
-
- //
- // Explorer clone, lean version
- //
- // shellfs.h
- //
- // Martin Fuchs, 23.07.2003
- //
-
-
- /// shell file/directory entry
-struct ShellEntry : public Entry
-{
-       ShellEntry(Entry* parent, LPITEMIDLIST shell_path) :
Entry(parent), _pidl(shell_path) {}
-       ShellEntry(Entry* parent, const ShellPath& shell_path) :
Entry(parent), _pidl(shell_path) {}
-
-       virtual bool get_path(PTSTR path) const;
-       virtual ShellPath create_absolute_pidl() const;
-       virtual BOOL launch_entry(HWND hwnd, UINT
nCmdShow=SW_SHOWNORMAL);
-       virtual HRESULT GetUIObjectOf(HWND hWnd, REFIID riid, LPVOID*
ppvOut);
-
-       IShellFolder* get_parent_folder() const;
-
-       ShellPath       _pidl;  // parent relative PIDL
-
-protected:
-       ShellEntry(LPITEMIDLIST shell_path) : _pidl(shell_path) {}
-       ShellEntry(const ShellPath& shell_path) : _pidl(shell_path) {}
-};
-
-
- /// shell folder entry
-struct ShellDirectory : public ShellEntry, public Directory
-{
-       ShellDirectory(ShellFolder& root_folder, const ShellPath&
shell_path, HWND hwnd)
-        :      ShellEntry(shell_path),
-               _folder(root_folder, shell_path),
-               _hwnd(hwnd)
-       {
-               CONTEXT("ShellDirectory::ShellDirectory()");
-
-               lstrcpy(_data.cFileName,
root_folder.get_name(shell_path, SHGDN_FORPARSING));
-               _data.dwFileAttributes = FILE_ATTRIBUTE_DIRECTORY;
-               _shell_attribs = SFGAO_FOLDER;
-
-               ShellFolder subfolder(root_folder, shell_path);
-               IShellFolder* pFolder = subfolder;
-               pFolder->AddRef();
-               _path = pFolder;
-       }
-
-       explicit ShellDirectory(ShellDirectory* parent, LPITEMIDLIST
shell_path, HWND hwnd)
-        :      ShellEntry(parent, shell_path),
-               _folder(parent->_folder, shell_path),
-               _hwnd(hwnd)
-       {
-               /* not neccessary - the caller will fill the info
-               lstrcpy(_data.cFileName, _folder.get_name(shell_path));
-               _data.dwFileAttributes = FILE_ATTRIBUTE_DIRECTORY;
-               _shell_attribs = SFGAO_FOLDER; */
-
-               _folder->AddRef();
-               _path = _folder;
-       }
-
-       ShellDirectory(const ShellDirectory& other)
-        :      ShellEntry(other),
-               Directory(other),
-               _folder(other._folder),
-               _hwnd(other._hwnd)
-       {
-               IShellFolder* pFolder = (IShellFolder*)_path;
-               pFolder->AddRef();
-       }
-
-       ~ShellDirectory()
-       {
-               IShellFolder* pFolder = (IShellFolder*)_path;
-               _path = NULL;
-               pFolder->Release();
-       }
-
-       virtual void read_directory(int scan_flags=0);
-       virtual const void* get_next_path_component(const void*) const;
-       virtual Entry* find_entry(const void* p);
-
-       virtual bool get_path(PTSTR path) const;
-
-       int     extract_icons();
-
-       ShellFolder _folder;
-       HWND    _hwnd;
-
-protected:
-       void    fill_w32fdata_shell(LPCITEMIDLIST pidl, SFGAOF attribs,
WIN32_FIND_DATA*, bool do_access=true);
-};
-
-
-inline IShellFolder* ShellEntry::get_parent_folder() const
-{
-       if (_up)
-               return static_cast<ShellDirectory*>(_up)->_folder;
-       else
-               return GetDesktopFolder();
-}
  _____
Modified:
branches/lean-explorer/reactos/subsys/system/explorer/taskbar/quicklaunc
h.cpp
---
branches/lean-explorer/reactos/subsys/system/explorer/taskbar/quicklaunc
h.cpp   2005-12-31 15:47:15 UTC (rev 20485)
+++
branches/lean-explorer/reactos/subsys/system/explorer/taskbar/quicklaunc
h.cpp   2005-12-31 15:54:25 UTC (rev 20486)
@@ -149,7 +149,7 @@
        SendMessage(_hwnd, TB_INSERTBUTTON, INT_MAX, (LPARAM)&sep);
-       for(Entry*entry=_dir->_down; entry; entry=entry->_next) {
+       for(ShellEntry*entry=_dir->_down; entry; entry=entry->_next) {
                 // hide files like "desktop.ini"
                if (entry->_data.dwFileAttributes &
FILE_ATTRIBUTE_HIDDEN)
                        continue;
@@ -168,7 +168,7 @@
        SendMessage(GetParent(_hwnd), PM_RESIZE_CHILDREN, 0, 0);
 }
-void QuickLaunchBar::AddButton(int id, HBITMAP hbmp, LPCTSTR name,
Entry* entry, int flags)
+void QuickLaunchBar::AddButton(int id, HBITMAP hbmp, LPCTSTR name,
ShellEntry* entry, int flags)
 {
        TBADDBITMAP ab = {0, (UINT_PTR)hbmp};
        int bmp_idx = SendMessage(_hwnd, TB_ADDBITMAP, 1, (LPARAM)&ab);
  _____
Modified:
branches/lean-explorer/reactos/subsys/system/explorer/taskbar/quicklaunc
h.h
---
branches/lean-explorer/reactos/subsys/system/explorer/taskbar/quicklaunc
h.h     2005-12-31 15:47:15 UTC (rev 20485)
+++
branches/lean-explorer/reactos/subsys/system/explorer/taskbar/quicklaunc
h.h     2005-12-31 15:54:25 UTC (rev 20486)
@@ -47,7 +47,7 @@
        HBITMAP _hbmp;
        String  _title;
-       Entry*  _entry;
+       ShellEntry*     _entry;
 };
  /// map for managing the task bar buttons
@@ -80,6 +80,6 @@
        int                             _size;
        void    AddShortcuts();
-       void    AddButton(int id, HBITMAP hbmp, LPCTSTR name, Entry*
entry, int flags=TBSTATE_ENABLED);
+       void    AddButton(int id, HBITMAP hbmp, LPCTSTR name,
ShellEntry* entry, int flags=TBSTATE_ENABLED);
        void    UpdateDesktopButtons(int desktop_idx);
 };
  _____
Modified:
branches/lean-explorer/reactos/subsys/system/explorer/taskbar/startmenu.
cpp
---
branches/lean-explorer/reactos/subsys/system/explorer/taskbar/startmenu.
cpp     2005-12-31 15:47:15 UTC (rev 20485)
+++
branches/lean-explorer/reactos/subsys/system/explorer/taskbar/startmenu.
cpp     2005-12-31 15:54:25 UTC (rev 20486)
@@ -254,7 +254,7 @@
                *ignore_name = '\0';
[truncated at 1000 lines; 90 more skipped]