ReactOS 0.4.17-dev-470-gf9e3448
CFolder Class Reference

#include <CFolder.h>

Inheritance diagram for CFolder:
Collaboration diagram for CFolder:

Public Member Functions

 CFolder ()
 
 ~CFolder ()
 
HRESULT Initialize (LPCITEMIDLIST idlist)
 
LPCITEMIDLIST GetAbsoluteIDList ()
 
HWND GetHwnd ()
 
IUnknownGetSite ()
 
STDMETHOD() get_Title (BSTR *pbs) override
 
STDMETHOD() get_Application (IDispatch **ppid) override
 
STDMETHOD() get_Parent (IDispatch **ppid) override
 
STDMETHOD() get_ParentFolder (Folder **ppsf) override
 
STDMETHOD() Items (FolderItems **ppid) override
 
STDMETHOD() ParseName (BSTR bName, FolderItem **ppid) override
 
STDMETHOD() NewFolder (BSTR bName, VARIANT vOptions) override
 
STDMETHOD() MoveHere (VARIANT vItem, VARIANT vOptions) override
 
STDMETHOD() CopyHere (VARIANT vItem, VARIANT vOptions) override
 
STDMETHOD() GetDetailsOf (VARIANT vItem, int iColumn, BSTR *pbs) override
 
STDMETHOD() get_Self (FolderItem **ppfi) override
 
STDMETHOD() get_OfflineStatus (LONG *pul) override
 
STDMETHOD() Synchronize () override
 
STDMETHOD() get_HaveToShowWebViewBarricade (VARIANT_BOOL *pbHaveToShowWebViewBarricade) override
 
STDMETHOD() DismissedWebViewBarricade () 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 ()
 

Private Member Functions

HRESULT GetShellFolder (CComPtr< IShellFolder > &psfCurrent)
 
HRESULT CopyMoveOperation (VARIANT &vItem, VARIANT vOptions, BOOL bCopy)
 

Private Attributes

CComHeapPtr< ITEMIDLISTm_idlist
 
CComPtr< IShellDispatch > m_Application
 

Additional Inherited Members

- 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 12 of file CFolder.h.

Constructor & Destructor Documentation

◆ CFolder()

CFolder::CFolder ( )

Definition at line 16 of file CFolder.cpp.

17{
18}

◆ ~CFolder()

CFolder::~CFolder ( )

Definition at line 20 of file CFolder.cpp.

21{
22}

Member Function Documentation

◆ CopyHere()

HRESULT STDMETHODCALLTYPE CFolder::CopyHere ( VARIANT  vItem,
VARIANT  vOptions 
)
override

Definition at line 207 of file CFolder.cpp.

208{
209 TRACE("(%p, %s, %s)\n", this, wine_dbgstr_variant(&vItem), wine_dbgstr_variant(&vOptions));
210 return CopyMoveOperation(vItem, vOptions, TRUE);
211}
HRESULT CopyMoveOperation(VARIANT &vItem, VARIANT vOptions, BOOL bCopy)
Definition: CFolder.cpp:171
#define TRUE
Definition: types.h:120
#define TRACE(s)
Definition: solgame.cpp:4

◆ CopyMoveOperation()

HRESULT CFolder::CopyMoveOperation ( VARIANT vItem,
VARIANT  vOptions,
BOOL  bCopy 
)
private

Definition at line 171 of file CFolder.cpp.

