2 * Folder implementation
4 * Copyright 2015 Mark Jansen
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with this library; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
23 WINE_DEFAULT_DEBUG_CHANNEL(shell
);
34 void CFolder::Init(LPITEMIDLIST idlist
)
36 m_idlist
.Attach(idlist
);
39 HRESULT
CFolder::GetShellFolder(CComPtr
<IShellFolder
>& psfCurrent
)
41 CComPtr
<IShellFolder
> psfDesktop
;
43 HRESULT hr
= SHGetDesktopFolder(&psfDesktop
);
44 if (FAILED_UNEXPECTEDLY(hr
))
47 return psfDesktop
->BindToObject(m_idlist
, NULL
, IID_PPV_ARG(IShellFolder
, &psfCurrent
));
50 // *** Folder methods ***
51 HRESULT STDMETHODCALLTYPE
CFolder::get_Title(BSTR
*pbs
)
56 WCHAR path
[MAX_PATH
+2] = {0};
57 HRESULT hr
= ILGetDisplayNameExW(NULL
, m_idlist
, path
, ILGDN_INFOLDER
);
58 if (FAILED_UNEXPECTEDLY(hr
))
61 *pbs
= SysAllocString(path
);
65 HRESULT STDMETHODCALLTYPE
CFolder::get_Application(IDispatch
**ppid
)
67 TRACE("(%p, %p)\n", this, ppid
);
71 HRESULT STDMETHODCALLTYPE
CFolder::get_Parent(IDispatch
**ppid
)
73 TRACE("(%p %p)\n", this, ppid
);
77 HRESULT STDMETHODCALLTYPE
CFolder::get_ParentFolder(Folder
**ppsf
)
79 TRACE("(%p, %p)\n", this);
83 HRESULT STDMETHODCALLTYPE
CFolder::Items(FolderItems
**ppid
)
85 CFolderItems
* items
= new CComObject
<CFolderItems
>();
88 HRESULT hr
= items
->Init(ILClone(m_idlist
));
89 if (FAILED_UNEXPECTEDLY(hr
))
99 HRESULT STDMETHODCALLTYPE
CFolder::ParseName(BSTR bName
, FolderItem
**ppid
)
101 TRACE("(%p, %s, %p)\n", this, wine_dbgstr_w(bName
), ppid
);
106 CComPtr
<IShellFolder
> psfCurrent
;
107 HRESULT hr
= GetShellFolder(psfCurrent
);
108 if (FAILED_UNEXPECTEDLY(hr
))
111 CComHeapPtr
<ITEMIDLIST_RELATIVE
> relativePidl
;
112 hr
= psfCurrent
->ParseDisplayName(NULL
, NULL
, bName
, NULL
, &relativePidl
, NULL
);
116 CFolderItem
* item
= new CComObject
<CFolderItem
>();
118 item
->Init(ILCombine(m_idlist
, relativePidl
));
123 HRESULT STDMETHODCALLTYPE
CFolder::NewFolder(BSTR bName
, VARIANT vOptions
)
125 TRACE("(%p, %s, %s)\n", this, wine_dbgstr_w(bName
), wine_dbgstr_variant(&vOptions
));
129 HRESULT STDMETHODCALLTYPE
CFolder::MoveHere(VARIANT vItem
, VARIANT vOptions
)
131 TRACE("(%p, %s, %s)\n", this, wine_dbgstr_variant(&vItem
), wine_dbgstr_variant(&vOptions
));
135 HRESULT STDMETHODCALLTYPE
CFolder::CopyHere(VARIANT vItem
, VARIANT vOptions
)
137 TRACE("(%p, %s, %s)\n", this, wine_dbgstr_variant(&vItem
), wine_dbgstr_variant(&vOptions
));
141 HRESULT STDMETHODCALLTYPE
CFolder::GetDetailsOf(VARIANT vItem
, int iColumn
, BSTR
*pbs
)
143 TRACE("(%p, %s, %i, %p)\n", this, wine_dbgstr_variant(&vItem
), iColumn
, pbs
);
148 // *** Folder2 methods ***
149 HRESULT STDMETHODCALLTYPE
CFolder::get_Self(FolderItem
**ppfi
)
151 TRACE("(%p, %p)\n", this, ppfi
);
154 CFolderItem
* item
= new CComObject
<CFolderItem
>();
156 item
->Init(ILClone(m_idlist
));
161 HRESULT STDMETHODCALLTYPE
CFolder::get_OfflineStatus(LONG
*pul
)
163 TRACE("(%p, %p)\n", this, pul
);
167 HRESULT STDMETHODCALLTYPE
CFolder::Synchronize()
169 TRACE("(%p)\n", this);
173 HRESULT STDMETHODCALLTYPE
CFolder::get_HaveToShowWebViewBarricade(VARIANT_BOOL
*pbHaveToShowWebViewBarricade
)
175 TRACE("(%p, %p)\n", this, pbHaveToShowWebViewBarricade
);
179 HRESULT STDMETHODCALLTYPE
CFolder::DismissedWebViewBarricade()
181 TRACE("(%p)\n", this);