ReactOS 0.4.17-dev-573-g8315b8c
CShellItem Class Reference

#include <CShellItem.h>

Inheritance diagram for CShellItem:
Collaboration diagram for CShellItem:

Public Member Functions

 CShellItem ()
 
 ~CShellItem ()
 
HRESULT get_parent_pidl (LPITEMIDLIST *parent_pidl)
 
HRESULT get_parent_shellfolder (IShellFolder **ppsf)
 
HRESULT get_shellfolder (IBindCtx *pbc, REFIID riid, void **ppvOut)
 
STDMETHOD() BindToHandler (IBindCtx *pbc, REFGUID rbhid, REFIID riid, void **ppvOut) override
 
STDMETHOD() GetParent (IShellItem **ppsi) override
 
STDMETHOD() GetDisplayName (SIGDN sigdnName, LPWSTR *ppszName) override
 
STDMETHOD() GetAttributes (SFGAOF sfgaoMask, SFGAOF *psfgaoAttribs) override
 
STDMETHOD() Compare (IShellItem *oth, SICHINTF hint, int *piOrder) override
 
STDMETHOD() GetClassID (CLSID *pClassID) override
 
STDMETHOD() SetIDList (PCIDLIST_ABSOLUTE pidl) override
 
STDMETHOD() GetIDList (PIDLIST_ABSOLUTE *ppidl) 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 ()
 
HRESULT BindToHandler ([in] IBindCtx *pbc, [in] REFGUID rbhid, [in] REFIID riid, [out, iid_is(riid)] void **ppvOut)
 
HRESULT GetParent ([out] IShellItem **ppsi)
 
HRESULT GetDisplayName ([in] SIGDN sigdnName, [out] LPWSTR *ppszName)
 
HRESULT GetAttributes ([in] SFGAOF sfgaoMask, [out] SFGAOF *psfgaoAttribs)
 
HRESULT Compare ([in] IShellItem *psi, [in] SICHINTF hint, [out] int *piOrder)
 
- Public Member Functions inherited from IUnknown
HRESULT QueryInterface ([in] REFIID riid, [out, iid_is(riid)] void **ppvObject)
 
ULONG AddRef ()
 
ULONG Release ()
 
HRESULT SetIDList ([in] PCIDLIST_ABSOLUTE pidl)
 
HRESULT GetIDList ([out] PIDLIST_ABSOLUTE *ppidl)
 
HRESULT GetClassID ([out] CLSID *pClassID)
 

Private Attributes

LPITEMIDLIST m_pidl
 

Additional Inherited Members

- Public Types inherited from IShellItem
enum  SIGDN {
  SIGDN_NORMALDISPLAY = 0 , SIGDN_PARENTRELATIVEPARSING = 0x80018001 , SIGDN_DESKTOPABSOLUTEPARSING = 0x80028000 , SIGDN_PARENTRELATIVEEDITING = 0x80031001 ,
  SIGDN_DESKTOPABSOLUTEEDITING = 0x8004c000 , SIGDN_FILESYSPATH = 0x80058000 , SIGDN_URL = 0x80068000 , SIGDN_PARENTRELATIVEFORADDRESSBAR = 0x8007c001 ,
  SIGDN_PARENTRELATIVE = 0x80080001
}
 
enum  _SICHINTF { SICHINT_DISPLAY = 0x00000000 , SICHINT_CANONICAL = 0x10000000 , SICHINT_TEST_FILESYSPATH_IF_NOT_EQUAL = 0x20000000 , SICHINT_ALLFIELDS = 0x80000000 }
 
typedef DWORD SICHINTF
 
- Public Types inherited from IUnknown
typedef IUnknownLPUNKNOWN
 
- Public Types inherited from IPersist
typedef IPersistLPPERSIST
 
- 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)
 
- Public Attributes inherited from ATL::CComObjectRootBase
LONG m_dwRef
 

Detailed Description

Definition at line 25 of file CShellItem.h.

Constructor & Destructor Documentation

◆ CShellItem()

CShellItem::CShellItem ( )

Definition at line 27 of file CShellItem.cpp.