172{
173 CComPtr<IShellFolder> psfCurrent;
174 HRESULT hr = GetShellFolder(psfCurrent);
175 if (FAILED(hr))
176 return hr;
177
179 if (FAILED_UNEXPECTEDLY(hr = psfCurrent->CreateViewObject(GetHwnd(), IID_PPV_ARG(IDropTarget, &pDT))))
180 return hr;
181
184 return hr;
185
186 if (SUCCEEDED(VariantChangeType(&vOptions, &vOptions, 0, VT_I4)))
187 {
189 if (flags)
190 {
191 extern UINT g_cf_FileOpFlags;
192 if (!g_cf_FileOpFlags)
195 }
196 }
198 return SUCCEEDED(hr) ? S_OK : S_FALSE;
199}
HRESULT SH32_SimulateDropWithSite(IDropTarget *pDT, IDataObject *pDO, DWORD grfKeyState, PPOINTL pPtl, LPDWORD pdwEffect, IUnknown *pSite)
UINT g_cf_FileOpFlags
static HRESULT GetUIObjectFromVariant(VARIANT &vItem, REFIID riid, void **ppv)
Definition: CFolder.cpp:161
IUnknown * GetSite()
Definition: CFolder.h:31
HRESULT GetShellFolder(CComPtr< IShellFolder > &psfCurrent)
Definition: CFolder.cpp:32
HWND GetHwnd()
Definition: CFolder.h:30
HRESULT hr
Definition: delayimp.cpp:582
#define NULL
Definition: types.h:112
@ VT_I4
Definition: compat.h:2298
HRESULT DataObj_SetDWORD(IDataObject *pdtobj, UINT cf, DWORD dwValue)
#define FAILED_UNEXPECTEDLY
Definition: utils.cpp:33
#define L(x)
Definition: resources.c:13
GLbitfield flags
Definition: glext.h:7161
unsigned int UINT
Definition: sysinfo.c:13
#define S_OK
Definition: intsafe.h:52
#define SUCCEEDED(hr)
Definition: intsafe.h:50
#define FAILED(hr)
Definition: intsafe.h:51
#define V_I4(A)
Definition: oleauto.h:247
#define FOF_MULTIDESTFILES
Definition: shellapi.h:141
#define FOF_WANTMAPPINGHANDLE
Definition: shellapi.h:146
HRESULT WINAPI DECLSPEC_HOTPATCH VariantChangeType(VARIANTARG *pvargDest, VARIANTARG *pvargSrc, USHORT wFlags, VARTYPE vt)
Definition: variant.c:962
#define S_FALSE
Definition: winerror.h:3451
#define MK_SHIFT
Definition: winuser.h:2405
UINT WINAPI RegisterClipboardFormatW(_In_ LPCWSTR)
#define MK_CONTROL
Definition: winuser.h:2406
#define MK_LBUTTON
Definition: winuser.h:2403
#define IID_PPV_ARG(Itype, ppType)

Referenced by CopyHere(), and MoveHere().

◆ DismissedWebViewBarricade()

HRESULT STDMETHODCALLTYPE CFolder::DismissedWebViewBarricade ( )
override

Definition at line 274 of file CFolder.cpp.

275{
276 TRACE("(%p)\n", this);
277 return E_NOTIMPL;
278}
#define E_NOTIMPL
Definition: ddrawi.h:99

◆ get_Application()

HRESULT STDMETHODCALLTYPE CFolder::get_Application ( IDispatch **  ppid)
override

Definition at line 51 of file CFolder.cpp.

52{
53 TRACE("(%p, %p)\n", this, ppid);
54
55 if (!ppid)
56 return E_INVALIDARG;
57
58 *ppid = m_Application;
59 (*ppid)->AddRef();
60
61 return S_OK;
62}
CComPtr< IShellDispatch > m_Application
Definition: CFolder.h:22
#define E_INVALIDARG
Definition: ddrawi.h:101

◆ get_HaveToShowWebViewBarricade()

HRESULT STDMETHODCALLTYPE CFolder::get_HaveToShowWebViewBarricade ( VARIANT_BOOL pbHaveToShowWebViewBarricade)
override

Definition at line 268 of file CFolder.cpp.

269{
270 TRACE("(%p, %p)\n", this, pbHaveToShowWebViewBarricade);
271 return E_NOTIMPL;
272}

◆ get_OfflineStatus()

HRESULT STDMETHODCALLTYPE CFolder::get_OfflineStatus ( LONG pul)
override

Definition at line 256 of file CFolder.cpp.

257{
258 TRACE("(%p, %p)\n", this, pul);
259 return E_NOTIMPL;
260}

◆ get_Parent()

HRESULT STDMETHODCALLTYPE CFolder::get_Parent ( IDispatch **  ppid)
override

Definition at line 64 of file CFolder.cpp.

65{
66 TRACE("(%p %p)\n", this, ppid);
67
68 if (ppid)
69 *ppid = NULL;
70
71 return E_NOTIMPL;
72}

◆ get_ParentFolder()

HRESULT STDMETHODCALLTYPE CFolder::get_ParentFolder ( Folder **  ppsf)
override

Definition at line 74 of file CFolder.cpp.

