95edc910fe34f861e007ce9faeb4fcfe458db42b
[reactos.git] / reactos / dll / win32 / shell32 / CFolderItems.cpp
1 /*
2 * FolderItem(s) implementation
3 *
4 * Copyright 2015 Mark Jansen
5 *
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.
10 *
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.
15 *
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
19 */
20
21 #include "precomp.h"
22
23 WINE_DEFAULT_DEBUG_CHANNEL(shell);
24
25
26 CFolderItem::CFolderItem()
27 {
28 }
29
30 CFolderItem::~CFolderItem()
31 {
32 }
33
34 void CFolderItem::Init(LPITEMIDLIST idlist)
35 {
36 m_idlist.Attach(idlist);
37 }
38
39 // *** FolderItem methods ***
40 HRESULT STDMETHODCALLTYPE CFolderItem::get_Application(IDispatch **ppid)
41 {
42 TRACE("(%p, %p)\n", this, ppid);
43 return E_NOTIMPL;
44 }
45
46 HRESULT STDMETHODCALLTYPE CFolderItem::get_Parent(IDispatch **ppid)
47 {
48 TRACE("(%p, %p)\n", this, ppid);
49 return E_NOTIMPL;
50 }
51
52 HRESULT STDMETHODCALLTYPE CFolderItem::get_Name(BSTR *pbs)
53 {
54 TRACE("(%p, %p)\n", this, pbs);
55 return E_NOTIMPL;
56 }
57
58 HRESULT STDMETHODCALLTYPE CFolderItem::put_Name(BSTR bs)
59 {
60 TRACE("(%p, %s)\n", this, wine_dbgstr_w(bs));
61 return E_NOTIMPL;
62 }
63
64 HRESULT STDMETHODCALLTYPE CFolderItem::get_Path(BSTR *pbs)
65 {
66 CComPtr<IShellFolder> psfDesktop;
67
68 HRESULT hr = SHGetDesktopFolder(&psfDesktop);
69 if (!SUCCEEDED(hr))
70 return hr;
71
72 STRRET strret;
73 hr = psfDesktop->GetDisplayNameOf(m_idlist, SHGDN_FORPARSING, &strret);
74 if (FAILED_UNEXPECTEDLY(hr))
75 return hr;
76
77 return StrRetToBSTR(&strret, NULL, pbs);
78 }
79
80 HRESULT STDMETHODCALLTYPE CFolderItem::get_GetLink(IDispatch **ppid)
81 {
82 TRACE("(%p, %p)\n", this, ppid);
83 return E_NOTIMPL;
84 }
85
86 HRESULT STDMETHODCALLTYPE CFolderItem::get_GetFolder(IDispatch **ppid)
87 {
88 TRACE("(%p, %p)\n", this, ppid);
89 return E_NOTIMPL;
90 }
91
92 HRESULT STDMETHODCALLTYPE CFolderItem::get_IsLink(VARIANT_BOOL *pb)
93 {
94 TRACE("(%p, %p)\n", this, pb);
95 return E_NOTIMPL;
96 }
97
98 HRESULT STDMETHODCALLTYPE CFolderItem::get_IsFolder(VARIANT_BOOL *pb)
99 {
100 TRACE("(%p, %p)\n", this, pb);
101 return E_NOTIMPL;
102 }
103
104 HRESULT STDMETHODCALLTYPE CFolderItem::get_IsFileSystem(VARIANT_BOOL *pb)
105 {
106 TRACE("(%p, %p)\n", this, pb);
107 return E_NOTIMPL;
108 }
109
110 HRESULT STDMETHODCALLTYPE CFolderItem::get_IsBrowsable(VARIANT_BOOL *pb)
111 {
112 TRACE("(%p, %p)\n", this, pb);
113 return E_NOTIMPL;
114 }
115
116 HRESULT STDMETHODCALLTYPE CFolderItem::get_ModifyDate(DATE *pdt)
117 {
118 TRACE("(%p, %p)\n", this, pdt);
119 return E_NOTIMPL;
120 }
121
122 HRESULT STDMETHODCALLTYPE CFolderItem::put_ModifyDate(DATE dt)
123 {
124 TRACE("(%p, %f)\n", this, dt);
125 return E_NOTIMPL;
126 }
127
128 HRESULT STDMETHODCALLTYPE CFolderItem::get_Size(LONG *pul)
129 {
130 TRACE("(%p, %p)\n", this, pul);
131 return E_NOTIMPL;
132 }
133
134 HRESULT STDMETHODCALLTYPE CFolderItem::get_Type(BSTR *pbs)
135 {
136 TRACE("(%p, %p)\n", this, pbs);
137 return E_NOTIMPL;
138 }
139
140 HRESULT STDMETHODCALLTYPE CFolderItem::Verbs(FolderItemVerbs **ppfic)
141 {
142 if (!ppfic)
143 return E_POINTER;
144 CFolderItemVerbs* verbs = new CComObject<CFolderItemVerbs>();
145 HRESULT hr = verbs->Init(m_idlist);
146 if (FAILED_UNEXPECTEDLY(hr))
147 {
148 delete verbs;
149 return hr;
150 }
151 verbs->AddRef();
152 *ppfic = verbs;
153 return S_OK;
154 }
155
156 HRESULT STDMETHODCALLTYPE CFolderItem::InvokeVerb(VARIANT vVerb)
157 {
158 TRACE("(%p, %s)\n", this, wine_dbgstr_variant(&vVerb));
159 return E_NOTIMPL;
160 }
161
162
163
164 CFolderItems::CFolderItems()
165 {
166 }
167
168 CFolderItems::~CFolderItems()
169 {
170 }
171
172 // *** FolderItems methods ***
173 HRESULT STDMETHODCALLTYPE CFolderItems::get_Count(long *plCount)
174 {
175 TRACE("(%p, %p)\n", this, plCount);
176 return E_NOTIMPL;
177 }
178
179 HRESULT STDMETHODCALLTYPE CFolderItems::get_Application(IDispatch **ppid)
180 {
181 TRACE("(%p, %p)\n", this, ppid);
182 return E_NOTIMPL;
183 }
184
185 HRESULT STDMETHODCALLTYPE CFolderItems::get_Parent(IDispatch **ppid)
186 {
187 TRACE("(%p, %p)\n", this, ppid);
188 return E_NOTIMPL;
189 }
190
191 HRESULT STDMETHODCALLTYPE CFolderItems::Item(VARIANT index, FolderItem **ppid)
192 {
193 TRACE("(%p, %s, %p)\n", this, wine_dbgstr_variant(&index), ppid);
194 return E_NOTIMPL;
195 }
196
197 HRESULT STDMETHODCALLTYPE CFolderItems::_NewEnum(IUnknown **ppunk)
198 {
199 TRACE("(%p, %p)\n", this, ppunk);
200 return E_NOTIMPL;
201 }
202