[PATCH 03/10] explorerframe: Add a stub of NamespaceTreeControl.
David Hedberg
david.hedberg at gmail.com
Sat Jul 31 13:02:47 CDT 2010
---
dlls/explorerframe/Makefile.in | 4 +-
dlls/explorerframe/explorerframe_main.h | 4 +
dlls/explorerframe/nstc.c | 356 +++++++++++++++++++++++++++++++
3 files changed, 363 insertions(+), 1 deletions(-)
create mode 100644 dlls/explorerframe/nstc.c
diff --git a/dlls/explorerframe/Makefile.in b/dlls/explorerframe/Makefile.in
index 7bec42d..52c3c27 100644
--- a/dlls/explorerframe/Makefile.in
+++ b/dlls/explorerframe/Makefile.in
@@ -4,9 +4,11 @@ TOPOBJDIR = ../..
SRCDIR = @srcdir@
VPATH = @srcdir@
MODULE = explorerframe.dll
+IMPORTS = uuid
C_SRCS = \
- explorerframe_main.c
+ explorerframe_main.c \
+ nstc.c
RC_SRCS = \
version.rc
diff --git a/dlls/explorerframe/explorerframe_main.h b/dlls/explorerframe/explorerframe_main.h
index 45be664..26d0f7f 100644
--- a/dlls/explorerframe/explorerframe_main.h
+++ b/dlls/explorerframe/explorerframe_main.h
@@ -21,10 +21,14 @@
#ifndef __WINE_EXPLORERFRAME_H
#define __WINE_EXPLORERFRAME_H
+#include "shlobj.h"
+
extern HINSTANCE explorerframe_hinstance;
extern LONG EFRAME_refCount;
static inline void EFRAME_LockModule(void) { InterlockedIncrement( &EFRAME_refCount ); }
static inline void EFRAME_UnlockModule(void) { InterlockedDecrement( &EFRAME_refCount ); }
+HRESULT NamespaceTreeControl_Constructor(IUnknown *pUnkOuter, REFIID riid, void **ppv);
+
#endif /* __WINE_EXPLORERFRAME_H */
diff --git a/dlls/explorerframe/nstc.c b/dlls/explorerframe/nstc.c
new file mode 100644
index 0000000..5c25d8c
--- /dev/null
+++ b/dlls/explorerframe/nstc.c
@@ -0,0 +1,356 @@
+/*
+ * NamespaceTreeControl implementation.
+ *
+ * Copyright 2010 David Hedberg
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#include <stdarg.h>
+
+#define COBJMACROS
+#define NONAMELESSUNION
+#define NONAMELESSSTRUCT
+
+#include "winerror.h"
+#include "windef.h"
+#include "winbase.h"
+
+#include "wine/debug.h"
+
+#include "explorerframe_main.h"
+
+WINE_DEFAULT_DEBUG_CHANNEL(nstc);
+
+typedef struct {
+ const INameSpaceTreeControl2Vtbl *lpVtbl;
+ LONG ref;
+} NSTC2Impl;
+
+/**************************************************************************
+ * INameSpaceTreeControl2 Implementation
+ */
+static HRESULT WINAPI NSTC2_fnQueryInterface(INameSpaceTreeControl2* iface,
+ REFIID riid,
+ void **ppvObject)
+{
+ NSTC2Impl *This = (NSTC2Impl*)iface;
+ TRACE("%p (%s, %p)\n", This, debugstr_guid(riid), ppvObject);
+
+ *ppvObject = NULL;
+ if(IsEqualIID(riid, &IID_INameSpaceTreeControl2) ||
+ IsEqualIID(riid, &IID_INameSpaceTreeControl) ||
+ IsEqualIID(riid, &IID_IUnknown))
+ {
+ *ppvObject = This;
+ }
+
+ if(*ppvObject)
+ {
+ IUnknown_AddRef((IUnknown*)*ppvObject);
+ return S_OK;
+ }
+
+ return E_NOINTERFACE;
+}
+
+static ULONG WINAPI NSTC2_fnAddRef(INameSpaceTreeControl2* iface)
+{
+ NSTC2Impl *This = (NSTC2Impl*)iface;
+ LONG ref = InterlockedIncrement(&This->ref);
+
+ TRACE("%p - ref %d\n", This, ref);
+
+ return ref;
+}
+
+static ULONG WINAPI NSTC2_fnRelease(INameSpaceTreeControl2* iface)
+{
+ NSTC2Impl *This = (NSTC2Impl*)iface;
+ LONG ref = InterlockedDecrement(&This->ref);
+
+ TRACE("%p - ref: %d\n", This, ref);
+
+ if(!ref)
+ {
+ TRACE("Freeing.\n");
+ HeapFree(GetProcessHeap(), 0, This);
+ EFRAME_UnlockModule();
+ return 0;
+ }
+
+ return ref;
+}
+
+static HRESULT WINAPI NSTC2_fnInitialize(INameSpaceTreeControl2* iface,
+ HWND hwndParent,
+ RECT *prc,
+ NSTCSTYLE nstcsFlags)
+{
+ NSTC2Impl *This = (NSTC2Impl*)iface;
+ FIXME("stub, %p (%p, %p, %x)\n", This, hwndParent, prc, nstcsFlags);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI NSTC2_fnTreeAdvise(INameSpaceTreeControl2* iface,
+ IUnknown *punk,
+ DWORD *pdwCookie)
+{
+ NSTC2Impl *This = (NSTC2Impl*)iface;
+ FIXME("stub, %p (%p, %p)\n", This, punk, pdwCookie);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI NSTC2_fnTreeUnadvise(INameSpaceTreeControl2* iface,
+ DWORD dwCookie)
+{
+ NSTC2Impl *This = (NSTC2Impl*)iface;
+ FIXME("stub, %p (%x)\n", This, dwCookie);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI NSTC2_fnInsertRoot(INameSpaceTreeControl2* iface,
+ int iIndex,
+ IShellItem *psiRoot,
+ SHCONTF grfEnumFlags,
+ NSTCROOTSTYLE grfRootStyle,
+ IShellItemFilter *pif)
+{
+ NSTC2Impl *This = (NSTC2Impl*)iface;
+ FIXME("stub, %p, %p, %x, %x, %p\n", This, psiRoot, grfEnumFlags, grfRootStyle, pif);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI NSTC2_fnAppendRoot(INameSpaceTreeControl2* iface,
+ IShellItem *psiRoot,
+ SHCONTF grfEnumFlags,
+ NSTCROOTSTYLE grfRootStyle,
+ IShellItemFilter *pif)
+{
+ NSTC2Impl *This = (NSTC2Impl*)iface;
+ FIXME("stub, %p, %p, %x, %x, %p\n",
+ This, psiRoot, grfEnumFlags, grfRootStyle, pif);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI NSTC2_fnRemoveRoot(INameSpaceTreeControl2* iface,
+ IShellItem *psiRoot)
+{
+ NSTC2Impl *This = (NSTC2Impl*)iface;
+ FIXME("stub, %p (%p)\n", This, psiRoot);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI NSTC2_fnRemoveAllRoots(INameSpaceTreeControl2* iface)
+{
+ NSTC2Impl *This = (NSTC2Impl*)iface;
+ FIXME("stub, %p\n", This);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI NSTC2_fnGetRootItems(INameSpaceTreeControl2* iface,
+ IShellItemArray **ppsiaRootItems)
+{
+ NSTC2Impl *This = (NSTC2Impl*)iface;
+ FIXME("stub, %p (%p)\n", This, ppsiaRootItems);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI NSTC2_fnSetItemState(INameSpaceTreeControl2* iface,
+ IShellItem *psi,
+ NSTCITEMSTATE nstcisMask,
+ NSTCITEMSTATE nstcisFlags)
+{
+ NSTC2Impl *This = (NSTC2Impl*)iface;
+ FIXME("stub, %p (%p, %x, %x)\n", This, psi, nstcisMask, nstcisFlags);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI NSTC2_fnGetItemState(INameSpaceTreeControl2* iface,
+ IShellItem *psi,
+ NSTCITEMSTATE nstcisMask,
+ NSTCITEMSTATE *pnstcisFlags)
+{
+ NSTC2Impl *This = (NSTC2Impl*)iface;
+ FIXME("stub, %p (%p, %x, %p)\n", This, psi, nstcisMask, pnstcisFlags);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI NSTC2_fnGetSelectedItems(INameSpaceTreeControl2* iface,
+ IShellItemArray **psiaItems)
+{
+ NSTC2Impl *This = (NSTC2Impl*)iface;
+ FIXME("stub, %p (%p)\n", This, psiaItems);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI NSTC2_fnGetItemCustomState(INameSpaceTreeControl2* iface,
+ IShellItem *psi,
+ int *piStateNumber)
+{
+ NSTC2Impl *This = (NSTC2Impl*)iface;
+ FIXME("stub, %p (%p, %p)\n", This, psi, piStateNumber);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI NSTC2_fnSetItemCustomState(INameSpaceTreeControl2* iface,
+ IShellItem *psi,
+ int iStateNumber)
+{
+ NSTC2Impl *This = (NSTC2Impl*)iface;
+ FIXME("stub, %p (%p, %d)\n", This, psi, iStateNumber);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI NSTC2_fnEnsureItemVisible(INameSpaceTreeControl2* iface,
+ IShellItem *psi)
+{
+ NSTC2Impl *This = (NSTC2Impl*)iface;
+ FIXME("stub, %p (%p)\n", This, psi);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI NSTC2_fnSetTheme(INameSpaceTreeControl2* iface,
+ LPCWSTR pszTheme)
+{
+ NSTC2Impl *This = (NSTC2Impl*)iface;
+ FIXME("stub, %p (%p)\n", This, pszTheme);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI NSTC2_fnGetNextItem(INameSpaceTreeControl2* iface,
+ IShellItem *psi,
+ NSTCGNI nstcgi,
+ IShellItem **ppsiNext)
+{
+ NSTC2Impl *This = (NSTC2Impl*)iface;
+ FIXME("stub, %p (%p, %x, %p)\n", This, psi, nstcgi, ppsiNext);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI NSTC2_fnHitTest(INameSpaceTreeControl2* iface,
+ POINT *ppt,
+ IShellItem **ppsiOut)
+{
+ NSTC2Impl *This = (NSTC2Impl*)iface;
+ FIXME("stub, %p (%p, %p)\n", This, ppsiOut, ppt);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI NSTC2_fnGetItemRect(INameSpaceTreeControl2* iface,
+ IShellItem *psi,
+ RECT *prect)
+{
+ NSTC2Impl *This = (NSTC2Impl*)iface;
+ FIXME("stub, %p (%p, %p)\n", This, psi, prect);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI NSTC2_fnCollapseAll(INameSpaceTreeControl2* iface)
+{
+ NSTC2Impl *This = (NSTC2Impl*)iface;
+ FIXME("stub, %p\n", This);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI NSTC2_fnSetControlStyle(INameSpaceTreeControl2* iface,
+ NSTCSTYLE nstcsMask,
+ NSTCSTYLE nstcsStyle)
+{
+ NSTC2Impl *This = (NSTC2Impl*)iface;
+ FIXME("stub, %p (%x, %x)\n", This, nstcsMask, nstcsStyle);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI NSTC2_fnGetControlStyle(INameSpaceTreeControl2* iface,
+ NSTCSTYLE nstcsMask,
+ NSTCSTYLE *pnstcsStyle)
+{
+ NSTC2Impl *This = (NSTC2Impl*)iface;
+ FIXME("stub, %p (%x, %p)\n", This, nstcsMask, pnstcsStyle);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI NSTC2_fnSetControlStyle2(INameSpaceTreeControl2* iface,
+ NSTCSTYLE2 nstcsMask,
+ NSTCSTYLE2 nstcsStyle)
+{
+ NSTC2Impl *This = (NSTC2Impl*)iface;
+ FIXME("stub, %p (%x, %x)\n", This, nstcsMask, nstcsStyle);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI NSTC2_fnGetControlStyle2(INameSpaceTreeControl2* iface,
+ NSTCSTYLE2 nstcsMask,
+ NSTCSTYLE2 *pnstcsStyle)
+{
+ NSTC2Impl *This = (NSTC2Impl*)iface;
+ FIXME("stub, %p (%x, %p)\n", This, nstcsMask, pnstcsStyle);
+ return E_NOTIMPL;
+}
+
+static const INameSpaceTreeControl2Vtbl vt_INameSpaceTreeControl2 = {
+ NSTC2_fnQueryInterface,
+ NSTC2_fnAddRef,
+ NSTC2_fnRelease,
+ NSTC2_fnInitialize,
+ NSTC2_fnTreeAdvise,
+ NSTC2_fnTreeUnadvise,
+ NSTC2_fnAppendRoot,
+ NSTC2_fnInsertRoot,
+ NSTC2_fnRemoveRoot,
+ NSTC2_fnRemoveAllRoots,
+ NSTC2_fnGetRootItems,
+ NSTC2_fnSetItemState,
+ NSTC2_fnGetItemState,
+ NSTC2_fnGetSelectedItems,
+ NSTC2_fnGetItemCustomState,
+ NSTC2_fnSetItemCustomState,
+ NSTC2_fnEnsureItemVisible,
+ NSTC2_fnSetTheme,
+ NSTC2_fnGetNextItem,
+ NSTC2_fnHitTest,
+ NSTC2_fnGetItemRect,
+ NSTC2_fnCollapseAll,
+ NSTC2_fnSetControlStyle,
+ NSTC2_fnGetControlStyle,
+ NSTC2_fnSetControlStyle2,
+ NSTC2_fnGetControlStyle2
+};
+
+HRESULT NamespaceTreeControl_Constructor(IUnknown *pUnkOuter, REFIID riid, void **ppv)
+{
+ NSTC2Impl *nstc;
+ HRESULT ret;
+
+ TRACE ("%p %s %p\n", pUnkOuter, debugstr_guid(riid), ppv);
+
+ if(!ppv)
+ return E_POINTER;
+ if(pUnkOuter)
+ return CLASS_E_NOAGGREGATION;
+
+ EFRAME_LockModule();
+
+ nstc = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(NSTC2Impl));
+ nstc->ref = 1;
+ nstc->lpVtbl = &vt_INameSpaceTreeControl2;
+
+ ret = INameSpaceTreeControl_QueryInterface((INameSpaceTreeControl*)nstc, riid, ppv);
+ INameSpaceTreeControl_Release((INameSpaceTreeControl*)nstc);
+
+ TRACE("--(%p)\n", ppv);
+ return ret;
+}
--
1.7.2
More information about the wine-patches
mailing list