75{
76 TRACE("(%p, %p)\n", this, ppsf);
77
78 *ppsf = NULL;
79 LPCITEMIDLIST pidlAbsSelf = GetAbsoluteIDList();
80 if (ILIsEmpty(pidlAbsSelf))
81 return S_FALSE;
82
83 CComHeapPtr<ITEMIDLIST> pidlParent;
84 if (FAILED(SHILCloneParent(pidlAbsSelf, &pidlParent)))
85 return E_OUTOFMEMORY;
86 return ShellObjectCreatorInit<CFolder>(static_cast<LPITEMIDLIST>(pidlParent), IID_PPV_ARG(Folder, ppsf));
87}
LPCITEMIDLIST GetAbsoluteIDList()
Definition: CFolder.h:29
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
static BOOL ILIsEmpty(_In_opt_ PCUIDLIST_RELATIVE pidl)
Definition: shlobj.h:2536
ITEMIDLIST UNALIGNED * LPITEMIDLIST
Definition: shtypes.idl:41
const ITEMIDLIST UNALIGNED * LPCITEMIDLIST
Definition: shtypes.idl:42

◆ get_Self()

HRESULT STDMETHODCALLTYPE CFolder::get_Self ( FolderItem **  ppfi)
override

Definition at line 247 of file CFolder.cpp.

248{
249 TRACE("(%p, %p)\n", this, ppfi);
250 if (!ppfi)
251 return E_POINTER;
252
253 return ShellObjectCreatorInit<CFolderItem>(this, GetAbsoluteIDList(), IID_PPV_ARG(FolderItem, ppfi));
254}
#define E_POINTER
Definition: winerror.h:3480

◆ get_Title()

HRESULT STDMETHODCALLTYPE CFolder::get_Title ( BSTR pbs)
override

Definition at line 40 of file CFolder.cpp.

41{
42 if (!pbs)
43 return E_POINTER;
44
47 *pbs = SysAllocString(SUCCEEDED(hr) ? path : L"");
48 return S_OK;
49}
CComHeapPtr< ITEMIDLIST > m_idlist
Definition: CFolder.h:21
#define E_FAIL
Definition: ddrawi.h:102
#define MAX_PATH
Definition: compat.h:34
BSTR WINAPI SysAllocString(LPCOLESTR str)
Definition: oleaut.c:238
short WCHAR
Definition: pedump.c:58
BOOL ILGetDisplayNameExW(LPSHELLFOLDER psf, LPCITEMIDLIST pidl, LPWSTR path, DWORD type)
Definition: pidl.c:101
#define ILGDN_INFOLDER
Definition: undocshell.h:86

◆ GetAbsoluteIDList()

LPCITEMIDLIST CFolder::GetAbsoluteIDList ( )
inline

Definition at line 29 of file CFolder.h.

29{ return m_idlist; }

Referenced by get_ParentFolder(), get_Self(), GetShellFolder(), Items(), NewFolder(), and ParseName().

◆ GetDetailsOf()

HRESULT STDMETHODCALLTYPE CFolder::GetDetailsOf ( VARIANT  vItem,
int  iColumn,
BSTR pbs 
)
override

Definition at line 213 of file CFolder.cpp.

214{
215 TRACE("(%p, %s, %i, %p)\n", this, wine_dbgstr_variant(&vItem), iColumn, pbs);
216
219 if (FAILED(hr))
220 return hr;
221
223 if (pidlItem && iColumn == -1)
224 {
225 PWSTR pszTip = NULL;
226 if (SUCCEEDED(hr = SHELL_QueryInfoTipAlloc(psf, QITIPF_DEFAULT, pidlItem, &pszTip)))
227 {
228 hr = SHELL_SysAllocString(pszTip, pbs);
229 SHFree(pszTip);
230 return hr;
231 }
232 }
233 else
234 {
235 VARIANT v;
236 if (pbs && SUCCEEDED(SHELL_GetDetailsOfAsStringVariant(psf, pidlItem, iColumn, &v)))
237 {
238 *pbs = V_BSTR(&v);
239 return S_OK;
240 }
241 }
242 return SHELL_SysAllocString(L"", pbs);
243}
static PCUITEMID_CHILD GetLeafPidlRef(const VARIANT *pV)
void WINAPI SHFree(LPVOID pv)
Definition: shellole.c:370
const GLdouble * v
Definition: gl.h:2040
#define V_BSTR(A)
Definition: oleauto.h:226
static HRESULT SHELL_SysAllocString(PCWSTR in, BSTR *out)
Definition: shell32_main.h:259
HRESULT SHELL_GetDetailsOfAsStringVariant(IShellFolder *pSF, PCUITEMID_CHILD pidl, UINT Column, VARIANT *pVar)
Definition: shlfolder.cpp:116
HRESULT SHELL_QueryInfoTipAlloc(_In_ IShellFolder *pSF, _In_ DWORD dwFlags, _In_ LPCITEMIDLIST pidl, _Out_ PWSTR *ppTip)
Definition: shlfolder.cpp:162
#define QITIPF_DEFAULT
Definition: shlobj.h:699
const ITEMID_CHILD UNALIGNED * PCUITEMID_CHILD
Definition: shtypes.idl:70
uint16_t * PWSTR
Definition: typedefs.h:56