27 :
29{
30}
LPITEMIDLIST m_pidl
Definition: CShellItem.h:32
#define NULL
Definition: types.h:112

◆ ~CShellItem()

CShellItem::~CShellItem ( )

Definition at line 32 of file CShellItem.cpp.

33{
35}
void WINAPI ILFree(LPITEMIDLIST pidl)
Definition: pidl.c:1051

Member Function Documentation

◆ BindToHandler()

HRESULT WINAPI CShellItem::BindToHandler ( IBindCtx pbc,
REFGUID  rbhid,
REFIID  riid,
void **  ppvOut 
)
override

Implements IShellItem.

Definition at line 98 of file CShellItem.cpp.

99{
100 HRESULT ret;
101 TRACE("(%p, %p,%s,%p,%p)\n", this, pbc, shdebugstr_guid(&rbhid), riid, ppvOut);
102
103 *ppvOut = NULL;
104 if (IsEqualGUID(rbhid, BHID_SFObject))
105 {
106 return get_shellfolder(pbc, riid, ppvOut);
107 }
108 else if (IsEqualGUID(rbhid, BHID_SFUIObject))
109 {
110 CComPtr<IShellFolder> psf_parent;
111 if (_ILIsDesktop(m_pidl))
112 ret = SHGetDesktopFolder(&psf_parent);
113 else
114 ret = get_parent_shellfolder(&psf_parent);
116 return ret;
117
119 return psf_parent->GetUIObjectOf(NULL, 1, &pidl, riid, NULL, ppvOut);
120 }
121 else if (IsEqualGUID(rbhid, BHID_DataObject))
122 {
123 return BindToHandler(pbc, BHID_SFUIObject, IID_IDataObject, ppvOut);
124 }
125 else if (IsEqualGUID(rbhid, BHID_SFViewObject))
126 {
130 return ret;
131
132 return psf->CreateViewObject(NULL, riid, ppvOut);
133 }
134
135 FIXME("Unsupported BHID %s.\n", debugstr_guid(&rbhid));
136
137 return MK_E_NOOBJECT;
138}
BOOL _ILIsDesktop(LPCITEMIDLIST pidl)
Definition: CBandSite.h:24
HRESULT WINAPI SHGetDesktopFolder(IShellFolder **psf)
#define FIXME(fmt,...)
Definition: precomp.h:53
STDMETHOD() BindToHandler(IBindCtx *pbc, REFGUID rbhid, REFIID riid, void **ppvOut) override
Definition: CShellItem.cpp:98
HRESULT get_parent_shellfolder(IShellFolder **ppsf)
Definition: CShellItem.cpp:58
HRESULT get_shellfolder(IBindCtx *pbc, REFIID riid, void **ppvOut)
Definition: CShellItem.cpp:76
const char * shdebugstr_guid(const struct _GUID *id)
Definition: debughlp.cpp:438
#define FAILED_UNEXPECTEDLY
Definition: utils.cpp:33
return ret
Definition: mutex.c:146
REFIID riid
Definition: atlbase.h:39
#define debugstr_guid
Definition: kernel32.h:35
const GUID IID_IDataObject
LPITEMIDLIST WINAPI ILFindLastID(LPCITEMIDLIST pidl)
Definition: pidl.c:199
#define IsEqualGUID(rguid1, rguid2)
Definition: guiddef.h:147
const ITEMIDLIST UNALIGNED * LPCITEMIDLIST
Definition: shtypes.idl:42
#define TRACE(s)
Definition: solgame.cpp:4
#define MK_E_NOOBJECT
Definition: winerror.h:3898
#define IID_PPV_ARG(Itype, ppType)

Referenced by BindToHandler().

◆ Compare()

HRESULT WINAPI CShellItem::Compare ( IShellItem oth,
SICHINTF  hint,
int piOrder 
)
override

Implements IShellItem.

Definition at line 188 of file CShellItem.cpp.

