[SHELL32]
[reactos.git] / reactos / dll / win32 / shell32 / CEnumIDListBase.cpp
index 50facd5..5963341 100644 (file)
 
 WINE_DEFAULT_DEBUG_CHANNEL(shell);
 
-CEnumIDListBase::CEnumIDListBase()
+CEnumIDListBase::CEnumIDListBase() :
+    mpFirst(NULL),
+    mpLast(NULL),
+    mpCurrent(NULL)
 {
-    mpFirst = NULL;
-    mpLast = NULL;
-    mpCurrent = NULL;
 }
 
 CEnumIDListBase::~CEnumIDListBase()
 {
+    DeleteList();
 }
 
 /**************************************************************************
@@ -122,71 +123,20 @@ BOOL CEnumIDListBase::HasItemWithCLSID(LPITEMIDLIST pidl)
     return FALSE;
 }
 
-
-/**************************************************************************
- *  CreateFolderEnumList()
- */
-BOOL CEnumIDListBase::CreateFolderEnumList(
-    LPCWSTR lpszPath,
-    DWORD dwFlags)
+HRESULT CEnumIDListBase::AppendItemsFromEnumerator(IEnumIDList* pEnum)
 {
-    WIN32_FIND_DATAW stffile;
-    HANDLE hFile;
-    WCHAR  szPath[MAX_PATH];
-    BOOL succeeded = TRUE;
-    static const WCHAR stars[] = { '*','.','*',0 };
-    static const WCHAR dot[] = { '.',0 };
-    static const WCHAR dotdot[] = { '.','.',0 };
-
-    TRACE("(%p)->(path=%s flags=0x%08x)\n", this, debugstr_w(lpszPath), dwFlags);
-
-    if(!lpszPath || !lpszPath[0]) return FALSE;
+    LPITEMIDLIST pidl;
+    DWORD dwFetched;
 
-    wcscpy(szPath, lpszPath);
-    PathAddBackslashW(szPath);
-    wcscat(szPath,stars);
+    if (!pEnum)
+        return E_INVALIDARG;
 
-    hFile = FindFirstFileW(szPath,&stffile);
-    if ( hFile != INVALID_HANDLE_VALUE )
-    {
-        BOOL findFinished = FALSE;
+    pEnum->Reset();
 
-        do
-        {
-            if ( !(stffile.dwFileAttributes & FILE_ATTRIBUTE_HIDDEN)
-             || (dwFlags & SHCONTF_INCLUDEHIDDEN) )
-            {
-                LPITEMIDLIST pidl = NULL;
-
-                if ( (stffile.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) &&
-                 dwFlags & SHCONTF_FOLDERS &&
-                 strcmpW(stffile.cFileName, dot) && strcmpW(stffile.cFileName, dotdot))
-                {
-                    pidl = _ILCreateFromFindDataW(&stffile);
-                    succeeded = succeeded && AddToEnumList(pidl);
-                }
-                else if (!(stffile.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
-                 && dwFlags & SHCONTF_NONFOLDERS)
-                {
-                    pidl = _ILCreateFromFindDataW(&stffile);
-                    succeeded = succeeded && AddToEnumList(pidl);
-                }
-            }
-            if (succeeded)
-            {
-                if (!FindNextFileW(hFile, &stffile))
-                {
-                    if (GetLastError() == ERROR_NO_MORE_FILES)
-                        findFinished = TRUE;
-                    else
-                        succeeded = FALSE;
-                }
-            }
-        } while (succeeded && !findFinished);
-        FindClose(hFile);
-    }
+    while((S_OK == pEnum->Next(1, &pidl, &dwFetched)) && dwFetched)
+        AddToEnumList(pidl);
 
-    return succeeded;
+    return S_OK;
 }
 
 /**************************************************************************