[ros-diffs] [janderwald] 34322: - implement IShellPropSheetExt for shellink - interface not yet used

janderwald at svn.reactos.org janderwald at svn.reactos.org
Sun Jul 6 11:09:10 CEST 2008


Author: janderwald
Date: Sun Jul  6 04:09:09 2008
New Revision: 34322

URL: http://svn.reactos.org/svn/reactos?rev=34322&view=rev
Log:
- implement IShellPropSheetExt for shellink
- interface not yet used

Modified:
    trunk/reactos/dll/win32/shell32/shelllink.c

Modified: trunk/reactos/dll/win32/shell32/shelllink.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/shell32/shelllink.c?rev=34322&r1=34321&r2=34322&view=diff
==============================================================================
--- trunk/reactos/dll/win32/shell32/shelllink.c [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/shell32/shelllink.c [iso-8859-1] Sun Jul  6 04:09:09 2008
@@ -125,6 +125,7 @@
 static const IShellExtInitVtbl eivt;
 static const IContextMenuVtbl cmvt;
 static const IObjectWithSiteVtbl owsvt;
+static const IShellPropSheetExtVtbl pse;
 
 /* IShellLink Implementation */
 
@@ -138,6 +139,7 @@
 	const IShellExtInitVtbl *lpvtblShellExtInit;
 	const IContextMenuVtbl *lpvtblContextMenu;
 	const IObjectWithSiteVtbl *lpvtblObjectWithSite;
+	const IShellPropSheetExtVtbl * lpvtblPropSheetExt;
 
 	LONG            ref;
 
@@ -201,6 +203,12 @@
     return (IShellLinkImpl *)((char*)iface - FIELD_OFFSET(IShellLinkImpl, lpvtblObjectWithSite));
 }
 
+static inline IShellLinkImpl *impl_from_IShellPropSheetExt( IShellPropSheetExt *iface )
+{
+    return (IShellLinkImpl *)((char*)iface - FIELD_OFFSET(IShellLinkImpl, lpvtblPropSheetExt));
+}
+
+
 static HRESULT ShellLink_UpdatePath(LPCWSTR sPathRel, LPCWSTR path, LPCWSTR sWorkDir, LPWSTR* psPath);
 
 /* strdup on the process heap */
@@ -264,6 +272,10 @@
     else if(IsEqualIID(riid, &IID_IObjectWithSite))
     {
         *ppvObj = &(This->lpvtblObjectWithSite);
+    }
+    else if(IsEqualIID(riid, &IID_IShellPropSheetExt))
+    {
+        *ppvObj = &(This->lpvtblPropSheetExt);
     }
 
     if(*ppvObj)
@@ -1221,6 +1233,7 @@
 	sl->lpvtblShellExtInit = &eivt;
 	sl->lpvtblContextMenu = &cmvt;
 	sl->lpvtblObjectWithSite = &owsvt;
+	sl->lpvtblPropSheetExt = &pse;
 	sl->iShowCmd = SW_SHOWNORMAL;
 	sl->bDirty = FALSE;
 	sl->iIdOpen = -1;
@@ -2709,54 +2722,67 @@
 }
 
 /**************************************************************************
- * ShellLink_ShortcutDialog [Internal]
- *
- * creates a shortcut property dialog
+ * ShellLink_IShellPropSheetExt interface
  */
 
