80 lines
3.1 KiB
C
80 lines
3.1 KiB
C
|
/*****************************************************************************
|
||
|
* ftppl.h
|
||
|
*****************************************************************************/
|
||
|
|
||
|
#ifndef _FTPPIDLLIST_H
|
||
|
#define _FTPPIDLLIST_H
|
||
|
|
||
|
|
||
|
#include "ftplist.h"
|
||
|
|
||
|
typedef HRESULT (CALLBACK *LPFNPROCESSITEMCB)(LPVOID pfnProcessItemCB, HINTERNET hint, LPCITEMIDLIST pidlFull, BOOL * pfValidhinst, LPVOID pvData);
|
||
|
|
||
|
HRESULT EnumFolder(LPFNPROCESSITEMCB pfnProcessItemCB, HINTERNET hint, LPCITEMIDLIST pidlFull, CWireEncoding * pwe, BOOL * pfValidhinst, LPVOID pvData);
|
||
|
int RecursiveProcessPidl(LPVOID pvPidl, LPVOID pvInetEnum);
|
||
|
|
||
|
|
||
|
/*****************************************************************************
|
||
|
*
|
||
|
* CFtpPidlList
|
||
|
*
|
||
|
*****************************************************************************/
|
||
|
|
||
|
class CFtpPidlList : public IUnknown
|
||
|
{
|
||
|
public:
|
||
|
//////////////////////////////////////////////////////
|
||
|
// Public Interfaces
|
||
|
//////////////////////////////////////////////////////
|
||
|
|
||
|
// *** IUnknown ***
|
||
|
virtual STDMETHODIMP_(ULONG) AddRef(void);
|
||
|
virtual STDMETHODIMP_(ULONG) Release(void);
|
||
|
virtual STDMETHODIMP QueryInterface(REFIID riid, LPVOID * ppvObj);
|
||
|
|
||
|
public:
|
||
|
CFtpPidlList();
|
||
|
~CFtpPidlList(void);
|
||
|
|
||
|
// Public Member Functions
|
||
|
HRESULT CompareAndDeletePidl(LPCITEMIDLIST pidl);
|
||
|
HRESULT ReplacePidl(LPCITEMIDLIST pidlSrc, LPCITEMIDLIST pidlDest);
|
||
|
HRESULT InsertSorted(LPCITEMIDLIST pidl);
|
||
|
HRESULT RecursiveEnum(LPCITEMIDLIST pidlRoot, LPFNPROCESSITEMCB pfnProcessItemCB, HINTERNET hint, LPVOID pvData);
|
||
|
void Enum(PFNDPAENUMCALLBACK pfn, LPVOID pv) { m_pfl->Enum(pfn, pv); };
|
||
|
void DeletePidl(LPITEMIDLIST pidl) { m_pfl->DeleteItemPtr((LPVOID) pidl); ILFree(pidl); };
|
||
|
void Delete(int nIndex);
|
||
|
int GetCount(void) { return m_pfl->GetCount(); };
|
||
|
int FindPidlIndex(LPCITEMIDLIST pidlToFind, BOOL fCaseInsensitive);
|
||
|
LPITEMIDLIST GetPidl(UINT ipv) { return (LPITEMIDLIST) m_pfl->GetItemPtr(ipv); }; // TODO: Rename GetPidlReference()
|
||
|
LPITEMIDLIST FindPidl(LPCITEMIDLIST pidlToFind, BOOL fCaseInsensitive);
|
||
|
BOOL AreAllFolders(void);
|
||
|
BOOL AreAllFiles(void);
|
||
|
|
||
|
LPCITEMIDLIST * GetPidlList(void);
|
||
|
void FreePidlList(LPCITEMIDLIST * ppidl);
|
||
|
void TraceDump(LPCITEMIDLIST pidl, LPCTSTR pszCaller);
|
||
|
|
||
|
void UseCachedDirListings(BOOL fUseCachedDirListings);
|
||
|
|
||
|
// Friend Functions
|
||
|
static int CFtpPidlList::ComparePidlName(LPVOID pvPidl1, LPVOID pvPidl2, LPARAM lParam);
|
||
|
friend HRESULT CFtpPidlList_Create(int cpidl, LPCITEMIDLIST rgpidl[], CFtpPidlList ** ppfl);
|
||
|
friend HRESULT _EnumFolderPrep(HINTERNET hint, LPCITEMIDLIST pidlFull, CFtpPidlList * pPidlList, CWireEncoding * pwe, LPITEMIDLIST * ppidlCurrFtpPath);
|
||
|
|
||
|
protected:
|
||
|
// Private Member Variables
|
||
|
int m_cRef;
|
||
|
|
||
|
CFtpList * m_pfl;
|
||
|
CWireEncoding * m_pwe; // We don't hold a ref, so we assume the object will outlive us.
|
||
|
DWORD m_dwInetFlags; // What flags do we want to set for enumeration?
|
||
|
|
||
|
// Private Member Functions
|
||
|
HRESULT _Fill(int cpidl, LPCITEMIDLIST rgpidl[]);
|
||
|
void AssertSorted(void);
|
||
|
};
|
||
|
|
||
|
|
||
|
#endif // _FTPPIDLLIST_H
|