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 TRACE("(%p, %p)\n", this, ppid
);
89 HRESULT STDMETHODCALLTYPE
CFolder::ParseName(BSTR bName
, FolderItem
**ppid
)
91 TRACE("(%p, %s, %p)\n", this, wine_dbgstr_w(bName
), ppid
);
96 CComPtr
<IShellFolder
> psfCurrent
;
97 HRESULT hr
= GetShellFolder(psfCurrent
);
98 if (FAILED_UNEXPECTEDLY(hr
))
101 CComHeapPtr
<ITEMIDLIST_RELATIVE
> relativePidl
;
102 hr
= psfCurrent
->ParseDisplayName(NULL
, NULL
, bName
, NULL
, &relativePidl
, NULL
);
106 CFolderItem
* item
= new CComObject
<CFolderItem
>();
108 item
->Init(ILCombine(m_idlist
, relativePidl
));
113 HRESULT STDMETHODCALLTYPE
CFolder::NewFolder(BSTR bName
, VARIANT vOptions
)
115 TRACE("(%p, %s, %s)\n", this, wine_dbgstr_w(bName
), wine_dbgstr_variant(&vOptions
));
119 HRESULT STDMETHODCALLTYPE
CFolder::MoveHere(VARIANT vItem
, VARIANT vOptions
)
121 TRACE("(%p, %s, %s)\n", this, wine_dbgstr_variant(&vItem
), wine_dbgstr_variant(&vOptions
));
125 HRESULT STDMETHODCALLTYPE
CFolder::CopyHere(VARIANT vItem
, VARIANT vOptions
)
127 TRACE("(%p, %s, %s)\n", this, wine_dbgstr_variant(&vItem
), wine_dbgstr_variant(&vOptions
));
131 HRESULT STDMETHODCALLTYPE
CFolder::GetDetailsOf(VARIANT vItem
, int iColumn
, BSTR
*pbs
)
133 TRACE("(%p, %s, %i, %p)\n", this, wine_dbgstr_variant(&vItem
), iColumn
, pbs
);
138 // *** Folder2 methods ***
139 HRESULT STDMETHODCALLTYPE
CFolder::get_Self(FolderItem
**ppfi
)
141 TRACE("(%p, %p)\n", this, ppfi
);
144 CFolderItem
* item
= new CComObject
<CFolderItem
>();
146 item
->Init(ILClone(m_idlist
));
151 HRESULT STDMETHODCALLTYPE
CFolder::get_OfflineStatus(LONG
*pul
)
153 TRACE("(%p, %p)\n", this, pul
);
157 HRESULT STDMETHODCALLTYPE
CFolder::Synchronize()
159 TRACE("(%p)\n", this);
163 HRESULT STDMETHODCALLTYPE
CFolder::get_HaveToShowWebViewBarricade(VARIANT_BOOL
*pbHaveToShowWebViewBarricade
)
165 TRACE("(%p, %p)\n", this, pbHaveToShowWebViewBarricade
);
169 HRESULT STDMETHODCALLTYPE
CFolder::DismissedWebViewBarricade()
171 TRACE("(%p)\n", this);