-HRESULT WINAPI
-ShellLink_ShowProperties( IShellLinkImpl *This )
-{
-    PROPSHEETHEADERW pinfo;
-    HPROPSHEETPAGE hppages[MAX_PROPERTY_SHEET_PAGE];
-    HPROPSHEETPAGE hpage;
-    UINT numpages = 0;
-
-    TRACE("ShellLink_ShortcutDialog entered\n");
-
-    memset(hppages, 0x0, sizeof(HPROPSHEETPAGE) * MAX_PROPERTY_SHEET_PAGE);
-
-    hpage = SH_CreatePropertySheetPage("SHELL_FILE_GENERAL_DLG", SH_FileGeneralDlgProc, (LPARAM)This->sLinkPath, NULL);
-    if ( hpage == NULL )
-        return E_FAIL;
+static HRESULT WINAPI
+ ShellLink_IShellPropSheetExt_QueryInterface( IShellPropSheetExt* iface, REFIID riid, void** ppvObject )
+{
+    IShellLinkImpl *This = impl_from_IShellPropSheetExt(iface);
+    return ShellLink_QueryInterface( This, riid, ppvObject );
+}
+
+static ULONG WINAPI
+ ShellLink_IShellPropSheetExt_AddRef( IShellPropSheetExt* iface )
+{
+    IShellLinkImpl *This = impl_from_IShellPropSheetExt(iface);
+    return ShellLink_AddRef( This );
+}
+
+static ULONG WINAPI
+ ShellLink_IShellPropSheetExt_Release( IShellPropSheetExt* iface )
+{
+    IShellLinkImpl *This = impl_from_IShellPropSheetExt(iface);
+    return ShellLink_Release( This );
+}
+
+static HRESULT WINAPI
+ ShellLink_IShellPropSheetExt_AddPages( IShellPropSheetExt *iface, LPFNADDPROPSHEETPAGE pfnAddPage, LPARAM lParam)
+{
+    HPROPSHEETPAGE hPage;
+    BOOL bRet;
+    IShellLinkImpl *This = impl_from_IShellPropSheetExt(iface);
+
+    hPage = SH_CreatePropertySheetPage("SHELL_GENERAL_SHORTCUT_DLG", SH_ShellLinkDlgProc, (LPARAM)This, NULL);
+    if (hPage == NULL)
+    {
+       ERR("failed to create property sheet page\n");
+       return E_FAIL;
+    }
+
+    bRet = pfnAddPage(hPage, lParam);
+    if (bRet)
+       return S_OK;
     else
-        hppages[numpages++] = hpage;
-
-	hpage = SH_CreatePropertySheetPage("SHELL_GENERAL_SHORTCUT_DLG", SH_ShellLinkDlgProc, (LPARAM)This, NULL);
-	if ( hpage == NULL )
-    {
-        ERR("SH_CreatePropertySheetPage failed\n");
-        DestroyPropertySheetPage(hppages[0]);
-        return E_FAIL;
-	}
-    hppages[numpages++] = hpage;
-
-    ///FIXME
-    /// load extensions
-
-    memset(&pinfo, 0x0, sizeof(PROPSHEETHEADERW));
-    pinfo.dwSize = sizeof(PROPSHEETHEADERW);
-    pinfo.dwFlags = PSH_NOCONTEXTHELP | PSH_PROPTITLE;
-    pinfo.nPages = numpages;
-	pinfo.u3.phpage = hppages;
-    pinfo.pszCaption = This->sDescription;
-    pinfo.u2.nStartPage = 1;
-
-    if ( PropertySheetW(&pinfo) < 0 )
-        return E_FAIL;
-	else
-        return S_OK;
-}
+       return E_FAIL;
+}
+
+static HRESULT WINAPI
+ ShellLink_IShellPropSheetExt_ReplacePages( IShellPropSheetExt *iface, UINT uPageID, LPFNADDPROPSHEETPAGE pfnReplacePage, LPARAM lParam)
+{
+    IShellLinkImpl *This = impl_from_IShellPropSheetExt(iface);
+    TRACE("(%p) (uPageID %u, pfnReplacePage %p lParam %p\n", This, uPageID, pfnReplacePage, lParam);
+    return E_NOTIMPL;
+}
+
+static const IShellPropSheetExtVtbl pse =
+{
+    ShellLink_IShellPropSheetExt_QueryInterface,
+    ShellLink_IShellPropSheetExt_AddRef,
+    ShellLink_IShellPropSheetExt_Release,
+    ShellLink_IShellPropSheetExt_AddPages,
+    ShellLink_IShellPropSheetExt_ReplacePages
+};
 
 static HRESULT WINAPI
 ShellLink_InvokeCommand( IContextMenu* iface, LPCMINVOKECOMMANDINFO lpici )



More information about the Ros-diffs mailing list