- new interface declaration for IShellfolder2

- added this interface to all shell folders
- small fixes to shellview (crash with native comdlg32)
oldstable
Juergen Schmied 1999-11-07 22:31:18 +00:00 committed by Alexandre Julliard
parent 38eae846bb
commit 15602ccf40
3 changed files with 325 additions and 79 deletions

View File

@ -69,7 +69,7 @@ static LPCWSTR GetNextElementW(LPCWSTR pszNext,LPWSTR pszOut,DWORD dwOut)
static HRESULT SHELL32_ParseNextElement( static HRESULT SHELL32_ParseNextElement(
HWND hwndOwner, HWND hwndOwner,
IShellFolder * psf, IShellFolder2 * psf,
LPITEMIDLIST * pidlInOut, LPITEMIDLIST * pidlInOut,
LPOLESTR szNext, LPOLESTR szNext,
DWORD *pEaten, DWORD *pEaten,
@ -117,7 +117,7 @@ static HRESULT SHELL32_CoCreateInitSF (
{ {
HRESULT hr; HRESULT hr;
LPITEMIDLIST absPidl; LPITEMIDLIST absPidl;
IShellFolder *pShellFolder; IShellFolder2 *pShellFolder;
IPersistFolder *pPersistFolder; IPersistFolder *pPersistFolder;
TRACE("%p %p\n", pidlRoot, pidlChild); TRACE("%p %p\n", pidlRoot, pidlChild);
@ -144,14 +144,14 @@ static HRESULT SHELL32_CoCreateInitSF (
} }
static HRESULT SHELL32_GetDisplayNameOfChild( static HRESULT SHELL32_GetDisplayNameOfChild(
IShellFolder * psf, IShellFolder2 * psf,
LPCITEMIDLIST pidl, LPCITEMIDLIST pidl,
DWORD dwFlags, DWORD dwFlags,
LPSTR szOut, LPSTR szOut,
DWORD dwOutLen) DWORD dwOutLen)
{ {
LPITEMIDLIST pidlFirst, pidlNext; LPITEMIDLIST pidlFirst, pidlNext;
IShellFolder * psfChild; IShellFolder2 * psfChild;
HRESULT hr = E_OUTOFMEMORY; HRESULT hr = E_OUTOFMEMORY;
STRRET strTemp; STRRET strTemp;
@ -187,7 +187,7 @@ static HRESULT SHELL32_GetDisplayNameOfChild(
typedef struct typedef struct
{ {
ICOM_VFIELD(IShellFolder); ICOM_VFIELD(IShellFolder2);
DWORD ref; DWORD ref;
ICOM_VTABLE(IPersistFolder)* lpvtblPersistFolder; ICOM_VTABLE(IPersistFolder)* lpvtblPersistFolder;
@ -202,7 +202,7 @@ typedef struct
BOOL fAcceptFmt; /* flag for pending Drop */ BOOL fAcceptFmt; /* flag for pending Drop */
} IGenericSFImpl; } IGenericSFImpl;
static struct ICOM_VTABLE(IShellFolder) sfvt; static struct ICOM_VTABLE(IShellFolder2) sfvt;
static struct ICOM_VTABLE(IPersistFolder) psfvt; static struct ICOM_VTABLE(IPersistFolder) psfvt;
static struct ICOM_VTABLE(IDropTarget) dtvt; static struct ICOM_VTABLE(IDropTarget) dtvt;
@ -218,7 +218,7 @@ static struct ICOM_VTABLE(IDropTarget) dtvt;
/************************************************************************** /**************************************************************************
* registers clipboardformat once * registers clipboardformat once
*/ */
static void SF_RegisterClipFmt (IShellFolder * iface) static void SF_RegisterClipFmt (IShellFolder2 * iface)
{ {
ICOM_THIS(IGenericSFImpl, iface); ICOM_THIS(IGenericSFImpl, iface);
@ -302,7 +302,7 @@ static IShellFolder * IShellFolder_Constructor(
* LPVOID* ppvObject [out] Interface* to hold the result * LPVOID* ppvObject [out] Interface* to hold the result
*/ */
static HRESULT WINAPI IShellFolder_fnQueryInterface( static HRESULT WINAPI IShellFolder_fnQueryInterface(
IShellFolder * iface, IShellFolder2 * iface,
REFIID riid, REFIID riid,
LPVOID *ppvObj) LPVOID *ppvObj)
{ {
@ -321,6 +321,10 @@ static HRESULT WINAPI IShellFolder_fnQueryInterface(
{ {
*ppvObj = (IShellFolder*)This; *ppvObj = (IShellFolder*)This;
} }
else if(IsEqualIID(riid, &IID_IShellFolder2))
{
*ppvObj = (IShellFolder2*)This;
}
else if(IsEqualIID(riid, &IID_IPersist)) else if(IsEqualIID(riid, &IID_IPersist))
{ {
*ppvObj = (IPersistFolder*)&(This->lpvtblPersistFolder); *ppvObj = (IPersistFolder*)&(This->lpvtblPersistFolder);
@ -332,7 +336,7 @@ static HRESULT WINAPI IShellFolder_fnQueryInterface(
else if(IsEqualIID(riid, &IID_IDropTarget)) else if(IsEqualIID(riid, &IID_IDropTarget))
{ {
*ppvObj = (IDropTarget*)&(This->lpvtblDropTarget); *ppvObj = (IDropTarget*)&(This->lpvtblDropTarget);
SF_RegisterClipFmt((IShellFolder*)This); SF_RegisterClipFmt((IShellFolder2*)This);
} }
if(*ppvObj) if(*ppvObj)
@ -349,7 +353,7 @@ static HRESULT WINAPI IShellFolder_fnQueryInterface(
* IShellFolder_AddRef * IShellFolder_AddRef
*/ */
static ULONG WINAPI IShellFolder_fnAddRef(IShellFolder * iface) static ULONG WINAPI IShellFolder_fnAddRef(IShellFolder2 * iface)
{ {
ICOM_THIS(IGenericSFImpl, iface); ICOM_THIS(IGenericSFImpl, iface);
@ -365,7 +369,7 @@ static ULONG WINAPI IShellFolder_fnAddRef(IShellFolder * iface)
/************************************************************************** /**************************************************************************
* IShellFolder_fnRelease * IShellFolder_fnRelease
*/ */
static ULONG WINAPI IShellFolder_fnRelease(IShellFolder * iface) static ULONG WINAPI IShellFolder_fnRelease(IShellFolder2 * iface)
{ {
ICOM_THIS(IGenericSFImpl, iface); ICOM_THIS(IGenericSFImpl, iface);
@ -378,7 +382,7 @@ static ULONG WINAPI IShellFolder_fnRelease(IShellFolder * iface)
if (!--(This->ref)) if (!--(This->ref))
{ TRACE("-- destroying IShellFolder(%p)\n",This); { TRACE("-- destroying IShellFolder(%p)\n",This);
if (pdesktopfolder == iface) if (pdesktopfolder == (IShellFolder*) iface)
{ pdesktopfolder=NULL; { pdesktopfolder=NULL;
TRACE("-- destroyed IShellFolder(%p) was Desktopfolder\n",This); TRACE("-- destroyed IShellFolder(%p) was Desktopfolder\n",This);
} }
@ -418,7 +422,7 @@ static ULONG WINAPI IShellFolder_fnRelease(IShellFolder * iface)
* pchEaten: not set like in windows * pchEaten: not set like in windows
*/ */
static HRESULT WINAPI IShellFolder_fnParseDisplayName( static HRESULT WINAPI IShellFolder_fnParseDisplayName(
IShellFolder * iface, IShellFolder2 * iface,
HWND hwndOwner, HWND hwndOwner,
LPBC pbcReserved, LPBC pbcReserved,
LPOLESTR lpszDisplayName, LPOLESTR lpszDisplayName,
@ -461,7 +465,7 @@ static HRESULT WINAPI IShellFolder_fnParseDisplayName(
/* try to analyse the next element */ /* try to analyse the next element */
if (szNext && *szNext) if (szNext && *szNext)
{ {
hr = SHELL32_ParseNextElement(hwndOwner, (IShellFolder*)This, &pidlTemp, (LPOLESTR)szNext, pchEaten, pdwAttributes); hr = SHELL32_ParseNextElement(hwndOwner, (IShellFolder2*)This, &pidlTemp, (LPOLESTR)szNext, pchEaten, pdwAttributes);
} }
else else
{ {
@ -485,7 +489,7 @@ static HRESULT WINAPI IShellFolder_fnParseDisplayName(
* LPENUMIDLIST* ppenumIDList //[out] IEnumIDList interface * LPENUMIDLIST* ppenumIDList //[out] IEnumIDList interface
*/ */
static HRESULT WINAPI IShellFolder_fnEnumObjects( static HRESULT WINAPI IShellFolder_fnEnumObjects(
IShellFolder * iface, IShellFolder2 * iface,
HWND hwndOwner, HWND hwndOwner,
DWORD dwFlags, DWORD dwFlags,
LPENUMIDLIST* ppEnumIDList) LPENUMIDLIST* ppEnumIDList)
@ -512,7 +516,7 @@ static HRESULT WINAPI IShellFolder_fnEnumObjects(
* REFIID riid, //[in ] Initial Interface * REFIID riid, //[in ] Initial Interface
* LPVOID* ppvObject //[out] Interface* * LPVOID* ppvObject //[out] Interface*
*/ */
static HRESULT WINAPI IShellFolder_fnBindToObject( IShellFolder * iface, LPCITEMIDLIST pidl, static HRESULT WINAPI IShellFolder_fnBindToObject( IShellFolder2 * iface, LPCITEMIDLIST pidl,
LPBC pbcReserved, REFIID riid, LPVOID * ppvOut) LPBC pbcReserved, REFIID riid, LPVOID * ppvOut)
{ {
ICOM_THIS(IGenericSFImpl, iface); ICOM_THIS(IGenericSFImpl, iface);
@ -578,7 +582,7 @@ static HRESULT WINAPI IShellFolder_fnBindToObject( IShellFolder * iface, LPCITEM
* LPVOID* ppvObject //[out] Interface* returned * LPVOID* ppvObject //[out] Interface* returned
*/ */
static HRESULT WINAPI IShellFolder_fnBindToStorage( static HRESULT WINAPI IShellFolder_fnBindToStorage(
IShellFolder * iface, IShellFolder2 * iface,
LPCITEMIDLIST pidl, LPCITEMIDLIST pidl,
LPBC pbcReserved, LPBC pbcReserved,
REFIID riid, REFIID riid,
@ -612,7 +616,7 @@ static HRESULT WINAPI IShellFolder_fnBindToStorage(
*/ */
static HRESULT WINAPI IShellFolder_fnCompareIDs( static HRESULT WINAPI IShellFolder_fnCompareIDs(
IShellFolder * iface, IShellFolder2 * iface,
LPARAM lParam, LPARAM lParam,
LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl1,
LPCITEMIDLIST pidl2) LPCITEMIDLIST pidl2)
@ -700,7 +704,7 @@ static HRESULT WINAPI IShellFolder_fnCompareIDs(
/************************************************************************** /**************************************************************************
* IShellFolder_fnCreateViewObject * IShellFolder_fnCreateViewObject
*/ */
static HRESULT WINAPI IShellFolder_fnCreateViewObject( IShellFolder * iface, static HRESULT WINAPI IShellFolder_fnCreateViewObject( IShellFolder2 * iface,
HWND hwndOwner, REFIID riid, LPVOID *ppvOut) HWND hwndOwner, REFIID riid, LPVOID *ppvOut)
{ {
ICOM_THIS(IGenericSFImpl, iface); ICOM_THIS(IGenericSFImpl, iface);
@ -748,7 +752,7 @@ static HRESULT WINAPI IShellFolder_fnCreateViewObject( IShellFolder * iface,
* ULONG* rgfInOut) //[out] result array * ULONG* rgfInOut) //[out] result array
* *
*/ */
static HRESULT WINAPI IShellFolder_fnGetAttributesOf(IShellFolder * iface,UINT cidl,LPCITEMIDLIST *apidl,DWORD *rgfInOut) static HRESULT WINAPI IShellFolder_fnGetAttributesOf(IShellFolder2 * iface,UINT cidl,LPCITEMIDLIST *apidl,DWORD *rgfInOut)
{ {
ICOM_THIS(IGenericSFImpl, iface); ICOM_THIS(IGenericSFImpl, iface);
@ -804,7 +808,7 @@ next: apidl++;
* and GetData's it if the drop is in another explorer window that needs the positions. * and GetData's it if the drop is in another explorer window that needs the positions.
*/ */
static HRESULT WINAPI IShellFolder_fnGetUIObjectOf( static HRESULT WINAPI IShellFolder_fnGetUIObjectOf(
IShellFolder * iface, IShellFolder2 * iface,
HWND hwndOwner, HWND hwndOwner,
UINT cidl, UINT cidl,
LPCITEMIDLIST * apidl, LPCITEMIDLIST * apidl,
@ -879,7 +883,7 @@ static HRESULT WINAPI IShellFolder_fnGetUIObjectOf(
#define GET_SHGDN_RELATION(dwFlags) ((DWORD)dwFlags & (DWORD)0x000000FF) #define GET_SHGDN_RELATION(dwFlags) ((DWORD)dwFlags & (DWORD)0x000000FF)
static HRESULT WINAPI IShellFolder_fnGetDisplayNameOf( static HRESULT WINAPI IShellFolder_fnGetDisplayNameOf(
IShellFolder * iface, IShellFolder2 * iface,
LPCITEMIDLIST pidl, LPCITEMIDLIST pidl,
DWORD dwFlags, DWORD dwFlags,
LPSTRRET strRet) LPSTRRET strRet)
@ -921,7 +925,7 @@ static HRESULT WINAPI IShellFolder_fnGetDisplayNameOf(
PathAddBackslashA(szPath); PathAddBackslashA(szPath);
len = strlen(szPath); len = strlen(szPath);
if (!SUCCEEDED(SHELL32_GetDisplayNameOfChild((IShellFolder*)This, pidl, dwFlags, szPath + len, MAX_PATH - len))) if (!SUCCEEDED(SHELL32_GetDisplayNameOfChild((IShellFolder2*)This, pidl, dwFlags, szPath + len, MAX_PATH - len)))
return E_OUTOFMEMORY; return E_OUTOFMEMORY;
} }
strRet->uType = STRRET_CSTRA; strRet->uType = STRRET_CSTRA;
@ -944,7 +948,7 @@ static HRESULT WINAPI IShellFolder_fnGetDisplayNameOf(
* LPITEMIDLIST* ppidlOut) //[out] simple pidl returned * LPITEMIDLIST* ppidlOut) //[out] simple pidl returned
*/ */
static HRESULT WINAPI IShellFolder_fnSetNameOf( static HRESULT WINAPI IShellFolder_fnSetNameOf(
IShellFolder * iface, IShellFolder2 * iface,
HWND hwndOwner, HWND hwndOwner,
LPCITEMIDLIST pidl, /*simple pidl*/ LPCITEMIDLIST pidl, /*simple pidl*/
LPCOLESTR lpName, LPCOLESTR lpName,
@ -962,7 +966,7 @@ static HRESULT WINAPI IShellFolder_fnSetNameOf(
/************************************************************************** /**************************************************************************
* IShellFolder_fnGetFolderPath * IShellFolder_fnGetFolderPath
*/ */
static HRESULT WINAPI IShellFolder_fnGetFolderPath(IShellFolder * iface, LPSTR lpszOut, DWORD dwOutSize) static HRESULT WINAPI IShellFolder_fnGetFolderPath(IShellFolder2 * iface, LPSTR lpszOut, DWORD dwOutSize)
{ {
ICOM_THIS(IGenericSFImpl, iface); ICOM_THIS(IGenericSFImpl, iface);
@ -980,7 +984,72 @@ static HRESULT WINAPI IShellFolder_fnGetFolderPath(IShellFolder * iface, LPSTR l
return TRUE; return TRUE;
} }
static ICOM_VTABLE(IShellFolder) sfvt = static HRESULT WINAPI IShellFolder_fnGetDefaultSearchGUID(
IShellFolder2 * iface,
GUID *pguid)
{
ICOM_THIS(IGenericSFImpl, iface);
TRACE("(%p)\n",This);
return E_NOTIMPL;
}
static HRESULT WINAPI IShellFolder_fnEnumSearches(
IShellFolder2 * iface,
IEnumExtraSearch **ppenum)
{
ICOM_THIS(IGenericSFImpl, iface);
TRACE("(%p)\n",This);
return E_NOTIMPL;
}
static HRESULT WINAPI IShellFolder_fnGetDefaultColumn(
IShellFolder2 * iface,
DWORD dwRes,
ULONG *pSort,
ULONG *pDisplay)
{
ICOM_THIS(IGenericSFImpl, iface);
TRACE("(%p)\n",This);
return E_NOTIMPL;
}
static HRESULT WINAPI IShellFolder_fnGetDefaultColumnState(
IShellFolder2 * iface,
UINT iColumn,
DWORD *pcsFlags)
{
ICOM_THIS(IGenericSFImpl, iface);
TRACE("(%p)\n",This);
return E_NOTIMPL;
}
static HRESULT WINAPI IShellFolder_fnGetDetailsEx(
IShellFolder2 * iface,
LPCITEMIDLIST pidl,
const SHCOLUMNID *pscid,
VARIANT *pv)
{
ICOM_THIS(IGenericSFImpl, iface);
TRACE("(%p)\n",This);
return E_NOTIMPL;
}
static HRESULT WINAPI IShellFolder_fnGetDetailsOf(
IShellFolder2 * iface,
LPCITEMIDLIST pidl,
UINT iColumn,
SHELLDETAILS *psd)
{
ICOM_THIS(IGenericSFImpl, iface);
TRACE("(%p)\n",This);
return E_NOTIMPL;
}
static HRESULT WINAPI IShellFolder_fnMapNameToSCID(
IShellFolder2 * iface,
LPCWSTR pwszName,
SHCOLUMNID *pscid)
{
ICOM_THIS(IGenericSFImpl, iface);
TRACE("(%p)\n",This);
return E_NOTIMPL;
}
static ICOM_VTABLE(IShellFolder2) sfvt =
{ {
ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
IShellFolder_fnQueryInterface, IShellFolder_fnQueryInterface,
@ -996,13 +1065,21 @@ static ICOM_VTABLE(IShellFolder) sfvt =
IShellFolder_fnGetUIObjectOf, IShellFolder_fnGetUIObjectOf,
IShellFolder_fnGetDisplayNameOf, IShellFolder_fnGetDisplayNameOf,
IShellFolder_fnSetNameOf, IShellFolder_fnSetNameOf,
IShellFolder_fnGetFolderPath
/* ShellFolder2 */
IShellFolder_fnGetDefaultSearchGUID,
IShellFolder_fnEnumSearches,
IShellFolder_fnGetDefaultColumn,
IShellFolder_fnGetDefaultColumnState,
IShellFolder_fnGetDetailsEx,
IShellFolder_fnGetDetailsOf,
IShellFolder_fnMapNameToSCID
}; };
/*********************************************************************** /***********************************************************************
* [Desktopfolder] IShellFolder implementation * [Desktopfolder] IShellFolder implementation
*/ */
static struct ICOM_VTABLE(IShellFolder) sfdvt; static struct ICOM_VTABLE(IShellFolder2) sfdvt;
/************************************************************************** /**************************************************************************
* ISF_Desktop_Constructor * ISF_Desktop_Constructor
@ -1029,7 +1106,7 @@ IShellFolder * ISF_Desktop_Constructor()
* NOTES supports not IPersist/IPersistFolder * NOTES supports not IPersist/IPersistFolder
*/ */
static HRESULT WINAPI ISF_Desktop_fnQueryInterface( static HRESULT WINAPI ISF_Desktop_fnQueryInterface(
IShellFolder * iface, IShellFolder2 * iface,
REFIID riid, REFIID riid,
LPVOID *ppvObj) LPVOID *ppvObj)
{ {
@ -1047,6 +1124,9 @@ static HRESULT WINAPI ISF_Desktop_fnQueryInterface(
else if(IsEqualIID(riid, &IID_IShellFolder)) /*IShellFolder*/ else if(IsEqualIID(riid, &IID_IShellFolder)) /*IShellFolder*/
{ *ppvObj = (IShellFolder*)This; { *ppvObj = (IShellFolder*)This;
} }
else if(IsEqualIID(riid, &IID_IShellFolder2)) /*IShellFolder2*/
{ *ppvObj = (IShellFolder2*)This;
}
if(*ppvObj) if(*ppvObj)
{ {
@ -1066,7 +1146,7 @@ static HRESULT WINAPI ISF_Desktop_fnQueryInterface(
* to MyComputer * to MyComputer
*/ */
static HRESULT WINAPI ISF_Desktop_fnParseDisplayName( static HRESULT WINAPI ISF_Desktop_fnParseDisplayName(
IShellFolder * iface, IShellFolder2 * iface,
HWND hwndOwner, HWND hwndOwner,
LPBC pbcReserved, LPBC pbcReserved,
LPOLESTR lpszDisplayName, LPOLESTR lpszDisplayName,
@ -1093,7 +1173,7 @@ static HRESULT WINAPI ISF_Desktop_fnParseDisplayName(
if (szNext && *szNext) if (szNext && *szNext)
{ {
hr = SHELL32_ParseNextElement(hwndOwner, (IShellFolder*)This, &pidlTemp, (LPOLESTR)szNext, pchEaten, pdwAttributes); hr = SHELL32_ParseNextElement(hwndOwner, (IShellFolder2*)This, &pidlTemp, (LPOLESTR)szNext, pchEaten, pdwAttributes);
} }
else else
{ {
@ -1111,7 +1191,7 @@ static HRESULT WINAPI ISF_Desktop_fnParseDisplayName(
* ISF_Desktop_fnEnumObjects * ISF_Desktop_fnEnumObjects
*/ */
static HRESULT WINAPI ISF_Desktop_fnEnumObjects( static HRESULT WINAPI ISF_Desktop_fnEnumObjects(
IShellFolder * iface, IShellFolder2 * iface,
HWND hwndOwner, HWND hwndOwner,
DWORD dwFlags, DWORD dwFlags,
LPENUMIDLIST* ppEnumIDList) LPENUMIDLIST* ppEnumIDList)
@ -1133,7 +1213,7 @@ static HRESULT WINAPI ISF_Desktop_fnEnumObjects(
/************************************************************************** /**************************************************************************
* ISF_Desktop_fnBindToObject * ISF_Desktop_fnBindToObject
*/ */
static HRESULT WINAPI ISF_Desktop_fnBindToObject( IShellFolder * iface, LPCITEMIDLIST pidl, static HRESULT WINAPI ISF_Desktop_fnBindToObject( IShellFolder2 * iface, LPCITEMIDLIST pidl,
LPBC pbcReserved, REFIID riid, LPVOID * ppvOut) LPBC pbcReserved, REFIID riid, LPVOID * ppvOut)
{ {
ICOM_THIS(IGenericSFImpl, iface); ICOM_THIS(IGenericSFImpl, iface);
@ -1189,7 +1269,7 @@ static HRESULT WINAPI ISF_Desktop_fnBindToObject( IShellFolder * iface, LPCITEMI
/************************************************************************** /**************************************************************************
* ISF_Desktop_fnCreateViewObject * ISF_Desktop_fnCreateViewObject
*/ */
static HRESULT WINAPI ISF_Desktop_fnCreateViewObject( IShellFolder * iface, static HRESULT WINAPI ISF_Desktop_fnCreateViewObject( IShellFolder2 * iface,
HWND hwndOwner, REFIID riid, LPVOID *ppvOut) HWND hwndOwner, REFIID riid, LPVOID *ppvOut)
{ {
ICOM_THIS(IGenericSFImpl, iface); ICOM_THIS(IGenericSFImpl, iface);
@ -1232,7 +1312,7 @@ static HRESULT WINAPI ISF_Desktop_fnCreateViewObject( IShellFolder * iface,
/************************************************************************** /**************************************************************************
* ISF_Desktop_fnGetAttributesOf * ISF_Desktop_fnGetAttributesOf
*/ */
static HRESULT WINAPI ISF_Desktop_fnGetAttributesOf(IShellFolder * iface,UINT cidl,LPCITEMIDLIST *apidl,DWORD *rgfInOut) static HRESULT WINAPI ISF_Desktop_fnGetAttributesOf(IShellFolder2 * iface,UINT cidl,LPCITEMIDLIST *apidl,DWORD *rgfInOut)
{ {
ICOM_THIS(IGenericSFImpl, iface); ICOM_THIS(IGenericSFImpl, iface);
@ -1294,7 +1374,7 @@ next: apidl++;
* special case: pidl = null gives desktop-name back * special case: pidl = null gives desktop-name back
*/ */
static HRESULT WINAPI ISF_Desktop_fnGetDisplayNameOf( static HRESULT WINAPI ISF_Desktop_fnGetDisplayNameOf(
IShellFolder * iface, IShellFolder2 * iface,
LPCITEMIDLIST pidl, LPCITEMIDLIST pidl,
DWORD dwFlags, DWORD dwFlags,
LPSTRRET strRet) LPSTRRET strRet)
@ -1318,7 +1398,7 @@ static HRESULT WINAPI ISF_Desktop_fnGetDisplayNameOf(
} }
else else
{ {
if (!SUCCEEDED(SHELL32_GetDisplayNameOfChild((IShellFolder*)This, pidl, dwFlags, szPath, MAX_PATH))) if (!SUCCEEDED(SHELL32_GetDisplayNameOfChild((IShellFolder2*)This, pidl, dwFlags, szPath, MAX_PATH)))
return E_OUTOFMEMORY; return E_OUTOFMEMORY;
} }
strRet->uType = STRRET_CSTRA; strRet->uType = STRRET_CSTRA;
@ -1329,7 +1409,7 @@ static HRESULT WINAPI ISF_Desktop_fnGetDisplayNameOf(
return S_OK; return S_OK;
} }
static ICOM_VTABLE(IShellFolder) sfdvt = static ICOM_VTABLE(IShellFolder2) sfdvt =
{ {
ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
ISF_Desktop_fnQueryInterface, ISF_Desktop_fnQueryInterface,
@ -1345,7 +1425,15 @@ static ICOM_VTABLE(IShellFolder) sfdvt =
IShellFolder_fnGetUIObjectOf, IShellFolder_fnGetUIObjectOf,
ISF_Desktop_fnGetDisplayNameOf, ISF_Desktop_fnGetDisplayNameOf,
IShellFolder_fnSetNameOf, IShellFolder_fnSetNameOf,
IShellFolder_fnGetFolderPath
/* ShellFolder2 */
IShellFolder_fnGetDefaultSearchGUID,
IShellFolder_fnEnumSearches,
IShellFolder_fnGetDefaultColumn,
IShellFolder_fnGetDefaultColumnState,
IShellFolder_fnGetDetailsEx,
IShellFolder_fnGetDetailsOf,
IShellFolder_fnMapNameToSCID
}; };
@ -1353,7 +1441,7 @@ static ICOM_VTABLE(IShellFolder) sfdvt =
* IShellFolder [MyComputer] implementation * IShellFolder [MyComputer] implementation
*/ */
static struct ICOM_VTABLE(IShellFolder) sfmcvt; static struct ICOM_VTABLE(IShellFolder2) sfmcvt;
/************************************************************************** /**************************************************************************
* ISF_MyComputer_Constructor * ISF_MyComputer_Constructor
@ -1380,7 +1468,7 @@ static IShellFolder * ISF_MyComputer_Constructor(void)
* ISF_MyComputer_fnParseDisplayName * ISF_MyComputer_fnParseDisplayName
*/ */
static HRESULT WINAPI ISF_MyComputer_fnParseDisplayName( static HRESULT WINAPI ISF_MyComputer_fnParseDisplayName(
IShellFolder * iface, IShellFolder2 * iface,
HWND hwndOwner, HWND hwndOwner,
LPBC pbcReserved, LPBC pbcReserved,
LPOLESTR lpszDisplayName, LPOLESTR lpszDisplayName,
@ -1411,7 +1499,7 @@ static HRESULT WINAPI ISF_MyComputer_fnParseDisplayName(
if (szNext && *szNext) if (szNext && *szNext)
{ {
hr = SHELL32_ParseNextElement(hwndOwner, (IShellFolder*)This, &pidlTemp, (LPOLESTR)szNext, pchEaten, pdwAttributes); hr = SHELL32_ParseNextElement(hwndOwner, (IShellFolder2*)This, &pidlTemp, (LPOLESTR)szNext, pchEaten, pdwAttributes);
} }
else else
{ {
@ -1429,7 +1517,7 @@ static HRESULT WINAPI ISF_MyComputer_fnParseDisplayName(
* ISF_MyComputer_fnEnumObjects * ISF_MyComputer_fnEnumObjects
*/ */
static HRESULT WINAPI ISF_MyComputer_fnEnumObjects( static HRESULT WINAPI ISF_MyComputer_fnEnumObjects(
IShellFolder * iface, IShellFolder2 * iface,
HWND hwndOwner, HWND hwndOwner,
DWORD dwFlags, DWORD dwFlags,
LPENUMIDLIST* ppEnumIDList) LPENUMIDLIST* ppEnumIDList)
@ -1451,7 +1539,7 @@ static HRESULT WINAPI ISF_MyComputer_fnEnumObjects(
/************************************************************************** /**************************************************************************
* ISF_MyComputer_fnBindToObject * ISF_MyComputer_fnBindToObject
*/ */
static HRESULT WINAPI ISF_MyComputer_fnBindToObject( IShellFolder * iface, LPCITEMIDLIST pidl, static HRESULT WINAPI ISF_MyComputer_fnBindToObject( IShellFolder2 * iface, LPCITEMIDLIST pidl,
LPBC pbcReserved, REFIID riid, LPVOID * ppvOut) LPBC pbcReserved, REFIID riid, LPVOID * ppvOut)
{ {
ICOM_THIS(IGenericSFImpl, iface); ICOM_THIS(IGenericSFImpl, iface);
@ -1503,7 +1591,7 @@ static HRESULT WINAPI ISF_MyComputer_fnBindToObject( IShellFolder * iface, LPCIT
/************************************************************************** /**************************************************************************
* ISF_MyComputer_fnCreateViewObject * ISF_MyComputer_fnCreateViewObject
*/ */
static HRESULT WINAPI ISF_MyComputer_fnCreateViewObject( IShellFolder * iface, static HRESULT WINAPI ISF_MyComputer_fnCreateViewObject( IShellFolder2 * iface,
HWND hwndOwner, REFIID riid, LPVOID *ppvOut) HWND hwndOwner, REFIID riid, LPVOID *ppvOut)
{ {
ICOM_THIS(IGenericSFImpl, iface); ICOM_THIS(IGenericSFImpl, iface);
@ -1546,7 +1634,7 @@ static HRESULT WINAPI ISF_MyComputer_fnCreateViewObject( IShellFolder * iface,
/************************************************************************** /**************************************************************************
* ISF_MyComputer_fnGetAttributesOf * ISF_MyComputer_fnGetAttributesOf
*/ */
static HRESULT WINAPI ISF_MyComputer_fnGetAttributesOf(IShellFolder * iface,UINT cidl,LPCITEMIDLIST *apidl,DWORD *rgfInOut) static HRESULT WINAPI ISF_MyComputer_fnGetAttributesOf(IShellFolder2 * iface,UINT cidl,LPCITEMIDLIST *apidl,DWORD *rgfInOut)
{ {
ICOM_THIS(IGenericSFImpl, iface); ICOM_THIS(IGenericSFImpl, iface);
@ -1596,7 +1684,7 @@ next: apidl++;
* SHGDN_INFOLDER makes no sense. * SHGDN_INFOLDER makes no sense.
*/ */
static HRESULT WINAPI ISF_MyComputer_fnGetDisplayNameOf( static HRESULT WINAPI ISF_MyComputer_fnGetDisplayNameOf(
IShellFolder * iface, IShellFolder2 * iface,
LPCITEMIDLIST pidl, LPCITEMIDLIST pidl,
DWORD dwFlags, DWORD dwFlags,
LPSTRRET strRet) LPSTRRET strRet)
@ -1653,7 +1741,7 @@ static HRESULT WINAPI ISF_MyComputer_fnGetDisplayNameOf(
PathAddBackslashA(szPath); PathAddBackslashA(szPath);
len = strlen(szPath); len = strlen(szPath);
if (!SUCCEEDED(SHELL32_GetDisplayNameOfChild((IShellFolder*)This, pidl, dwFlags | SHGDN_FORPARSING, szPath + len, MAX_PATH - len))) if (!SUCCEEDED(SHELL32_GetDisplayNameOfChild((IShellFolder2*)This, pidl, dwFlags | SHGDN_FORPARSING, szPath + len, MAX_PATH - len)))
return E_OUTOFMEMORY; return E_OUTOFMEMORY;
} }
strRet->uType = STRRET_CSTRA; strRet->uType = STRRET_CSTRA;
@ -1664,7 +1752,7 @@ static HRESULT WINAPI ISF_MyComputer_fnGetDisplayNameOf(
return S_OK; return S_OK;
} }
static ICOM_VTABLE(IShellFolder) sfmcvt = static ICOM_VTABLE(IShellFolder2) sfmcvt =
{ {
ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
IShellFolder_fnQueryInterface, IShellFolder_fnQueryInterface,
@ -1680,7 +1768,15 @@ static ICOM_VTABLE(IShellFolder) sfmcvt =
IShellFolder_fnGetUIObjectOf, IShellFolder_fnGetUIObjectOf,
ISF_MyComputer_fnGetDisplayNameOf, ISF_MyComputer_fnGetDisplayNameOf,
IShellFolder_fnSetNameOf, IShellFolder_fnSetNameOf,
IShellFolder_fnGetFolderPath
/* ShellFolder2 */
IShellFolder_fnGetDefaultSearchGUID,
IShellFolder_fnEnumSearches,
IShellFolder_fnGetDefaultColumn,
IShellFolder_fnGetDefaultColumnState,
IShellFolder_fnGetDetailsEx,
IShellFolder_fnGetDetailsOf,
IShellFolder_fnMapNameToSCID
}; };

View File

@ -1,11 +1,23 @@
/* /*
* ShellView * ShellView
* *
* Copyright 1998,1999 <juergen.schmied@metronet.de> * Copyright 1998,1999 <juergen.schmied@debitel.net>
* *
* FIXME: when the ShellView_WndProc gets a WM_NCDESTROY should we do a * FIXME: when the ShellView_WndProc gets a WM_NCDESTROY should we do a
* Release() ??? * Release() ???
* *
* FIXME: There is still a design problem in this implementation.
* This implementation is more or less ok for file system folders
* but there are many more kinds of folders.
* The shellview is not supposed to know much about the colums
* appearing in the view. To fix this it should use the IShellFolder2
* interface when possible to get the informations dynamically
* this will take a lot of work to implemet and wont likely not
* be done in near future
* Please considder this when code new features. Mail me if you
* are in doubt how to do things. (jsch 25/10/99)
*
* FIXME: Set the buttons in the filedialog according to the view state
*/ */
#include <stdlib.h> #include <stdlib.h>
@ -220,7 +232,6 @@ static void CheckToolbar(IShellViewImpl * This)
/********************************************************** /**********************************************************
* change the style of the listview control * change the style of the listview control
*/ */
static void SetStyle(IShellViewImpl * This, DWORD dwAdd, DWORD dwRemove) static void SetStyle(IShellViewImpl * This, DWORD dwAdd, DWORD dwRemove)
{ {
DWORD tmpstyle; DWORD tmpstyle;
@ -278,6 +289,11 @@ static BOOL ShellView_CreateList (IShellViewImpl * This)
} }
/********************************************************** /**********************************************************
* ShellView_InitList() * ShellView_InitList()
*
* NOTES
* FIXME: the headers should depend on the kind of shellfolder
* thats creating the shellview. this hack implements only the
* correct headers for a filesystem folder (jsch 25/10/99)
*/ */
static BOOL ShellView_InitList(IShellViewImpl * This) static BOOL ShellView_InitList(IShellViewImpl * This)
{ {
@ -297,11 +313,11 @@ static BOOL ShellView_InitList(IShellViewImpl * This)
LoadStringA(shell32_hInstance, IDS_SHV_COLUMN1, szString, sizeof(szString)); LoadStringA(shell32_hInstance, IDS_SHV_COLUMN1, szString, sizeof(szString));
ListView_InsertColumnA(This->hWndList, 0, &lvColumn); ListView_InsertColumnA(This->hWndList, 0, &lvColumn);
lvColumn.cx = 80; lvColumn.cx = 60;
LoadStringA(shell32_hInstance, IDS_SHV_COLUMN2, szString, sizeof(szString)); LoadStringA(shell32_hInstance, IDS_SHV_COLUMN2, szString, sizeof(szString));
ListView_InsertColumnA(This->hWndList, 1, &lvColumn); ListView_InsertColumnA(This->hWndList, 1, &lvColumn);
lvColumn.cx = 170; lvColumn.cx = 120;
LoadStringA(shell32_hInstance, IDS_SHV_COLUMN3, szString, sizeof(szString)); LoadStringA(shell32_hInstance, IDS_SHV_COLUMN3, szString, sizeof(szString));
ListView_InsertColumnA(This->hWndList, 2, &lvColumn); ListView_InsertColumnA(This->hWndList, 2, &lvColumn);
@ -332,7 +348,6 @@ static INT CALLBACK ShellView_CompareItems(LPVOID lParam1, LPVOID lParam2, LPARA
return ret; return ret;
} }
/************************************************************************* /*************************************************************************
* ShellView_ListViewCompareItems * ShellView_ListViewCompareItems
* *
@ -349,7 +364,13 @@ static INT CALLBACK ShellView_CompareItems(LPVOID lParam1, LPVOID lParam2, LPARA
* or zero if the two items are equivalent * or zero if the two items are equivalent
* *
* NOTES * NOTES
* * FIXME: function does what ShellView_CompareItems is supposed to do.
* unify it and figure out how to use the undocumented first parameter
* of IShellFolder_CompareIDs to do the job this function does and
* move this code to IShellFolder.
* make LISTVIEW_SORT_INFO obsolete
* the way this function works is only usable if we had only
* filesystemfolders (25/10/99 jsch)
*/ */
static INT CALLBACK ShellView_ListViewCompareItems(LPVOID lParam1, LPVOID lParam2, LPARAM lpData) static INT CALLBACK ShellView_ListViewCompareItems(LPVOID lParam1, LPVOID lParam2, LPARAM lpData)
{ {
@ -961,7 +982,11 @@ static LRESULT ShellView_OnCommand(IShellViewImpl * This,DWORD dwCmdID, DWORD dw
case 0x31: case 0x31:
case 0x32: case 0x32:
case 0x33: case 0x33:
ListView_SortItems(This->hWndList, ShellView_ListViewCompareItems, (LPARAM) (dwCmdID - 0x30)); This->ListViewSortInfo.nHeaderID = (LPARAM) (dwCmdID - 0x30);
This->ListViewSortInfo.bIsAscending = TRUE;
This->ListViewSortInfo.nLastHeaderID = This->ListViewSortInfo.nHeaderID;
ListView_SortItems(This->hWndList, ShellView_ListViewCompareItems, (LPARAM) (&(This->ListViewSortInfo)));
CheckToolbar(This);
break; break;
default: default:
@ -1014,23 +1039,20 @@ static LRESULT ShellView_OnNotify(IShellViewImpl * This, UINT CtlID, LPNMHDR lpn
break; break;
case LVN_COLUMNCLICK: case LVN_COLUMNCLICK:
{ This->ListViewSortInfo.nHeaderID = lpnmlv->iSubItem;
This->ListViewSortInfo.nHeaderID = lpnmlv->iSubItem; if(This->ListViewSortInfo.nLastHeaderID == This->ListViewSortInfo.nHeaderID)
if(This->ListViewSortInfo.nLastHeaderID == This->ListViewSortInfo.nHeaderID) {
{ This->ListViewSortInfo.bIsAscending = !This->ListViewSortInfo.bIsAscending;
This->ListViewSortInfo.bIsAscending = !This->ListViewSortInfo.bIsAscending; }
} else
else {
{ This->ListViewSortInfo.bIsAscending = TRUE;
This->ListViewSortInfo.bIsAscending = TRUE; }
} This->ListViewSortInfo.nLastHeaderID = This->ListViewSortInfo.nHeaderID;
This->ListViewSortInfo.nLastHeaderID = This->ListViewSortInfo.nHeaderID;
ListView_SortItems(lpnmlv->hdr.hwndFrom, ShellView_ListViewCompareItems, (LPARAM) (&(This->ListViewSortInfo))); ListView_SortItems(lpnmlv->hdr.hwndFrom, ShellView_ListViewCompareItems, (LPARAM) (&(This->ListViewSortInfo)));
break; break;
}
case LVN_GETDISPINFOA: case LVN_GETDISPINFOA:
TRACE("-- LVN_GETDISPINFOA %p\n",This); TRACE("-- LVN_GETDISPINFOA %p\n",This);
pidl = (LPITEMIDLIST)lpdi->item.lParam; pidl = (LPITEMIDLIST)lpdi->item.lParam;
@ -1319,13 +1341,15 @@ static HRESULT WINAPI IShellView_fnTranslateAccelerator(IShellView * iface,LPMSG
{ {
ICOM_THIS(IShellViewImpl, iface); ICOM_THIS(IShellViewImpl, iface);
#if 0
FIXME("(%p)->(%p: hwnd=%x msg=%x lp=%lx wp=%x) stub\n",This,lpmsg, lpmsg->hwnd, lpmsg->message, lpmsg->lParam, lpmsg->wParam); FIXME("(%p)->(%p: hwnd=%x msg=%x lp=%lx wp=%x) stub\n",This,lpmsg, lpmsg->hwnd, lpmsg->message, lpmsg->lParam, lpmsg->wParam);
#endif
switch (lpmsg->message) if ((lpmsg->message>=WM_KEYFIRST) && (lpmsg->message>=WM_KEYLAST))
{ case WM_KEYDOWN: TRACE("-- key=0x04%x",lpmsg->wParam) ; {
TRACE("-- key=0x04%x",lpmsg->wParam) ;
} }
return NOERROR; return S_FALSE; /* not handled */
} }
static HRESULT WINAPI IShellView_fnEnableModeless(IShellView * iface,BOOL fEnable) static HRESULT WINAPI IShellView_fnEnableModeless(IShellView * iface,BOOL fEnable)
@ -1341,7 +1365,9 @@ static HRESULT WINAPI IShellView_fnUIActivate(IShellView * iface,UINT uState)
{ {
ICOM_THIS(IShellViewImpl, iface); ICOM_THIS(IShellViewImpl, iface);
/*
CHAR szName[MAX_PATH]; CHAR szName[MAX_PATH];
*/
LRESULT lResult; LRESULT lResult;
int nPartArray[1] = {-1}; int nPartArray[1] = {-1};
@ -1360,15 +1386,19 @@ static HRESULT WINAPI IShellView_fnUIActivate(IShellView * iface,UINT uState)
if(uState != SVUIA_DEACTIVATE) if(uState != SVUIA_DEACTIVATE)
{ {
/*
GetFolderPath is not a method of IShellFolder
IShellFolder_GetFolderPath( This->pSFParent, szName, sizeof(szName) ); IShellFolder_GetFolderPath( This->pSFParent, szName, sizeof(szName) );
*/
/* set the number of parts */ /* set the number of parts */
IShellBrowser_SendControlMsg(This->pShellBrowser, FCW_STATUS, SB_SETPARTS, 1, IShellBrowser_SendControlMsg(This->pShellBrowser, FCW_STATUS, SB_SETPARTS, 1,
(LPARAM)nPartArray, &lResult); (LPARAM)nPartArray, &lResult);
/* set the text for the parts */ /* set the text for the parts */
/*
IShellBrowser_SendControlMsg(This->pShellBrowser, FCW_STATUS, SB_SETTEXTA, IShellBrowser_SendControlMsg(This->pShellBrowser, FCW_STATUS, SB_SETTEXTA,
0, (LPARAM)szName, &lResult); 0, (LPARAM)szName, &lResult);
*/
} }
return S_OK; return S_OK;

View File

@ -10,6 +10,7 @@
#include "wine/obj_base.h" #include "wine/obj_base.h"
#include "wine/obj_moniker.h" /* for LPBC */ #include "wine/obj_moniker.h" /* for LPBC */
#include "wine/obj_enumidlist.h" #include "wine/obj_enumidlist.h"
#include "wine/obj_oleaut.h"
#include "winbase.h" #include "winbase.h"
#include "shell.h" #include "shell.h"
@ -48,6 +49,49 @@ typedef struct IShellFolder IShellFolder, *LPSHELLFOLDER;
DEFINE_SHLGUID(IID_IPersistFolder, 0x000214EAL, 0, 0); DEFINE_SHLGUID(IID_IPersistFolder, 0x000214EAL, 0, 0);
typedef struct IPersistFolder IPersistFolder, *LPPERSISTFOLDER; typedef struct IPersistFolder IPersistFolder, *LPPERSISTFOLDER;
DEFINE_GUID(IID_IShellFolder2, 0xB82C5AA8, 0xA41B, 0x11D2, 0xBE, 0x32, 0x0, 0xc0, 0x4F, 0xB9, 0x36, 0x61);
typedef struct IShellFolder2 IShellFolder2, *LPSHELLFOLDER2;
DEFINE_GUID(IID_IEnumExtraSearch, 0xE700BE1, 0x9DB6, 0x11D1, 0xA1, 0xCE, 0x0, 0xc0, 0x4F, 0xD7, 0x5D, 0x13);
typedef struct IEnumExtraSearch IEnumExtraSearch, *LPENUMEXTRASEARCH;
/*****************************************************************************
* IEnumExtraSearch interface
*/
typedef struct
{
GUID guidSearch;
WCHAR wszFriendlyName[80];
WCHAR wszMenuText[80];
WCHAR wszHelpText[MAX_PATH];
WCHAR wszUrl[2084];
WCHAR wszIcon[MAX_PATH+10];
WCHAR wszGreyIcon[MAX_PATH+10];
WCHAR wszClrIcon[MAX_PATH+10];
} EXTRASEARCH,* LPEXTRASEARCH;
#define ICOM_INTERFACE IEnumExtraSearch
#define IEnumExtraSearch_METHODS \
ICOM_METHOD3(HRESULT, Next, ULONG, celt, LPEXTRASEARCH*, rgelt, ULONG*, pceltFetched) \
ICOM_METHOD1(HRESULT, Skip, ULONG, celt) \
ICOM_METHOD (HRESULT, Reset) \
ICOM_METHOD1(HRESULT, Clone, IEnumExtraSearch**, ppenum)
#define IEnumExtraSearch_IMETHODS \
IUnknown_IMETHODS \
IEnumExtraSearch_METHODS
ICOM_DEFINE(IEnumExtraSearch,IUnknown)
#undef ICOM_INTERFACE
/*** IUnknown methods ***/
#define IEnumIDList_QueryInterface(p,a,b) ICOM_CALL2(QueryInterface,p,a,b)
#define IEnumIDList_AddRef(p) ICOM_CALL (AddRef,p)
#define IEnumIDList_Release(p) ICOM_CALL (Release,p)
/*** IEnumIDList methods ***/
#define IEnumIDList_Next(p,a,b,c) ICOM_CALL3(Next,p,a,b,c)
#define IEnumIDList_Skip(p,a) ICOM_CALL1(Skip,p,a)
#define IEnumIDList_Reset(p) ICOM_CALL(Reset,p)
#define IEnumIDList_Clone(p,a) ICOM_CALL1(Clone,p,a)
/***************************************************************************** /*****************************************************************************
* IShellFolder::GetDisplayNameOf/SetNameOf uFlags * IShellFolder::GetDisplayNameOf/SetNameOf uFlags
@ -156,8 +200,7 @@ DWORD WINAPI SHGetDesktopFolder(IShellFolder * *);
ICOM_METHOD3( HRESULT, GetAttributesOf, UINT, cidl, LPCITEMIDLIST *, apidl, ULONG *, rgfInOut)\ ICOM_METHOD3( HRESULT, GetAttributesOf, UINT, cidl, LPCITEMIDLIST *, apidl, ULONG *, rgfInOut)\
ICOM_METHOD6( HRESULT, GetUIObjectOf, HWND, hwndOwner, UINT, cidl, LPCITEMIDLIST *, apidl, REFIID, riid, UINT *, prgfInOut, LPVOID *, ppvOut)\ ICOM_METHOD6( HRESULT, GetUIObjectOf, HWND, hwndOwner, UINT, cidl, LPCITEMIDLIST *, apidl, REFIID, riid, UINT *, prgfInOut, LPVOID *, ppvOut)\
ICOM_METHOD3( HRESULT, GetDisplayNameOf, LPCITEMIDLIST, pidl, DWORD, uFlags, LPSTRRET, lpName)\ ICOM_METHOD3( HRESULT, GetDisplayNameOf, LPCITEMIDLIST, pidl, DWORD, uFlags, LPSTRRET, lpName)\
ICOM_METHOD5( HRESULT, SetNameOf, HWND, hwndOwner, LPCITEMIDLIST, pidl,LPCOLESTR, lpszName, DWORD, uFlags,LPITEMIDLIST *, ppidlOut)\ ICOM_METHOD5( HRESULT, SetNameOf, HWND, hwndOwner, LPCITEMIDLIST, pidl,LPCOLESTR, lpszName, DWORD, uFlags,LPITEMIDLIST *, ppidlOut)
ICOM_METHOD2( HRESULT, GetFolderPath, LPSTR, lpszOut, DWORD, dwOutSize)
#define IShellFolder_IMETHODS \ #define IShellFolder_IMETHODS \
IUnknown_IMETHODS \ IUnknown_IMETHODS \
IShellFolder_METHODS IShellFolder_METHODS
@ -179,12 +222,89 @@ ICOM_DEFINE(IShellFolder,IUnknown)
#define IShellFolder_GetUIObjectOf(p,a,b,c,d,e,f) ICOM_CALL6(GetUIObjectOf,p,a,b,c,d,e,f) #define IShellFolder_GetUIObjectOf(p,a,b,c,d,e,f) ICOM_CALL6(GetUIObjectOf,p,a,b,c,d,e,f)
#define IShellFolder_GetDisplayNameOf(p,a,b,c) ICOM_CALL3(GetDisplayNameOf,p,a,b,c) #define IShellFolder_GetDisplayNameOf(p,a,b,c) ICOM_CALL3(GetDisplayNameOf,p,a,b,c)
#define IShellFolder_SetNameOf(p,a,b,c,d,e) ICOM_CALL5(SetNameOf,p,a,b,c,d,e) #define IShellFolder_SetNameOf(p,a,b,c,d,e) ICOM_CALL5(SetNameOf,p,a,b,c,d,e)
#define IShellFolder_GetFolderPath(p,a,b) ICOM_CALL2(GetFolderPath,p,a,b)
/*****************************************************************************
* IShellFolder2 interface
*/
/* IShellFolder2 */
/* GetDefaultColumnState */
typedef enum
{
SHCOLSTATE_TYPE_STR = 0x00000001,
SHCOLSTATE_TYPE_INT = 0x00000002,
SHCOLSTATE_TYPE_DATE = 0x00000003,
SHCOLSTATE_TYPEMASK = 0x0000000F,
SHCOLSTATE_ONBYDEFAULT = 0x00000010,
SHCOLSTATE_SLOW = 0x00000020,
SHCOLSTATE_EXTENDED = 0x00000040,
SHCOLSTATE_SECONDARYUI = 0x00000080,
SHCOLSTATE_HIDDEN = 0x00000100,
} SHCOLSTATE;
typedef struct
{
GUID fmtid;
DWORD pid;
} SHCOLUMNID, *LPSHCOLUMNID;
typedef const SHCOLUMNID* LPCSHCOLUMNID;
/* GetDetailsEx */
#define PID_FINDDATA 0
#define PID_NETRESOURCE 1
#define PID_DESCRIPTIONID 2
typedef struct
{
int fmt;
int cxChar;
STRRET str;
} SHELLDETAILS, *LPSHELLDETAILS;
#define ICOM_INTERFACE IShellFolder2
#define IShellFolder2_METHODS \
ICOM_METHOD1( HRESULT, GetDefaultSearchGUID, LPGUID, lpguid)\
ICOM_METHOD1( HRESULT, EnumSearches, LPENUMEXTRASEARCH *, ppEnum) \
ICOM_METHOD3( HRESULT, GetDefaultColumn, DWORD, dwReserved, ULONG *, pSort, ULONG *, pDisplay)\
ICOM_METHOD2( HRESULT, GetDefaultColumnState, UINT, iColumn, DWORD *, pcsFlags)\
ICOM_METHOD3( HRESULT, GetDetailsEx, LPCITEMIDLIST, pidl, const SHCOLUMNID *, pscid, VARIANT *, pv)\
ICOM_METHOD3( HRESULT, GetDetailsOf, LPCITEMIDLIST, pidl, UINT, iColumn, LPSHELLDETAILS, pDetails)\
ICOM_METHOD2( HRESULT, MapNameToSCID, LPCWSTR, pwszName, SHCOLUMNID *, pscid)
#define IShellFolder2_IMETHODS \
IShellFolder_METHODS \
IShellFolder2_METHODS
ICOM_DEFINE(IShellFolder2, IShellFolder)
#undef ICOM_INTERFACE
/*** IUnknown methods ***/
#define IShellFolder2_QueryInterface(p,a,b) ICOM_CALL2(QueryInterface,p,a,b)
#define IShellFolder2_AddRef(p) ICOM_CALL (AddRef,p)
#define IShellFolder2_Release(p) ICOM_CALL (Release,p)
/*** IShellFolder methods ***/
#define IShellFolder2_ParseDisplayName(p,a,b,c,d,e,f) ICOM_CALL6(ParseDisplayName,p,a,b,c,d,e,f)
#define IShellFolder2_EnumObjects(p,a,b,c) ICOM_CALL3(EnumObjects,p,a,b,c)
#define IShellFolder2_BindToObject(p,a,b,c,d) ICOM_CALL4(BindToObject,p,a,b,c,d)
#define IShellFolder2_BindToStorage(p,a,b,c,d) ICOM_CALL4(BindToStorage,p,a,b,c,d)
#define IShellFolder2_CompareIDs(p,a,b,c) ICOM_CALL3(CompareIDs,p,a,b,c)
#define IShellFolder2_CreateViewObject(p,a,b,c) ICOM_CALL3(CreateViewObject,p,a,b,c)
#define IShellFolder2_GetAttributesOf(p,a,b,c) ICOM_CALL3(GetAttributesOf,p,a,b,c)
#define IShellFolder2_GetUIObjectOf(p,a,b,c,d,e,f) ICOM_CALL6(GetUIObjectOf,p,a,b,c,d,e,f)
#define IShellFolder2_GetDisplayNameOf(p,a,b,c) ICOM_CALL3(GetDisplayNameOf,p,a,b,c)
#define IShellFolder2_SetNameOf(p,a,b,c,d,e) ICOM_CALL5(SetNameOf,p,a,b,c,d,e)
/*** IShellFolder2 methods ***/
#define IShellFolder2_GetDefaultSearchGUID(p,a) ICOM_CALL1(GetDefaultSearchGUID,p,a)
#define IShellFolder2_EnumSearches(p,a) ICOM_CALL1(EnumSearches,p,a)
#define IShellFolder2_GetDefaultColumn(p,a,b,c) ICOM_CALL3(GetDefaultColumn,p,a,b,c)
#define IShellFolder2_GetDefaultColumnState(p,a,b) ICOM_CALL2(GetDefaultColumnState,p,a,b)
#define IShellFolder2_GetDetailsEx(p,a,b,c) ICOM_CALL3(GetDetailsEx,p,a,b,c)
#define IShellFolder2_GetDetailsOf(p,a,b,c) ICOM_CALL3(GetDetailsOf,p,a,b,c)
#define IShellFolder2_MapNameToSCID(p,a,b) ICOM_CALL2(MapNameToSCID,p,a,b)
/***************************************************************************** /*****************************************************************************
* IPersistFolder interface * IPersistFolder interface
*/ */
/* ClassID's */
DEFINE_GUID (CLSID_SFMyComp,0x20D04FE0,0x3AEA,0x1069,0xA2,0xD8,0x08,0x00,0x2B,0x30,0x30,0x9D); DEFINE_GUID (CLSID_SFMyComp,0x20D04FE0,0x3AEA,0x1069,0xA2,0xD8,0x08,0x00,0x2B,0x30,0x30,0x9D);
DEFINE_GUID (CLSID_SFINet, 0x871C5380,0x42A0,0x1069,0xA2,0xEA,0x08,0x00,0x2B,0x30,0x30,0x9D); DEFINE_GUID (CLSID_SFINet, 0x871C5380,0x42A0,0x1069,0xA2,0xEA,0x08,0x00,0x2B,0x30,0x30,0x9D);
DEFINE_GUID (CLSID_SFFile, 0xF3364BA0,0x65B9,0x11CE,0xA9,0xBA,0x00,0xAA,0x00,0x4A,0xE8,0x37); DEFINE_GUID (CLSID_SFFile, 0xF3364BA0,0x65B9,0x11CE,0xA9,0xBA,0x00,0xAA,0x00,0x4A,0xE8,0x37);