windows-nt/Source/XPSP1/NT/shell/ext/ftp/ftppl.h

80 lines
3.1 KiB
C
Raw Normal View History

2020-09-26 03:20:57 -05:00
/*****************************************************************************
* 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