3 * LICENSE: LGPL-2.1+ (https://spdx.org/licenses/LGPL-2.1+)
4 * PURPOSE: Folder implementation
5 * COPYRIGHT: Copyright 2015-2018 Mark Jansen (mark.jansen@reactos.org)
10 WINE_DEFAULT_DEBUG_CHANNEL(shell
);
21 HRESULT
CFolder::Initialize(LPITEMIDLIST idlist
)
23 m_idlist
.Attach(ILClone(idlist
));
24 return CShellDispatch_Constructor(IID_PPV_ARG(IShellDispatch
, &m_Application
));
27 HRESULT
CFolder::GetShellFolder(CComPtr
<IShellFolder
>& psfCurrent
)
29 CComPtr
<IShellFolder
> psfDesktop
;
31 HRESULT hr
= SHGetDesktopFolder(&psfDesktop
);
32 if (FAILED_UNEXPECTEDLY(hr
))
35 return psfDesktop
->BindToObject(m_idlist
, NULL
, IID_PPV_ARG(IShellFolder
, &psfCurrent
));
38 // *** Folder methods ***
39 HRESULT STDMETHODCALLTYPE
CFolder::get_Title(BSTR
*pbs
)
44 WCHAR path
[MAX_PATH
+2] = {0};
45 HRESULT hr
= ILGetDisplayNameExW(NULL
, m_idlist
, path
, ILGDN_INFOLDER
);
46 if (FAILED_UNEXPECTEDLY(hr
))
49 *pbs
= SysAllocString(path
);
53 HRESULT STDMETHODCALLTYPE
CFolder::get_Application(IDispatch
**ppid
)
55 TRACE("(%p, %p)\n", this, ppid
);
60 *ppid
= m_Application
;
66 HRESULT STDMETHODCALLTYPE
CFolder::get_Parent(IDispatch
**ppid
)
68 TRACE("(%p %p)\n", this, ppid
);
76 HRESULT STDMETHODCALLTYPE
CFolder::get_ParentFolder(Folder
**ppsf
)
78 TRACE("(%p, %p)\n", this);
85 HRESULT STDMETHODCALLTYPE
CFolder::Items(FolderItems
**ppid
)
87 /* FolderItems_Constructor */
88 return ShellObjectCreatorInit
<CFolderItems
>(static_cast<LPITEMIDLIST
>(m_idlist
), this, IID_PPV_ARG(FolderItems
, ppid
));
91 HRESULT STDMETHODCALLTYPE
CFolder::ParseName(BSTR bName
, FolderItem
**ppid
)
93 TRACE("(%p, %s, %p)\n", this, wine_dbgstr_w(bName
), ppid
);
98 CComPtr
<IShellFolder
> psfCurrent
;
99 HRESULT hr
= GetShellFolder(psfCurrent
);
100 if (FAILED_UNEXPECTEDLY(hr
))
103 CComHeapPtr
<ITEMIDLIST_RELATIVE
> relativePidl
;
104 hr
= psfCurrent
->ParseDisplayName(NULL
, NULL
, bName
, NULL
, &relativePidl
, NULL
);
108 CComHeapPtr
<ITEMIDLIST
> combined
;
109 combined
.Attach(ILCombine(m_idlist
, relativePidl
));
111 return ShellObjectCreatorInit
<CFolderItem
>(this, static_cast<LPITEMIDLIST
>(combined
), IID_PPV_ARG(FolderItem
, ppid
));
114 HRESULT STDMETHODCALLTYPE
CFolder::NewFolder(BSTR bName
, VARIANT vOptions
)
116 TRACE("(%p, %s, %s)\n", this, wine_dbgstr_w(bName
), wine_dbgstr_variant(&vOptions
));
120 HRESULT STDMETHODCALLTYPE
CFolder::MoveHere(VARIANT vItem
, VARIANT vOptions
)
122 TRACE("(%p, %s, %s)\n", this, wine_dbgstr_variant(&vItem
), wine_dbgstr_variant(&vOptions
));
126 HRESULT STDMETHODCALLTYPE
CFolder::CopyHere(VARIANT vItem
, VARIANT vOptions
)
128 TRACE("(%p, %s, %s)\n", this, wine_dbgstr_variant(&vItem
), wine_dbgstr_variant(&vOptions
));
132 HRESULT STDMETHODCALLTYPE
CFolder::GetDetailsOf(VARIANT vItem
, int iColumn
, BSTR
*pbs
)
134 TRACE("(%p, %s, %i, %p)\n", this, wine_dbgstr_variant(&vItem
), iColumn
, pbs
);
139 // *** Folder2 methods ***
140 HRESULT STDMETHODCALLTYPE
CFolder::get_Self(FolderItem
**ppfi
)
142 TRACE("(%p, %p)\n", this, ppfi
);
146 return ShellObjectCreatorInit
<CFolderItem
>(this, static_cast<LPITEMIDLIST
>(m_idlist
), IID_PPV_ARG(FolderItem
, ppfi
));
149 HRESULT STDMETHODCALLTYPE
CFolder::get_OfflineStatus(LONG
*pul
)
151 TRACE("(%p, %p)\n", this, pul
);
155 HRESULT STDMETHODCALLTYPE
CFolder::Synchronize()
157 TRACE("(%p)\n", this);
161 HRESULT STDMETHODCALLTYPE
CFolder::get_HaveToShowWebViewBarricade(VARIANT_BOOL
*pbHaveToShowWebViewBarricade
)
163 TRACE("(%p, %p)\n", this, pbHaveToShowWebViewBarricade
);
167 HRESULT STDMETHODCALLTYPE
CFolder::DismissedWebViewBarricade()
169 TRACE("(%p)\n", this);