◆ GetHwnd()

HWND CFolder::GetHwnd ( )
inline

Definition at line 30 of file CFolder.h.

30{ return NULL; }

Referenced by CopyMoveOperation().

◆ GetShellFolder()

HRESULT CFolder::GetShellFolder ( CComPtr< IShellFolder > &  psfCurrent)
private

Definition at line 32 of file CFolder.cpp.

33{
36 return hr;
37}
SHSTDAPI SHBindToObject(_In_opt_ IShellFolder *psf, _In_ LPCITEMIDLIST pidl, _In_opt_ IBindCtx *pBindCtx, _In_ REFIID riid, _Out_ void **ppvObj)

Referenced by CopyMoveOperation(), GetDetailsOf(), and ParseName().

◆ GetSite()

IUnknown * CFolder::GetSite ( )
inline

Definition at line 31 of file CFolder.h.

31{ return NULL; }

Referenced by CopyMoveOperation().

◆ Initialize()

HRESULT CFolder::Initialize ( LPCITEMIDLIST  idlist)

Definition at line 24 of file CFolder.cpp.

25{
26 m_idlist.Attach(ILClone(idlist));
27 if (!m_idlist)
28 return E_OUTOFMEMORY;
30}
HRESULT WINAPI CShellDispatch_Constructor(REFIID riid, LPVOID *ppvOut)
LPITEMIDLIST WINAPI ILClone(LPCITEMIDLIST pidl)
Definition: pidl.c:238

◆ Items()

HRESULT STDMETHODCALLTYPE CFolder::Items ( FolderItems **  ppid)
override

Definition at line 89 of file CFolder.cpp.

90{
91 /* FolderItems_Constructor */
92 return ShellObjectCreatorInit<CFolderItems>(GetAbsoluteIDList(), this, IID_PPV_ARG(FolderItems, ppid));
93}

◆ MoveHere()

HRESULT STDMETHODCALLTYPE CFolder::MoveHere ( VARIANT  vItem,
VARIANT  vOptions 
)
override

Definition at line 201 of file CFolder.cpp.

202{
203 TRACE("(%p, %s, %s)\n", this, wine_dbgstr_variant(&vItem), wine_dbgstr_variant(&vOptions));
204 return CopyMoveOperation(vItem, vOptions, FALSE);
205}
#define FALSE
Definition: types.h:117

◆ NewFolder()

HRESULT STDMETHODCALLTYPE CFolder::NewFolder ( BSTR  bName,
VARIANT  vOptions 
)
override

Definition at line 127 of file CFolder.cpp.

