ReactOS 0.4.15-dev-8222-g9164419
CCommonFolder< TSelf, TItemId, TExtractIcon > Class Template Reference

#include <foldercommon.h>

Inheritance diagram for CCommonFolder< TSelf, TItemId, TExtractIcon >:
Collaboration diagram for CCommonFolder< TSelf, TItemId, TExtractIcon >:

Public Member Functions

 CCommonFolder ()
 
virtual ~CCommonFolder ()
 
STDMETHODIMP ParseDisplayName (HWND hwndOwner, LPBC pbcReserved, LPOLESTR lpszDisplayName, ULONG *pchEaten, LPITEMIDLIST *ppidl, ULONG *pdwAttributes) override
 
STDMETHOD() EnumObjects (HWND hwndOwner, SHCONTF grfFlags, IEnumIDList **ppenumIDList) PURE
 
STDMETHODIMP BindToObject (LPCITEMIDLIST pidl, LPBC pbcReserved, REFIID riid, void **ppvOut) override
 
STDMETHODIMP BindToStorage (LPCITEMIDLIST pidl, LPBC pbcReserved, REFIID riid, void **ppvObj) override
 
STDMETHODIMP CompareIDs (LPARAM lParam, LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2) override
 
STDMETHODIMP CreateViewObject (HWND hwndOwner, REFIID riid, void **ppvOut) override
 
STDMETHODIMP GetAttributesOf (UINT cidl, PCUITEMID_CHILD_ARRAY apidl, SFGAOF *rgfInOut) override
 
STDMETHODIMP GetUIObjectOf (HWND hwndOwner, UINT cidl, PCUITEMID_CHILD_ARRAY apidl, REFIID riid, UINT *prgfInOut, void **ppvOut) override
 
STDMETHODIMP GetDisplayNameOf (LPCITEMIDLIST pidl, SHGDNF uFlags, STRRET *lpName) override
 
STDMETHODIMP SetNameOf (HWND hwnd, LPCITEMIDLIST pidl, LPCOLESTR lpszName, SHGDNF uFlags, LPITEMIDLIST *ppidlOut) override
 
STDMETHODIMP GetDefaultSearchGUID (GUID *lpguid) override
 
STDMETHODIMP EnumSearches (IEnumExtraSearch **ppenum) override
 
STDMETHODIMP GetDefaultColumn (DWORD dwReserved, ULONG *pSort, ULONG *pDisplay) override
 
STDMETHOD() GetDefaultColumnState (UINT iColumn, SHCOLSTATEF *pcsFlags) PURE
 
STDMETHOD() GetDetailsEx (LPCITEMIDLIST pidl, const SHCOLUMNID *pscid, VARIANT *pv) PURE
 
STDMETHOD() GetDetailsOf (LPCITEMIDLIST pidl, UINT iColumn, SHELLDETAILS *psd) PURE
 
STDMETHOD() MapColumnToSCID (UINT iColumn, SHCOLUMNID *pscid) PURE
 
STDMETHODIMP GetClassID (CLSID *lpClassId) override
 
STDMETHODIMP Initialize (PCIDLIST_ABSOLUTE pidl) override
 
STDMETHODIMP GetCurFolder (PIDLIST_ABSOLUTE *pidl) override
 
- Public Member Functions inherited from ATL::CComObjectRootEx< CComMultiThreadModelNoCS >
 ~CComObjectRootEx ()
 
ULONG InternalAddRef ()
 
ULONG InternalRelease ()
 
void Lock ()
 
void Unlock ()
 
HRESULT _AtlInitialConstruct ()
 
- Public Member Functions inherited from ATL::CComObjectRootBase
 CComObjectRootBase ()
 
 ~CComObjectRootBase ()
 
void SetVoid (void *)
 
HRESULT _AtlFinalConstruct ()
 
HRESULT FinalConstruct ()
 
void InternalFinalConstructAddRef ()
 
void InternalFinalConstructRelease ()
 
void FinalRelease ()
 
- Public Member Functions inherited from IShellFolder2
HRESULT GetDefaultSearchGUID ([out] GUID *lpguid)
 
HRESULT EnumSearches ([out] IEnumExtraSearch **ppenum)
 
HRESULT GetDefaultColumn ([in] DWORD dwReserved, [out] ULONG *pSort, [out] ULONG *pDisplay)
 
HRESULT GetDefaultColumnState ([in] UINT iColumn, [out] SHCOLSTATEF *pcsFlags)
 
HRESULT GetDetailsEx ([in] PCUITEMID_CHILD pidl, [in] const SHCOLUMNID *pscid, [out] VARIANT *pv)
 
HRESULT GetDetailsOf ([in] PCUITEMID_CHILD pidl, [in] UINT iColumn, [out] SHELLDETAILS *psd)
 
HRESULT MapColumnToSCID ([in] UINT iColumn, [in] SHCOLUMNID *pscid)
 
- Public Member Functions inherited from IShellFolder
HRESULT ParseDisplayName ([in] HWND hwndOwner, [in] LPBC pbcReserved, [in, string] LPOLESTR lpszDisplayName, [out] ULONG *pchEaten, [out] PIDLIST_RELATIVE *ppidl, [in, out, unique] ULONG *pdwAttributes)
 
HRESULT EnumObjects ([in] HWND hwndOwner, [in] SHCONTF grfFlags, [out] IEnumIDList **ppenumIDList)
 
HRESULT BindToObject ([in] PCUIDLIST_RELATIVE pidl, [in] LPBC pbcReserved, [in] REFIID riid, [out, iid_is(riid)] void **ppvOut)
 
HRESULT BindToStorage ([in] PCUIDLIST_RELATIVE pidl, [in] LPBC pbcReserved, [in] REFIID riid, [out, iid_is(riid)] void **ppvObj)
 