189{
190 HRESULT hr;
192 CComPtr<IShellFolder> psfDesktop;
193 LPITEMIDLIST pidl;
194
195 TRACE("(%p,%p,%x,%p)\n", this, oth, hint, piOrder);
196
197 if (piOrder == NULL || oth == NULL)
198 return E_POINTER;
199
200 hr = oth->QueryInterface(IID_PPV_ARG(IPersistIDList, &pIDList));
201 if (SUCCEEDED(hr))
202 {
203 hr = pIDList->GetIDList(&pidl);
204 if (SUCCEEDED(hr))
205 {
206 hr = SHGetDesktopFolder(&psfDesktop);
207 if (SUCCEEDED(hr))
208 {
209 hr = psfDesktop->CompareIDs(hint, m_pidl, pidl);
210 *piOrder = (int)(short)SCODE_CODE(hr);
211 }
212 ILFree(pidl);
213 }
214 }
215
216 if(FAILED(hr))
217 return hr;
218
219 if(*piOrder)
220 return S_FALSE;
221 else
222 return S_OK;
223}
HRESULT hr
Definition: delayimp.cpp:582
unsigned int(__cdecl typeof(jpeg_read_scanlines))(struct jpeg_decompress_struct *
Definition: typeof.h:31
HRESULT QueryInterface([in] REFIID riid, [out, iid_is(riid)] void **ppvObject)
#define S_OK
Definition: intsafe.h:52
#define SUCCEEDED(hr)
Definition: intsafe.h:50
#define FAILED(hr)
Definition: intsafe.h:51
ITEMIDLIST UNALIGNED * LPITEMIDLIST
Definition: shtypes.idl:41
DWORD hint
Definition: vfdcmd.c:88
#define S_FALSE
Definition: winerror.h:3451
#define E_POINTER
Definition: winerror.h:3480
#define SCODE_CODE(sc)
Definition: winerror.h:189

◆ get_parent_pidl()

HRESULT CShellItem::get_parent_pidl ( LPITEMIDLIST parent_pidl)

Definition at line 37 of file CShellItem.cpp.

38{
39 *parent_pidl = ILClone(m_pidl);
40 if (*parent_pidl)
41 {
42 if (ILRemoveLastID(*parent_pidl))
43 return S_OK;
44 else
45 {
46 ILFree(*parent_pidl);
47 *parent_pidl = NULL;
48 return E_INVALIDARG;
49 }
50 }
51 else
52 {
53 *parent_pidl = NULL;
54 return E_OUTOFMEMORY;
55 }
56}
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
#define E_INVALIDARG
Definition: ddrawi.h:101
LPITEMIDLIST WINAPI ILClone(LPCITEMIDLIST pidl)
Definition: pidl.c:238
BOOL WINAPI ILRemoveLastID(LPITEMIDLIST pidl)
Definition: pidl.c:222

Referenced by get_parent_shellfolder(), and GetParent().

◆ get_parent_shellfolder()

HRESULT CShellItem::get_parent_shellfolder ( IShellFolder **  ppsf)

Definition at line 58 of file CShellItem.cpp.

59{
60 HRESULT hr;
61 LPITEMIDLIST parent_pidl;
63
64 hr = get_parent_pidl(&parent_pidl);
65 if (SUCCEEDED(hr))
66 {
67 hr = SHGetDesktopFolder(&desktop);
68 if (SUCCEEDED(hr))
69 hr = desktop->BindToObject(parent_pidl, NULL, IID_PPV_ARG(IShellFolder, ppsf));
70 ILFree(parent_pidl);
71 }
72
73 return hr;
74}
HRESULT get_parent_pidl(LPITEMIDLIST *parent_pidl)
Definition: CShellItem.cpp:37

Referenced by BindToHandler(), and GetAttributes().

◆ get_shellfolder()

HRESULT CShellItem::get_shellfolder ( IBindCtx pbc,
REFIID  riid,
void **  ppvOut 
)

Definition at line 76 of file CShellItem.cpp.

77{
79 CComPtr<IShellFolder> psfDesktop;
81
82 ret = SHGetDesktopFolder(&psfDesktop);
84 return ret;
85
87 psf = psfDesktop;
88 else
89 {
90 ret = psfDesktop->BindToObject(m_pidl, pbc, IID_PPV_ARG(IShellFolder, &psf));
92 return ret;
93 }
94
95 return psf->QueryInterface(riid, ppvOut);
96}

Referenced by BindToHandler().

◆ GetAttributes()

HRESULT WINAPI CShellItem::GetAttributes ( SFGAOF  sfgaoMask,
SFGAOF psfgaoAttribs 
)
override

Implements IShellItem.

Definition at line 162 of file CShellItem.cpp.

163{
164 CComPtr<IShellFolder> parent_folder;
165 LPCITEMIDLIST child_pidl;
166 HRESULT hr;
167
168 TRACE("(%p,%x,%p)\n", this, sfgaoMask, psfgaoAttribs);
169
170 if (_ILIsDesktop(m_pidl))
171 hr = SHGetDesktopFolder(&parent_folder);
172 else
173 hr = get_parent_shellfolder(&parent_folder);
175 return hr;
176
177 child_pidl = ILFindLastID(m_pidl);
178 *psfgaoAttribs = sfgaoMask;
179 hr = parent_folder->GetAttributesOf(1, &child_pidl, psfgaoAttribs);
180 *psfgaoAttribs &= sfgaoMask;
181
183 return hr;
184
185 return (sfgaoMask == *psfgaoAttribs) ? S_OK : S_FALSE;
186}

◆ GetClassID()

HRESULT WINAPI CShellItem::GetClassID ( CLSID pClassID)
override

Implements IPersist.

Definition at line 225 of file CShellItem.cpp.

226{
227 TRACE("(%p,%p)\n", this, pClassID);
228
229 *pClassID = CLSID_ShellItem;
230 return S_OK;
231}

◆ GetDisplayName()

HRESULT WINAPI CShellItem::GetDisplayName ( SIGDN  sigdnName,
LPWSTR ppszName 
)
override

Implements IShellItem.

Definition at line 157 of file CShellItem.cpp.

158{
160}
HRESULT WINAPI SHGetNameFromIDList(PCIDLIST_ABSOLUTE pidl, SIGDN sigdnName, PWSTR *ppszName)
Definition: pidl.c:1610
SIGDN PWSTR * ppszName
Definition: shobjidl.idl:637
SIGDN sigdnName
Definition: shobjidl.idl:637

◆ GetIDList()

HRESULT WINAPI CShellItem::GetIDList ( PIDLIST_ABSOLUTE ppidl)
override

Implements IPersistIDList.

Definition at line 250 of file CShellItem.cpp.

251{
252 TRACE("(%p,%p)\n", this, ppidl);
253
254 *ppidl = ILClone(m_pidl);
255 if (*ppidl)
256 return S_OK;
257 else
258 return E_OUTOFMEMORY;
259}

◆ GetParent()

HRESULT WINAPI CShellItem::GetParent ( IShellItem **  ppsi)
override

Implements IShellItem.

Definition at line 140 of file CShellItem.cpp.

141{
142 HRESULT hr;
143 LPITEMIDLIST parent_pidl;
144
145 TRACE("(%p,%p)\n", this, ppsi);
146
147 hr = get_parent_pidl(&parent_pidl);
148 if (SUCCEEDED(hr))
149 {
150 hr = SHCreateShellItem(NULL, NULL, parent_pidl, ppsi);
151 ILFree(parent_pidl);
152 }
153
154 return hr;
155}
HRESULT WINAPI SHCreateShellItem(PCIDLIST_ABSOLUTE pidlParent, IShellFolder *psfParent, PCUITEMID_CHILD pidl, IShellItem **ppsi)
Definition: CShellItem.cpp:261

◆ SetIDList()

HRESULT WINAPI CShellItem::SetIDList ( PCIDLIST_ABSOLUTE  pidl)
override

Implements IPersistIDList.

Definition at line 233 of file CShellItem.cpp.

234{
235 LPITEMIDLIST new_pidl;
236
237 TRACE("(%p,%p)\n", this, pidlx);
238
239 new_pidl = ILClone(pidlx);
240 if (new_pidl)
241 {
242 ILFree(m_pidl);
243 m_pidl = new_pidl;
244 return S_OK;
245 }
246 else
247 return E_OUTOFMEMORY;
248}

Member Data Documentation

◆ m_pidl


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