4 * Copyright 2008 Johannes Anderwald <johannes.anderwald@reactos.org>
5 * Copyright 2009 Andrew Hill
7 * This library is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU Lesser General Public
9 * License as published by the Free Software Foundation; either
10 * version 2.1 of the License, or (at your option) any later version.
12 * This library is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * Lesser General Public License for more details.
17 * You should have received a copy of the GNU Lesser General Public
18 * License along with this library; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
24 WINE_DEFAULT_DEBUG_CHANNEL (shell
);
26 CFontsFolder::CFontsFolder()
31 CFontsFolder::~CFontsFolder()
37 HRESULT WINAPI
CFontsFolder::ParseDisplayName(HWND hwndOwner
, LPBC pbc
, LPOLESTR lpszDisplayName
,
38 ULONG
*pchEaten
, PIDLIST_RELATIVE
*ppidl
, ULONG
*pdwAttributes
)
40 return m_pisfInner
->ParseDisplayName(hwndOwner
, pbc
, lpszDisplayName
, pchEaten
, ppidl
, pdwAttributes
);
43 HRESULT WINAPI
CFontsFolder::EnumObjects(HWND hwndOwner
, DWORD dwFlags
, LPENUMIDLIST
*ppEnumIDList
)
45 return m_pisfInner
->EnumObjects(hwndOwner
, dwFlags
, ppEnumIDList
);
48 HRESULT WINAPI
CFontsFolder::BindToObject(PCUIDLIST_RELATIVE pidl
, LPBC pbcReserved
, REFIID riid
, LPVOID
*ppvOut
)
50 return m_pisfInner
->BindToObject(pidl
, pbcReserved
, riid
, ppvOut
);
53 HRESULT WINAPI
CFontsFolder::BindToStorage(PCUIDLIST_RELATIVE pidl
, LPBC pbcReserved
, REFIID riid
, LPVOID
*ppvOut
)
55 return m_pisfInner
->BindToStorage(pidl
, pbcReserved
, riid
, ppvOut
);
58 HRESULT WINAPI
CFontsFolder::CompareIDs(LPARAM lParam
, PCUIDLIST_RELATIVE pidl1
, PCUIDLIST_RELATIVE pidl2
)
60 return m_pisfInner
->CompareIDs(lParam
, pidl1
, pidl2
);
63 HRESULT WINAPI
CFontsFolder::CreateViewObject(HWND hwndOwner
, REFIID riid
, LPVOID
*ppvOut
)
65 return m_pisfInner
->CreateViewObject(hwndOwner
, riid
, ppvOut
);
68 HRESULT WINAPI
CFontsFolder::GetAttributesOf(UINT cidl
, PCUITEMID_CHILD_ARRAY apidl
, DWORD
*rgfInOut
)
70 static const DWORD dwFontsAttributes
=
71 SFGAO_STORAGE
| SFGAO_STORAGEANCESTOR
| SFGAO_FILESYSANCESTOR
|
72 SFGAO_FOLDER
| SFGAO_FILESYSTEM
| SFGAO_HASSUBFOLDER
;
75 return m_pisfInner
->GetAttributesOf(cidl
, apidl
, rgfInOut
);
77 if (!rgfInOut
|| !apidl
)
83 *rgfInOut
&= dwFontsAttributes
;
85 /* make sure SFGAO_VALIDATE is cleared, some apps depend on that */
86 *rgfInOut
&= ~SFGAO_VALIDATE
;
91 HRESULT WINAPI
CFontsFolder::GetUIObjectOf(HWND hwndOwner
, UINT cidl
, PCUITEMID_CHILD_ARRAY apidl
,
92 REFIID riid
, UINT
* prgfInOut
, LPVOID
* ppvOut
)
94 return m_pisfInner
->GetUIObjectOf(hwndOwner
, cidl
, apidl
, riid
, prgfInOut
, ppvOut
);
97 HRESULT WINAPI
CFontsFolder::GetDisplayNameOf(PCUITEMID_CHILD pidl
, DWORD dwFlags
, LPSTRRET strRet
)
102 /* If we got an fs item just forward to the fs folder */
103 if (!_ILIsSpecialFolder(pidl
))
104 return m_pisfInner
->GetDisplayNameOf(pidl
, dwFlags
, strRet
);
106 /* The caller wants our path. Let fs folder handle it */
107 if ((GET_SHGDN_RELATION (dwFlags
) == SHGDN_NORMAL
) &&
108 (GET_SHGDN_FOR (dwFlags
) & SHGDN_FORPARSING
))
110 /* Give an empty pidl to the fs folder to tell us its path */
112 pidl
= ILGetNext(pidl
);
114 return m_pisfInner
->GetDisplayNameOf(pidl
, dwFlags
, strRet
);
117 ERR("Got empty pidl without SHGDN_FORPARSING\n");
121 HRESULT WINAPI
CFontsFolder::SetNameOf(HWND hwndOwner
, PCUITEMID_CHILD pidl
, /* simple pidl */
122 LPCOLESTR lpName
, DWORD dwFlags
, PITEMID_CHILD
*pPidlOut
)
124 return m_pisfInner
->SetNameOf(hwndOwner
, pidl
, lpName
, dwFlags
, pPidlOut
);
127 HRESULT WINAPI
CFontsFolder::GetDefaultSearchGUID(GUID
*pguid
)
129 return m_pisfInner
->GetDefaultSearchGUID(pguid
);
132 HRESULT WINAPI
CFontsFolder::EnumSearches(IEnumExtraSearch
** ppenum
)
134 return m_pisfInner
->EnumSearches(ppenum
);
137 HRESULT WINAPI
CFontsFolder::GetDefaultColumn(DWORD dwRes
, ULONG
*pSort
, ULONG
*pDisplay
)
139 return m_pisfInner
->GetDefaultColumn(dwRes
, pSort
, pDisplay
);
142 HRESULT WINAPI
CFontsFolder::GetDefaultColumnState(UINT iColumn
, DWORD
*pcsFlags
)
144 return m_pisfInner
->GetDefaultColumnState(iColumn
, pcsFlags
);
147 HRESULT WINAPI
CFontsFolder::GetDetailsEx(PCUITEMID_CHILD pidl
, const SHCOLUMNID
*pscid
, VARIANT
*pv
)
149 return m_pisfInner
->GetDetailsEx(pidl
, pscid
, pv
);
152 HRESULT WINAPI
CFontsFolder::GetDetailsOf(PCUITEMID_CHILD pidl
, UINT iColumn
, SHELLDETAILS
*psd
)
154 return m_pisfInner
->GetDetailsOf(pidl
, iColumn
, psd
);
157 HRESULT WINAPI
CFontsFolder::MapColumnToSCID(UINT column
, SHCOLUMNID
*pscid
)
159 return m_pisfInner
->MapColumnToSCID(column
, pscid
);
162 HRESULT WINAPI
CFontsFolder::GetClassID(CLSID
*lpClassId
)
167 *lpClassId
= CLSID_FontsFolderShortcut
;
172 HRESULT WINAPI
CFontsFolder::Initialize(LPCITEMIDLIST pidl
)
174 m_pidlInner
= ILClone(pidl
);
176 return E_OUTOFMEMORY
;
178 return SHELL32_CoCreateInitSF(m_pidlInner
,
179 &CLSID_ShellFSFolder
,
181 IID_PPV_ARG(IShellFolder2
, &m_pisfInner
));
184 HRESULT WINAPI
CFontsFolder::GetCurFolder(PIDLIST_ABSOLUTE
*pidl
)
188 *pidl
= ILClone(m_pidlInner
);