HRESULT CompareIDs ([in] LPARAM lParam, [in] PCUIDLIST_RELATIVE pidl1, [in] PCUIDLIST_RELATIVE pidl2)
 
HRESULT CreateViewObject ([in] HWND hwndOwner, [in] REFIID riid, [out, iid_is(riid)] void **ppvOut)
 
HRESULT GetAttributesOf ([in] UINT cidl, [in, size_is(cidl)] PCUITEMID_CHILD_ARRAY apidl, [in, out] SFGAOF *rgfInOut)
 
HRESULT GetUIObjectOf ([in] HWND hwndOwner, [in] UINT cidl, [in, size_is(cidl)] PCUITEMID_CHILD_ARRAY apidl, [in] REFIID riid, [in, out, unique] UINT *prgfInOut, [out, iid_is(riid)] void **ppvOut)
 
HRESULT GetDisplayNameOf ([in] PCUITEMID_CHILD pidl, [in] SHGDNF uFlags, [out] STRRET *lpName)
 
HRESULT SetNameOf ([in] HWND hwnd, [in] PCUITEMID_CHILD pidl, [in, string] LPCOLESTR lpszName, [in] SHGDNF uFlags, [out] PITEMID_CHILD *ppidlOut)
 
- Public Member Functions inherited from IUnknown
HRESULT QueryInterface ([in] REFIID riid, [out, iid_is(riid)] void **ppvObject)
 
ULONG AddRef ()
 
ULONG Release ()
 
HRESULT GetCurFolder ([out] PIDLIST_ABSOLUTE *ppidl)
 
HRESULT Initialize ([in] PCIDLIST_ABSOLUTE pidl)
 
HRESULT GetClassID ([out] CLSID *pClassID)
 

Static Public Member Functions

static HRESULT CALLBACK DefCtxMenuCallback (IShellFolder *, HWND, IDataObject *, UINT uMsg, WPARAM, LPARAM)
 
- Static Public Member Functions inherited from ATL::CComObjectRootBase
static void WINAPI ObjectMain (bool)
 
static const struct _ATL_CATMAP_ENTRYGetCategoryMap ()
 
static HRESULT WINAPI InternalQueryInterface (void *pThis, const _ATL_INTMAP_ENTRY *pEntries, REFIID iid, void **ppvObject)
 

Protected Member Functions

STDMETHOD() InternalBindToObject (PWSTR path, const TItemId *info, LPITEMIDLIST first, LPCITEMIDLIST rest, LPITEMIDLIST fullPidl, LPBC pbcReserved, IShellFolder **ppsfChild) PURE
 
STDMETHOD() ResolveSymLink (const TItemId *info, LPITEMIDLIST *fullPidl)
 
STDMETHOD() CompareName (LPARAM lParam, const TItemId *first, const TItemId *second)
 