128{
129 TRACE("(%p, %s, %s)\n", this, wine_dbgstr_w(bName), wine_dbgstr_variant(&vOptions));
130
131 // Note: MSDN says vOptions "is not currently used"
132 CComPtr<IStorage> pStg, pStgNew;
134 if (FAILED(hr))
135 goto tryfs;//return hr;
136 hr = pStg->CreateStorage(bName, STGM_FAILIFTHERE, 0, 0, &pStgNew);
137 return (hr == STG_E_FILEALREADYEXISTS) ? S_OK : hr;
138
139tryfs: // HACKFIX: Our CFSFolder does not yet support IStorage, try it directly
140 LPCITEMIDLIST pidlAbsSelf = GetAbsoluteIDList();
141 if (SHGetAttributes(NULL, pidlAbsSelf, SFGAO_FILESYSTEM) == SFGAO_FILESYSTEM)
142 {
143 CComHeapPtr<WCHAR> pszDirPath;
144 if (SUCCEEDED(SHELL_DisplayNameOf(NULL, pidlAbsSelf, SHGDN_FORPARSING, &pszDirPath)))
145 {
146 DWORD cch = wcslen(pszDirPath) + 1 + wcslen(bName) + 1, attr;
147 if (PWSTR pszPath = (PWSTR)SHAlloc(cch * sizeof(WCHAR)))
148 {
149 StringCchPrintfW(pszPath, cch, L"%s\\%s", &pszDirPath[0], bName);
150 if (PathFileExistsAndAttributesW(pszPath, &attr))
152 else
153 hr = Win32CreateDirectoryW(pszPath, NULL) ? S_OK : E_FAIL;
154 SHFree(pszPath);
155 }
156 }
157 }
158 return hr;
159}
EXTERN_C BOOL WINAPI Win32CreateDirectoryW(LPCWSTR path, LPSECURITY_ATTRIBUTES sec)
Definition: shlfileop.cpp:504
_ACRTIMP size_t __cdecl wcslen(const wchar_t *)
Definition: wcs.c:2988
HRESULT SHELL_DisplayNameOf(_In_opt_ IShellFolder *psf, _In_ LPCITEMIDLIST pidl, _In_opt_ UINT Flags, _Out_ PWSTR *ppStr)
Definition: utils.cpp:468
DWORD SHGetAttributes(_In_ IShellFolder *psf, _In_ LPCITEMIDLIST pidl, _In_ DWORD dwAttributes)
Definition: utils.cpp:510
LPVOID WINAPI SHAlloc(SIZE_T len)
Definition: shellole.c:348
BOOL WINAPI PathFileExistsAndAttributesW(LPCWSTR lpszPath, DWORD *dwAttr)
Definition: path.c:747
unsigned long DWORD
Definition: ntddk_ex.h:95
#define wine_dbgstr_w
Definition: kernel32.h:34
#define FILE_ATTRIBUTE_DIRECTORY
Definition: nt_native.h:705
#define STGM_FAILIFTHERE
Definition: objbase.h:947
_In_ UINT _In_ UINT cch
Definition: shellapi.h:432
STRSAFEAPI StringCchPrintfW(STRSAFE_LPWSTR pszDest, size_t cchDest, STRSAFE_LPCWSTR pszFormat,...)
Definition: strsafe.h:530
Definition: cookie.c:202
#define STG_E_FILEALREADYEXISTS
Definition: winerror.h:3674

◆ ParseName()

HRESULT STDMETHODCALLTYPE CFolder::ParseName ( BSTR  bName,
FolderItem **  ppid 
)
override

Definition at line 95 of file CFolder.cpp.

96{
97 TRACE("(%p, %s, %p)\n", this, wine_dbgstr_w(bName), ppid);
98 if (!ppid)
99 return E_POINTER;
100 *ppid = NULL;
101
102 CComPtr<IShellFolder> psfCurrent;
103 HRESULT hr = GetShellFolder(psfCurrent);
104 if (FAILED(hr))
105 return hr;
106
108 hr = psfCurrent->ParseDisplayName(NULL, NULL, bName, NULL, &relativePidl, NULL);
109 if (!SUCCEEDED(hr))
110 return S_FALSE;
112 combined.Attach(ILCombine(GetAbsoluteIDList(), relativePidl));
113 if (!combined)
114 return E_OUTOFMEMORY;
115
116 CComHeapPtr<ITEMIDLIST> parentPidl;
117 if (FAILED(hr = SHILCloneParent((LPCITEMIDLIST)combined, &parentPidl)))
118 return hr;
119 CComPtr<Folder> pParent; // The parent Folder of the thing we just parsed
120 hr = ShellObjectCreatorInit<CFolder>(parentPidl, IID_PPV_ARG(Folder, &pParent));
121 if (FAILED(hr))
122 return hr;
123
124 return ShellObjectCreatorInit<CFolderItem>(pParent, static_cast<LPITEMIDLIST>(combined), IID_PPV_ARG(FolderItem, ppid));
125}
void Attach(T *lp)
Definition: atlalloc.h:162
FxObject * pParent
Definition: fxdpcapi.cpp:86
LPITEMIDLIST WINAPI ILCombine(LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2)
Definition: pidl.c:817

◆ Synchronize()

HRESULT STDMETHODCALLTYPE CFolder::Synchronize ( )
override

Definition at line 262 of file CFolder.cpp.

263{
264 TRACE("(%p)\n", this);
265 return E_NOTIMPL;
266}

Member Data Documentation

◆ m_Application

CComPtr<IShellDispatch> CFolder::m_Application
private

Definition at line 22 of file CFolder.h.

Referenced by get_Application(), and Initialize().

◆ m_idlist

CComHeapPtr<ITEMIDLIST> CFolder::m_idlist
private

Definition at line 21 of file CFolder.h.

Referenced by get_Title(), GetAbsoluteIDList(), and Initialize().


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