STDMETHOD() CompareIDs (LPARAM lParam, const TItemId *first, const TItemId *second) PURE
 
 STDMETHOD_ (ULONG, ConvertAttributes)(const TItemId *entry
 
 STDMETHOD_ (BOOL, IsFolder)(LPCITEMIDLIST pcidl)
 
 STDMETHOD_ (BOOL, IsFolder)(const TItemId *info) PURE
 
 STDMETHOD_ (BOOL, IsSymLink)(LPCITEMIDLIST pcidl)
 
 STDMETHOD_ (BOOL, IsSymLink)(const TItemId *info)
 
virtual HRESULT GetInfoFromPidl (LPCITEMIDLIST pcidl, const TItemId **pentry) PURE
 

Protected Attributes

WCHAR m_NtPath [MAX_PATH]
 
LPITEMIDLIST m_shellPidl
 
PULONG inMask PURE
 

Additional Inherited Members

- Public Types inherited from IShellFolder2
typedef struct IShellFolder2::SHCOLUMNIDLPSHCOLUMNID
 
typedef const SHCOLUMNIDLPCSHCOLUMNID
 
- Public Types inherited from IShellFolder
enum  tagSHGDN {
  SHGDN_NORMAL = 0 , SHGDN_INFOLDER = 1 , SHGDN_FOREDITING = 0x1000 , SHGDN_INCLUDE_NONFILESYS = 0x2000 ,
  SHGDN_FORADDRESSBAR = 0x4000 , SHGDN_FORPARSING = 0x8000
}
 
enum  tagSHCONTF {
  SHCONTF_FOLDERS = 32 , SHCONTF_NONFOLDERS = 64 , SHCONTF_INCLUDEHIDDEN = 128 , SHCONTF_INIT_ON_FIRST_NEXT = 256 ,
  SHCONTF_NETPRINTERSRCH = 512 , SHCONTF_SHAREABLE = 1024 , SHCONTF_STORAGE = 2048 , SHCONTF_NAVIGATION_ENUM = 0x01000 ,
  SHCONTF_FASTITEMS = 0x02000 , SHCONTF_FLATLIST = 0x04000 , SHCONTF_ENABLE_ASYNC = 0x08000 , SHCONTF_INCLUDESUPERHIDDEN = 0x10000
}
 
typedef IShellFolderLPSHELLFOLDER
 
typedef enum IShellFolder::tagSHGDN SHGNO
 
typedef DWORD SHGDNF
 
typedef DWORD SHCONTF
 
typedef ULONG SFGAOF
 
- Public Types inherited from IUnknown
typedef IUnknownLPUNKNOWN
 
- Public Types inherited from IPersistFolder2
typedef IPersistFolder2LPPERSISTFOLDER2
 
- Public Types inherited from IPersistFolder
typedef IPersistFolderLPPERSISTFOLDER
 
- Public Types inherited from IPersist
typedef IPersistLPPERSIST
 
- Public Attributes inherited from ATL::CComObjectRootBase
LONG m_dwRef
 

Detailed Description

template<class TSelf, typename TItemId, class TExtractIcon>
class CCommonFolder< TSelf, TItemId, TExtractIcon >

Definition at line 60 of file foldercommon.h.

Constructor & Destructor Documentation

◆ CCommonFolder()

template<class TSelf , typename TItemId , class TExtractIcon >
CCommonFolder< TSelf, TItemId, TExtractIcon >::CCommonFolder ( )
inline

Definition at line 72 of file foldercommon.h.

72 :
74 {
75 }
LPITEMIDLIST m_shellPidl
Definition: foldercommon.h:68
#define NULL
Definition: types.h:112

◆ ~CCommonFolder()

template<class TSelf , typename TItemId , class TExtractIcon >
virtual CCommonFolder< TSelf, TItemId, TExtractIcon >::~CCommonFolder ( )
inlinevirtual

Definition at line 77 of file foldercommon.h.

78 {
79 if (m_shellPidl)
81 }
void WINAPI ILFree(LPITEMIDLIST pidl)
Definition: pidl.c:940

Member Function Documentation

◆ BindToObject()

template<class TSelf , typename TItemId , class TExtractIcon >
STDMETHODIMP CCommonFolder< TSelf, TItemId, TExtractIcon >::BindToObject ( LPCITEMIDLIST  pidl,
LPBC  pbcReserved,
REFIID  riid,
void **  ppvOut 
)
inlineoverride

Definition at line 168 of file foldercommon.h.

173 {
174 const TItemId * info;
175
176 if (IsEqualIID(riid, IID_IShellFolder))
177 {
178 HRESULT hr = GetInfoFromPidl(pidl, &info);
180 return hr;
181
183
184 StringCbCopyW(path, sizeof(path), m_NtPath);
185 PathAppendW(path, info->entryName);
186
188 LPCITEMIDLIST rest = ILGetNext(pidl);
189
191
192 CComPtr<IShellFolder> psfChild;
193 hr = InternalBindToObject(path, info, first, rest, fullPidl, pbcReserved, &psfChild);
194
195 ILFree(fullPidl);
196 ILFree(first);
197
198 if (FAILED(hr))
199 return hr;
200
201 if (hr == S_FALSE)
202 return S_OK;
203
204 if (rest->mkid.cb > 0)
205 {
206 return psfChild->BindToObject(rest, pbcReserved, riid, ppvOut);
207 }
208
209 return psfChild->QueryInterface(riid, ppvOut);
210 }
211
212 return E_NOTIMPL;
213 }
STDMETHOD() InternalBindToObject(PWSTR path, const TItemId *info, LPITEMIDLIST first, LPCITEMIDLIST rest, LPITEMIDLIST fullPidl, LPBC pbcReserved, IShellFolder **ppsfChild) PURE
virtual HRESULT GetInfoFromPidl(LPCITEMIDLIST pcidl, const TItemId **pentry) PURE
WCHAR m_NtPath[MAX_PATH]
Definition: foldercommon.h:66
#define E_NOTIMPL
Definition: ddrawi.h:99
#define MAX_PATH
Definition: compat.h:34
#define FAILED_UNEXPECTEDLY(hr)
Definition: precomp.h:121
const GLint * first
Definition: glext.h:5794
REFIID riid
Definition: atlbase.h:39
#define S_OK
Definition: intsafe.h:52
#define FAILED(hr)
Definition: intsafe.h:51
#define PathAppendW
Definition: pathcch.h:309
LPITEMIDLIST WINAPI ILCombine(LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2)
Definition: pidl.c:712
LPITEMIDLIST WINAPI ILCloneFirst(LPCITEMIDLIST pidl)
Definition: pidl.c:262
LPITEMIDLIST WINAPI ILGetNext(LPCITEMIDLIST pidl)
Definition: pidl.c:866
#define IsEqualIID(riid1, riid2)
Definition: guiddef.h:95
HRESULT hr
Definition: shlfolder.c:183
ITEMIDLIST UNALIGNED * LPITEMIDLIST
Definition: shtypes.idl:41
const ITEMIDLIST UNALIGNED * LPCITEMIDLIST
Definition: shtypes.idl:42
STRSAFEAPI StringCbCopyW(STRSAFE_LPWSTR pszDest, size_t cbDest, STRSAFE_LPCWSTR pszSrc)
Definition: strsafe.h:166
#define S_FALSE
Definition: winerror.h:2357
__wchar_t WCHAR
Definition: xmlstorage.h:180

◆ BindToStorage()

template<class TSelf , typename TItemId , class TExtractIcon >
STDMETHODIMP CCommonFolder< TSelf, TItemId, TExtractIcon >::BindToStorage ( LPCITEMIDLIST  pidl,
LPBC  pbcReserved,
REFIID  riid,
void **  ppvObj 
)
inlineoverride

Definition at line 233 of file foldercommon.h.

238 {
240 return E_NOTIMPL;
241 }
#define UNIMPLEMENTED
Definition: debug.h:118

◆ CompareIDs() [1/2]

template<class TSelf , typename TItemId , class TExtractIcon >
STDMETHOD() CCommonFolder< TSelf, TItemId, TExtractIcon >::CompareIDs ( LPARAM  lParam,
const TItemId *  first,
const TItemId *  second 
)
protected

◆ CompareIDs() [2/2]

template<class TSelf , typename TItemId , class TExtractIcon >
STDMETHODIMP CCommonFolder< TSelf, TItemId, TExtractIcon >::CompareIDs ( LPARAM  lParam,
LPCITEMIDLIST  pidl1,
LPCITEMIDLIST  pidl2 
)
inlineoverride

Definition at line 243 of file foldercommon.h.

247 {
248 HRESULT hr;
249
250 TRACE("CompareIDs %d\n", lParam);
251
252 const TItemId * id1;
253 hr = GetInfoFromPidl(pidl1, &id1);
254 if (FAILED(hr))
255 return E_INVALIDARG;
256
257 const TItemId * id2;
258 hr = GetInfoFromPidl(pidl2, &id2);
259 if (FAILED(hr))
260 return E_INVALIDARG;
261
262 hr = CompareIDs(lParam, id1, id2);
263 if (hr != S_EQUAL)
264 return hr;
265
266 // The wollowing snipped is basically SHELL32_CompareChildren
267
268 PUIDLIST_RELATIVE rest1 = ILGetNext(pidl1);
269 PUIDLIST_RELATIVE rest2 = ILGetNext(pidl2);
270
271 bool isEmpty1 = (rest1->mkid.cb == 0);
272 bool isEmpty2 = (rest2->mkid.cb == 0);
273
274 if (isEmpty1 || isEmpty2)
275 return MAKE_COMPARE_HRESULT(isEmpty2 - isEmpty1);
276
277 LPCITEMIDLIST first1 = ILCloneFirst(pidl1);
278 if (!first1)
279 return E_OUTOFMEMORY;
280
281 CComPtr<IShellFolder> psfNext;
282 hr = BindToObject(first1, NULL, IID_PPV_ARG(IShellFolder, &psfNext));
284 return hr;
285
286 return psfNext->CompareIDs(lParam, rest1, rest2);
287 }
STDMETHODIMP CompareIDs(LPARAM lParam, LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2) override
Definition: foldercommon.h:243
STDMETHODIMP BindToObject(LPCITEMIDLIST pidl, LPBC pbcReserved, REFIID riid, void **ppvOut) override
Definition: foldercommon.h:168
LPARAM lParam
Definition: combotst.c:139
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
#define E_INVALIDARG
Definition: ddrawi.h:101
#define MAKE_COMPARE_HRESULT(x)
Definition: shellutils.h:607
#define S_EQUAL
Definition: shellutils.h:605
ITEMIDLIST_RELATIVE UNALIGNED * PUIDLIST_RELATIVE
Definition: shtypes.idl:55
#define TRACE(s)
Definition: solgame.cpp:4
#define IID_PPV_ARG(Itype, ppType)

◆ CompareName()

template<class TSelf , typename TItemId , class TExtractIcon >
STDMETHOD() CCommonFolder< TSelf, TItemId, TExtractIcon >::CompareName ( LPARAM  lParam,
const TItemId *  first,
const TItemId *  second 
)
inlineprotected

Definition at line 290 of file foldercommon.h.

294 {
295 bool f1 = IsFolder(first);
296 bool f2 = IsFolder(second);
297
299 if (hr != S_EQUAL)
300 return hr;
301
302 bool canonical = (lParam & 0xFFFF0000) == SHCIDS_CANONICALONLY;
303 if (canonical)
304 {
305 // Shortcut: avoid comparing contents if not necessary when the results are not for display.
306 hr = MAKE_COMPARE_HRESULT(second->entryNameLength - first->entryNameLength);
307 if (hr != S_EQUAL)
308 return hr;
309
310 int minlength = min(first->entryNameLength, second->entryNameLength);
311 if (minlength > 0)
312 {
313 hr = MAKE_COMPARE_HRESULT(memcmp(first->entryName, second->entryName, minlength));
314 if (hr != S_EQUAL)
315 return hr;
316 }
317
318 return S_EQUAL;
319 }
320
321 int minlength = min(first->entryNameLength, second->entryNameLength);
322 if (minlength > 0)
323 {
324 hr = MAKE_COMPARE_HRESULT(StrCmpNW(first->entryName, second->entryName, minlength / sizeof(WCHAR)));
325 if (hr != S_EQUAL)
326 return hr;
327 }
328
329 return MAKE_COMPARE_HRESULT(second->entryNameLength - first->entryNameLength);
330 }
int memcmp(void *Buffer1, void *Buffer2, ACPI_SIZE Count)
Definition: utclib.c:112
#define SHCIDS_CANONICALONLY
Definition: precomp.h:50
INT WINAPI StrCmpNW(LPCWSTR lpszStr, LPCWSTR lpszComp, INT iLen)
Definition: string.c:504
#define min(a, b)
Definition: monoChain.cc:55
#define f2(x, y, z)
Definition: sha1.c:31
#define f1(x, y, z)
Definition: sha1.c:30

◆ CreateViewObject()

template<class TSelf , typename TItemId , class TExtractIcon >
STDMETHODIMP CCommonFolder< TSelf, TItemId, TExtractIcon >::CreateViewObject ( HWND  hwndOwner,
REFIID  riid,
void **  ppvOut 
)
inlineoverride

Implements IShellFolder.

Definition at line 333 of file foldercommon.h.

337 {
338 if (!IsEqualIID(riid, IID_IShellView))
339 return E_NOINTERFACE;
340
341 _CComObject<CFolderViewCB> *pcb;
342
343 HRESULT hr = _CComObject<CFolderViewCB>::CreateInstance(&pcb);
344 if (FAILED(hr))
345 return hr;
346
347 pcb->AddRef();
348
349 SFV_CREATE sfv;
350 sfv.cbSize = sizeof(sfv);
351 sfv.pshf = this;
352 sfv.psvOuter = NULL;
353 sfv.psfvcb = pcb;
354
356
358 if (FAILED(hr))
359 return hr;
360
361 pcb->Initialize(view);
362
363 pcb->Release();
364
365 *ppvOut = view;
366
367 return S_OK;
368 }
HRESULT WINAPI SHCreateShellFolderView(const SFV_CREATE *pcsfv, IShellView **ppsv)
Definition: CDefView.cpp:4372
ULONG AddRef()
ULONG Release()
IShellFolderViewCB * psfvcb
Definition: shlobj.h:1359
IShellView * psvOuter
Definition: shlobj.h:1358
UINT cbSize
Definition: shlobj.h:1356
IShellFolder * pshf
Definition: shlobj.h:1357
#define E_NOINTERFACE
Definition: winerror.h:2364

◆ DefCtxMenuCallback()

template<class TSelf , typename TItemId , class TExtractIcon >
static HRESULT CALLBACK CCommonFolder< TSelf, TItemId, TExtractIcon >::DefCtxMenuCallback ( IShellFolder ,
HWND  ,
IDataObject ,
UINT  uMsg,
WPARAM  ,
LPARAM   
)
inlinestatic

Definition at line 695 of file foldercommon.h.

696 {
697 switch (uMsg)
698 {
700 return S_OK;
701
704 case DFM_GETDEFSTATICID: // Required for Windows 7 to pick a default
705 return S_FALSE;
706 }
707 return E_NOTIMPL;
708 }
#define DFM_GETDEFSTATICID
Definition: precomp.h:47
#define DFM_INVOKECOMMANDEX
Definition: precomp.h:46
#define DFM_MERGECONTEXTMENU
Definition: precomp.h:44
#define DFM_INVOKECOMMAND
Definition: precomp.h:45

◆ EnumObjects()

template<class TSelf , typename TItemId , class TExtractIcon >
STDMETHOD() CCommonFolder< TSelf, TItemId, TExtractIcon >::EnumObjects ( HWND  hwndOwner,
SHCONTF  grfFlags,
IEnumIDList **  ppenumIDList 
)

Implements IShellFolder.

◆ EnumSearches()

template<class TSelf , typename TItemId , class TExtractIcon >
STDMETHODIMP CCommonFolder< TSelf, TItemId, TExtractIcon >::EnumSearches ( IEnumExtraSearch **  ppenum)
inlineoverride

Implements IShellFolder2.

Definition at line 586 of file foldercommon.h.

587 {
589 return E_NOTIMPL;
590 }

◆ GetAttributesOf()

template<class TSelf , typename TItemId , class TExtractIcon >
STDMETHODIMP CCommonFolder< TSelf, TItemId, TExtractIcon >::GetAttributesOf ( UINT  cidl,
PCUITEMID_CHILD_ARRAY  apidl,
SFGAOF rgfInOut 
)
inlineoverride

Implements IShellFolder.

Definition at line 370 of file foldercommon.h.

374 {
375 const TItemId * info;
376
377 TRACE("GetAttributesOf %d\n", cidl);
378
379 if (cidl == 0)
380 {
381 *rgfInOut &= SFGAO_FOLDER | SFGAO_HASSUBFOLDER | SFGAO_BROWSABLE;
382 return S_OK;
383 }
384
385 for (int i = 0; i < (int)cidl; i++)
386 {
387 PCUITEMID_CHILD pidl = apidl[i];
388
389 HRESULT hr = GetInfoFromPidl(pidl, &info);
391 return hr;
392
393 // Update attributes.
394 *rgfInOut = ConvertAttributes(info, rgfInOut);
395 }
396
397 return S_OK;
398 }
unsigned int(__cdecl typeof(jpeg_read_scanlines))(struct jpeg_decompress_struct *
Definition: typeof.h:31
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
const ITEMID_CHILD UNALIGNED * PCUITEMID_CHILD
Definition: shtypes.idl:70

◆ GetClassID()

template<class TSelf , typename TItemId , class TExtractIcon >
STDMETHODIMP CCommonFolder< TSelf, TItemId, TExtractIcon >::GetClassID ( CLSID lpClassId)
inlineoverride

Implements IPersist.

Definition at line 623 of file foldercommon.h.

624 {
625 if (!lpClassId)
626 return E_POINTER;
627
628 *lpClassId = CLSID_NtObjectFolder;
629 return S_OK;
630 }
const GUID CLSID_NtObjectFolder
Definition: ntobjfolder.cpp:13
#define E_POINTER
Definition: winerror.h:2365

◆ GetCurFolder()

template<class TSelf , typename TItemId , class TExtractIcon >
STDMETHODIMP CCommonFolder< TSelf, TItemId, TExtractIcon >::GetCurFolder ( PIDLIST_ABSOLUTE pidl)
inlineoverride

Implements IPersistFolder2.

Definition at line 643 of file foldercommon.h.

644 {
645 if (pidl)
646 *pidl = ILClone(m_shellPidl);
647 if (!m_shellPidl)
648 return S_FALSE;
649 return S_OK;
650 }
LPITEMIDLIST WINAPI ILClone(LPCITEMIDLIST pidl)
Definition: pidl.c:237

◆ GetDefaultColumn()

template<class TSelf , typename TItemId , class TExtractIcon >
STDMETHODIMP CCommonFolder< TSelf, TItemId, TExtractIcon >::GetDefaultColumn ( DWORD  dwReserved,
ULONG pSort,
ULONG pDisplay 
)
inlineoverride

Implements IShellFolder2.

Definition at line 592 of file foldercommon.h.

596 {
597 if (pSort)
598 *pSort = 0;
599 if (pDisplay)
600 *pDisplay = 0;
601 return S_OK;
602 }

◆ GetDefaultColumnState()

template<class TSelf , typename TItemId , class TExtractIcon >
STDMETHOD() CCommonFolder< TSelf, TItemId, TExtractIcon >::GetDefaultColumnState ( UINT  iColumn,
SHCOLSTATEF pcsFlags 
)

Implements IShellFolder2.

◆ GetDefaultSearchGUID()

template<class TSelf , typename TItemId , class TExtractIcon >
STDMETHODIMP CCommonFolder< TSelf, TItemId, TExtractIcon >::GetDefaultSearchGUID ( GUID lpguid)
inlineoverride

Implements IShellFolder2.

Definition at line 580 of file foldercommon.h.

581 {
583 return E_NOTIMPL;
584 }

◆ GetDetailsEx()

template<class TSelf , typename TItemId , class TExtractIcon >
STDMETHOD() CCommonFolder< TSelf, TItemId, TExtractIcon >::GetDetailsEx ( LPCITEMIDLIST  pidl,
const SHCOLUMNID pscid,
VARIANT pv 
)

◆ GetDetailsOf()

template<class TSelf , typename TItemId , class TExtractIcon >
STDMETHOD() CCommonFolder< TSelf, TItemId, TExtractIcon >::GetDetailsOf ( LPCITEMIDLIST  pidl,
UINT  iColumn,
SHELLDETAILS psd 
)

◆ GetDisplayNameOf()

template<class TSelf , typename TItemId , class TExtractIcon >
STDMETHODIMP CCommonFolder< TSelf, TItemId, TExtractIcon >::GetDisplayNameOf ( LPCITEMIDLIST  pidl,
SHGDNF  uFlags,
STRRET lpName 
)
inlineoverride

Definition at line 501 of file foldercommon.h.

505 {
506 const TItemId * info;
507
508 TRACE("GetDisplayNameOf %p\n", pidl);
509
510 HRESULT hr = GetInfoFromPidl(pidl, &info);
512 return hr;
513
515 {
516 hr = MakeStrRetFromString(info->entryName, info->entryNameLength, lpName);
518 return hr;
519 }
520
521 WCHAR path[MAX_PATH] = { 0 };
522
524 {
526 {
529 return hr;
530 }
531 }
532
533 PathAppendW(path, info->entryName);
534
535 LPCITEMIDLIST pidlNext = ILGetNext(pidl);
536 if (pidlNext && pidlNext->mkid.cb > 0)
537 {
538 LPITEMIDLIST pidlFirst = ILCloneFirst(pidl);
539
540 CComPtr<IShellFolder> psfChild;
541 hr = BindToObject(pidlFirst, NULL, IID_PPV_ARG(IShellFolder, &psfChild));
543 return hr;
544
546 STRRET childName;
547
548 hr = psfChild->GetDisplayNameOf(pidlNext, uFlags | SHGDN_INFOLDER, &childName);
550 return hr;
551
552 hr = StrRetToBufW(&childName, pidlNext, temp, _countof(temp));
554 return hr;
555
557
558 ILFree(pidlFirst);
559 }
560
563 return hr;
564
565 return S_OK;
566 }
#define GET_SHGDN_RELATION(dwFlags)
Definition: precomp.h:53
#define GET_SHGDN_FOR(dwFlags)
Definition: precomp.h:52
HRESULT INLINE GetFullName(PCIDLIST_ABSOLUTE pidl, DWORD uFlags, PWSTR strName, DWORD cchName)
Definition: util.h:29
HRESULT INLINE MakeStrRetFromString(LPCWSTR string, DWORD cbLength, STRRET *str)
Definition: util.h:7
UINT uFlags
Definition: api.c:59
HRESULT WINAPI StrRetToBufW(LPSTRRET src, const ITEMIDLIST *pidl, LPWSTR dest, UINT len)
Definition: string.c:1530
static calc_node_t temp
Definition: rpn_ieee.c:38
#define _countof(array)
Definition: sndvol32.h:70
_In_ LPCSTR lpName
Definition: winbase.h:2789

◆ GetInfoFromPidl()

template<class TSelf , typename TItemId , class TExtractIcon >
virtual HRESULT CCommonFolder< TSelf, TItemId, TExtractIcon >::GetInfoFromPidl ( LPCITEMIDLIST  pcidl,
const TItemId **  pentry 
)
protectedvirtual

Reimplemented in CNtObjectFolder, and CRegistryFolder.

◆ GetUIObjectOf()

template<class TSelf , typename TItemId , class TExtractIcon >
STDMETHODIMP CCommonFolder< TSelf, TItemId, TExtractIcon >::GetUIObjectOf ( HWND  hwndOwner,
UINT  cidl,
PCUITEMID_CHILD_ARRAY  apidl,
REFIID  riid,
UINT prgfInOut,
void **  ppvOut 
)
inlineoverride

Implements IShellFolder.

Definition at line 400 of file foldercommon.h.

407 {
408 DWORD res;
409 TRACE("GetUIObjectOf\n");
410
411 if (IsEqualIID(riid, IID_IContextMenu) ||
412 IsEqualIID(riid, IID_IContextMenu2) ||
413 IsEqualIID(riid, IID_IContextMenu3))
414 {
415 CComPtr<IContextMenu> pcm;
416
417 HKEY keys[1];
418
420
421 CComPtr<IShellFolder> psfParent = this;
422
424
425 int nkeys = _countof(keys);
426 if (cidl == 1 && IsSymLink(apidl[0]))
427 {
428 const TItemId * info;
429 HRESULT hr = GetInfoFromPidl(apidl[0], &info);
430 if (FAILED(hr))
431 return hr;
432
435 if (FAILED(hr))
436 return hr;
437
438 CComPtr<IShellFolder> psfTarget;
440 if (FAILED(hr))
441 {
442 ILFree(target);
443 return hr;
444 }
445
448 psfParent = psfTarget;
449
450 apidl = &child;
451 }
452
453 if (cidl == 1 && IsFolder(apidl[0]))
454 {
455 res = RegOpenKey(HKEY_CLASSES_ROOT, L"Folder", keys + 0);
456 if (!NT_SUCCESS(res))
457 return HRESULT_FROM_NT(res);
458 }
459 else
460 {
461 nkeys = 0;
462 }
463
464 HRESULT hr = CDefFolderMenu_Create2(parent, hwndOwner, cidl, apidl, psfParent, DefCtxMenuCallback, nkeys, keys, &pcm);
466 return hr;
467
468 return pcm->QueryInterface(riid, ppvOut);
469 }
470
471 if (IsEqualIID(riid, IID_IExtractIconW))
472 {
473 return ShellObjectCreatorInit<TExtractIcon>(m_NtPath, m_shellPidl, cidl, apidl, riid, ppvOut);
474 }
475
477 {
478 return CIDLData_CreateFromIDArray(m_shellPidl, cidl, apidl, (IDataObject**)ppvOut);
479 }
480
481 if (IsEqualIID(riid, IID_IQueryAssociations))
482 {
483 if (cidl == 1 && IsFolder(apidl[0]))
484 {
485 CComPtr<IQueryAssociations> pqa;
486 HRESULT hr = AssocCreate(CLSID_QueryAssociations, IID_PPV_ARG(IQueryAssociations, &pqa));
488 return hr;
489
490 hr = pqa->Init(ASSOCF_INIT_DEFAULTTOFOLDER, L"NTObjShEx.NTDirectory", NULL, hwndOwner);
492 return hr;
493
494 return pqa->QueryInterface(riid, ppvOut);
495 }
496 }
497
498 return E_NOTIMPL;
499 }
HRESULT WINAPI CDefFolderMenu_Create2(PCIDLIST_ABSOLUTE pidlFolder, HWND hwnd, UINT cidl, PCUITEMID_CHILD_ARRAY apidl, IShellFolder *psf, LPFNDFMCALLBACK lpfn, UINT nKeys, const HKEY *ahkeyClsKeys, IContextMenu **ppcm)
STDMETHOD() ResolveSymLink(const TItemId *info, LPITEMIDLIST *fullPidl)
Definition: foldercommon.h:225
static HRESULT CALLBACK DefCtxMenuCallback(IShellFolder *, HWND, IDataObject *, UINT uMsg, WPARAM, LPARAM)
Definition: foldercommon.h:695
#define NT_SUCCESS(StatCode)
Definition: apphelp.c:32
HRESULT WINAPI AssocCreate(CLSID clsid, REFIID refiid, void **lpInterface)
Definition: assoc.c:98
r parent
Definition: btrfs.c:3010
#define IsSymLink(Fcb)
Definition: ext2fs.h:285
unsigned long DWORD
Definition: ntddk_ex.h:95
GLuint res
Definition: glext.h:9613
GLenum target
Definition: glext.h:7315
HRESULT QueryInterface([in] REFIID riid, [out, iid_is(riid)] void **ppvObject)
static HWND child
Definition: cursoricon.c:298
#define L(x)
Definition: ntvdm.h:50
const GUID IID_IDataObject
BOOL WINAPI ILRemoveLastID(LPITEMIDLIST pidl)
Definition: pidl.c:221
HRESULT WINAPI SHBindToParent(LPCITEMIDLIST pidl, REFIID riid, LPVOID *ppv, LPCITEMIDLIST *ppidlLast)
Definition: pidl.c:1350
HRESULT WINAPI CIDLData_CreateFromIDArray(PCIDLIST_ABSOLUTE pidlFolder, UINT cpidlFiles, PCUIDLIST_RELATIVE_ARRAY lppidlFiles, LPDATAOBJECT *ppdataObject)
Definition: shellord.c:2213
@ ASSOCF_INIT_DEFAULTTOFOLDER
Definition: shlwapi.h:586
#define HRESULT_FROM_NT(x)
Definition: winerror.h:94
#define RegOpenKey
Definition: winreg.h:519
#define HKEY_CLASSES_ROOT
Definition: winreg.h:10

◆ Initialize()

template<class TSelf , typename TItemId , class TExtractIcon >
STDMETHODIMP CCommonFolder< TSelf, TItemId, TExtractIcon >::Initialize ( PCIDLIST_ABSOLUTE  pidl)
inlineoverride

Implements IPersistFolder.

Definition at line 633 of file foldercommon.h.

634 {
635 m_shellPidl = ILClone(pidl);
636
637 StringCbCopyW(m_NtPath, sizeof(m_NtPath), L"\\");
638
639 return S_OK;
640 }

◆ InternalBindToObject()

template<class TSelf , typename TItemId , class TExtractIcon >
STDMETHOD() CCommonFolder< TSelf, TItemId, TExtractIcon >::InternalBindToObject ( PWSTR  path,
const TItemId *  info,
LPITEMIDLIST  first,
LPCITEMIDLIST  rest,
LPITEMIDLIST  fullPidl,
LPBC  pbcReserved,
IShellFolder **  ppsfChild 
)
protected

◆ MapColumnToSCID()

template<class TSelf , typename TItemId , class TExtractIcon >
STDMETHOD() CCommonFolder< TSelf, TItemId, TExtractIcon >::MapColumnToSCID ( UINT  iColumn,
SHCOLUMNID pscid 
)

Implements IShellFolder2.

◆ ParseDisplayName()

template<class TSelf , typename TItemId , class TExtractIcon >
STDMETHODIMP CCommonFolder< TSelf, TItemId, TExtractIcon >::ParseDisplayName ( HWND  hwndOwner,
LPBC  pbcReserved,
LPOLESTR  lpszDisplayName,
ULONG pchEaten,
LPITEMIDLIST ppidl,
ULONG pdwAttributes 
)
inlineoverride

Definition at line 84 of file foldercommon.h.

91 {
92 if (!ppidl)
93 return E_POINTER;
94
95 if (pchEaten)
96 *pchEaten = 0;
97
98 if (pdwAttributes)
99 *pdwAttributes = 0;
100
101 TRACE("CCommonFolder::ParseDisplayName name=%S (ntPath=%S)\n", lpszDisplayName, m_NtPath);
102
103 const TItemId * info;
104 IEnumIDList * it;
106 if (FAILED(hr))
107 return hr;
108
109 PWSTR end = StrChrW(lpszDisplayName, '\\');
110 int length = end ? end - lpszDisplayName : wcslen(lpszDisplayName);
111
112 while (TRUE)
113 {
114 hr = it->Next(1, ppidl, NULL);
115
116 if (FAILED(hr))
117 return hr;
118
119 if (hr != S_OK)
121
122 hr = GetInfoFromPidl(*ppidl, &info);
124 return hr;
125
126 if (StrCmpNW(info->entryName, lpszDisplayName, length) == 0)
127 break;
128 }
129
130 // if has remaining path to parse (and the path didn't just terminate in a backslash)
131 if (end && wcslen(end) > 1)
132 {
133 CComPtr<IShellFolder> psfChild;
134 hr = BindToObject(*ppidl, pbcReserved, IID_PPV_ARG(IShellFolder, &psfChild));
136 return hr;
137
139 hr = psfChild->ParseDisplayName(hwndOwner, pbcReserved, end + 1, pchEaten, &child, pdwAttributes);
140 if (FAILED(hr))
141 return hr;
142
143 LPITEMIDLIST old = *ppidl;
144 *ppidl = ILCombine(old, child);
145 ILFree(old);
146
147 // Count the path separator
148 if (pchEaten)
149 (*pchEaten) += 1;
150 }
151 else
152 {
153 if (pdwAttributes)
154 *pdwAttributes = ConvertAttributes(info, pdwAttributes);
155 }
156
157 if (pchEaten)
158 *pchEaten += wcslen(info->entryName);
159
160 return S_OK;
161 }
STDMETHOD() EnumObjects(HWND hwndOwner, SHCONTF grfFlags, IEnumIDList **ppenumIDList) PURE
#define TRUE
Definition: types.h:120
LPWSTR WINAPI StrChrW(LPCWSTR lpszStr, WCHAR ch)
Definition: string.c:468
GLuint GLuint end
Definition: gl.h:1545
GLuint GLsizei GLsizei * length
Definition: glext.h:6040
_CRTIMP size_t __cdecl wcslen(_In_z_ const wchar_t *_Str)
HRESULT Next([in] ULONG celt, [out, size_is(celt), length_is(*pceltFetched)] PITEMID_CHILD *rgelt, [out] ULONG *pceltFetched)
@ SHCONTF_NONFOLDERS
Definition: shobjidl.idl:174
#define ERROR_FILE_NOT_FOUND
Definition: disk.h:79
uint16_t * PWSTR
Definition: typedefs.h:56
#define HRESULT_FROM_WIN32(x)
Definition: winerror.h:92

◆ ResolveSymLink()

template<class TSelf , typename TItemId , class TExtractIcon >
STDMETHOD() CCommonFolder< TSelf, TItemId, TExtractIcon >::ResolveSymLink ( const TItemId *  info,
LPITEMIDLIST fullPidl 
)
inlineprotected

Definition at line 225 of file foldercommon.h.

228 {
229 return E_NOTIMPL;
230 }

◆ SetNameOf()

template<class TSelf , typename TItemId , class TExtractIcon >
STDMETHODIMP CCommonFolder< TSelf, TItemId, TExtractIcon >::SetNameOf ( HWND  hwnd,
LPCITEMIDLIST  pidl,
LPCOLESTR  lpszName,
SHGDNF  uFlags,
LPITEMIDLIST ppidlOut 
)
inlineoverride

Definition at line 568 of file foldercommon.h.

574 {
576 return E_NOTIMPL;
577 }

◆ STDMETHOD_() [1/5]

template<class TSelf , typename TItemId , class TExtractIcon >
CCommonFolder< TSelf, TItemId, TExtractIcon >::STDMETHOD_ ( BOOL  ,
IsFolder   
) const
protected

◆ STDMETHOD_() [2/5]

template<class TSelf , typename TItemId , class TExtractIcon >
CCommonFolder< TSelf, TItemId, TExtractIcon >::STDMETHOD_ ( BOOL  ,
IsFolder   
)
inlineprotected

Definition at line 663 of file foldercommon.h.

664 {
665 const TItemId * info;
666
667 HRESULT hr = GetInfoFromPidl(pcidl, &info);
668 if (FAILED(hr))
669 return hr;
670
671 return IsFolder(info);
672 }

◆ STDMETHOD_() [3/5]

template<class TSelf , typename TItemId , class TExtractIcon >
CCommonFolder< TSelf, TItemId, TExtractIcon >::STDMETHOD_ ( BOOL  ,
IsSymLink   
) const
inlineprotected

Definition at line 687 of file foldercommon.h.

688 {
689 return FALSE;
690 }
#define FALSE
Definition: types.h:117

◆ STDMETHOD_() [4/5]

template<class TSelf , typename TItemId , class TExtractIcon >
CCommonFolder< TSelf, TItemId, TExtractIcon >::STDMETHOD_ ( BOOL  ,
IsSymLink   
)
inlineprotected

Definition at line 676 of file foldercommon.h.

677 {
678 const TItemId * info;
679
680 HRESULT hr = GetInfoFromPidl(pcidl, &info);
681 if (FAILED(hr))
682 return hr;
683
684 return IsSymLink(info);
685 }

◆ STDMETHOD_() [5/5]

template<class TSelf , typename TItemId , class TExtractIcon >
CCommonFolder< TSelf, TItemId, TExtractIcon >::STDMETHOD_ ( ULONG  ,
ConvertAttributes   
) const
protected

Member Data Documentation

◆ m_NtPath

template<class TSelf , typename TItemId , class TExtractIcon >
WCHAR CCommonFolder< TSelf, TItemId, TExtractIcon >::m_NtPath[MAX_PATH]
protected

Definition at line 66 of file foldercommon.h.

◆ m_shellPidl

template<class TSelf , typename TItemId , class TExtractIcon >
LPITEMIDLIST CCommonFolder< TSelf, TItemId, TExtractIcon >::m_shellPidl
protected

Definition at line 68 of file foldercommon.h.

◆ PURE

template<class TSelf , typename TItemId , class TExtractIcon >
PULONG inMask CCommonFolder< TSelf, TItemId, TExtractIcon >::PURE
protected

Definition at line 661 of file foldercommon.h.


The documentation for this class was generated from the following file: