Nikolay Sivov : shell32: Stub IFolderView implementation for IShellView instance.
Alexandre Julliard
julliard at winehq.org
Fri Mar 5 09:42:55 CST 2010
Module: wine
Branch: master
Commit: 8032ae704772aa7e6f7d4d13938dbe6d1dc11ad1
URL: http://source.winehq.org/git/wine.git/?a=commit;h=8032ae704772aa7e6f7d4d13938dbe6d1dc11ad1
Author: Nikolay Sivov <nsivov at codeweavers.com>
Date: Thu Mar 4 20:19:03 2010 +0300
shell32: Stub IFolderView implementation for IShellView instance.
---
dlls/shell32/shlview.c | 159 +++++++++++++++++++++++++++++++++++++++++++++++-
include/shobjidl.idl | 46 ++++++++++++++
include/shtypes.idl | 3 +
3 files changed, 207 insertions(+), 1 deletions(-)
diff --git a/dlls/shell32/shlview.c b/dlls/shell32/shlview.c
index b14ba78..8c30d72 100644
--- a/dlls/shell32/shlview.c
+++ b/dlls/shell32/shlview.c
@@ -57,6 +57,7 @@
#include "wingdi.h"
#include "winuser.h"
#include "shlobj.h"
+#include "shobjidl.h"
#include "undocshell.h"
#include "shresdef.h"
#include "wine/debug.h"
@@ -84,6 +85,7 @@ typedef struct
const IDropTargetVtbl* lpvtblDropTarget;
const IDropSourceVtbl* lpvtblDropSource;
const IViewObjectVtbl* lpvtblViewObject;
+ const IFolderViewVtbl* lpvtblFolderView;
IShellFolder* pSFParent;
IShellFolder2* pSF2Parent;
IShellBrowser* pShellBrowser;
@@ -114,7 +116,7 @@ static const IOleCommandTargetVtbl ctvt;
static const IDropTargetVtbl dtvt;
static const IDropSourceVtbl dsvt;
static const IViewObjectVtbl vovt;
-
+static const IFolderViewVtbl fviewvt;
static inline IShellViewImpl *impl_from_IOleCommandTarget( IOleCommandTarget *iface )
{
@@ -136,6 +138,11 @@ static inline IShellViewImpl *impl_from_IViewObject( IViewObject *iface )
return (IShellViewImpl *)((char*)iface - FIELD_OFFSET(IShellViewImpl, lpvtblViewObject));
}
+static inline IShellViewImpl *impl_from_IFolderView( IFolderView *iface )
+{
+ return (IShellViewImpl *)((char*)iface - FIELD_OFFSET(IShellViewImpl, lpvtblFolderView));
+}
+
/* ListView Header ID's */
#define LISTVIEW_COLUMN_NAME 0
#define LISTVIEW_COLUMN_SIZE 1
@@ -192,6 +199,7 @@ IShellView * IShellView_Constructor( IShellFolder * pFolder)
sv->lpvtblDropTarget=&dtvt;
sv->lpvtblDropSource=&dsvt;
sv->lpvtblViewObject=&vovt;
+ sv->lpvtblFolderView=&fviewvt;
sv->pSFParent = pFolder;
if(pFolder) IShellFolder_AddRef(pFolder);
@@ -1692,6 +1700,10 @@ static HRESULT WINAPI IShellView_fnQueryInterface(IShellView2 * iface,REFIID rii
{
*ppvObj = This;
}
+ else if(IsEqualIID(riid, &IID_IFolderView))
+ {
+ *ppvObj = &This->lpvtblFolderView;
+ }
else if(IsEqualIID(riid, &IID_IOleCommandTarget))
{
*ppvObj = &This->lpvtblOleCommandTarget;
@@ -2658,3 +2670,148 @@ static const IViewObjectVtbl vovt =
ISVViewObject_SetAdvise,
ISVViewObject_GetAdvise
};
+
+/* IFolderView */
+static HRESULT WINAPI IFView_QueryInterface(
+ IFolderView *iface,
+ REFIID riid,
+ LPVOID *ppvObj)
+{
+ IShellViewImpl *This = impl_from_IFolderView(iface);
+ TRACE("(%p)->(IID:%s,%p)\n", This, debugstr_guid(riid), ppvObj);
+ return IShellView2_QueryInterface((IShellView2*)This, riid, ppvObj);
+}
+
+static ULONG WINAPI IFView_AddRef( IFolderView *iface)
+{
+ IShellViewImpl *This = impl_from_IFolderView(iface);
+ TRACE("(%p)->(count=%u)\n", This, This->ref);
+ return IShellView2_AddRef((IShellView2*)This);
+}
+
+static ULONG WINAPI IFView_Release( IFolderView *iface)
+{
+ IShellViewImpl *This = impl_from_IFolderView(iface);
+ TRACE("(%p)->(count=%u)\n", This, This->ref);
+ return IShellView2_Release((IShellView2*)This);
+}
+
+static HRESULT WINAPI IFView_GetCurrentViewMode(IFolderView *iface, UINT *mode)
+{
+ IShellViewImpl *This = impl_from_IFolderView(iface);
+ FIXME("(%p)->(%p), stub\n", This, mode);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI IFView_SetCurrentViewMode(IFolderView *iface, UINT mode)
+{
+ IShellViewImpl *This = impl_from_IFolderView(iface);
+ FIXME("(%p)->(%u), stub\n", This, mode);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI IFView_GetFolder(IFolderView *iface, REFIID riid, void **ppv)
+{
+ IShellViewImpl *This = impl_from_IFolderView(iface);
+ FIXME("(%p)->(%s, %p), stub\n", This, debugstr_guid(riid), ppv);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI IFView_Item(IFolderView *iface, int index, PITEMID_CHILD *ppidl)
+{
+ IShellViewImpl *This = impl_from_IFolderView(iface);
+ FIXME("(%p)->(%d %p), stub\n", This, index, ppidl);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI IFView_ItemCount(IFolderView *iface, UINT flags, int *items)
+{
+ IShellViewImpl *This = impl_from_IFolderView(iface);
+ FIXME("(%p)->(%u %p), stub\n", This, flags, items);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI IFView_Items(IFolderView *iface, UINT flags, REFIID riid, void **ppv)
+{
+ IShellViewImpl *This = impl_from_IFolderView(iface);
+ FIXME("(%p)->(%u %s %p), stub\n", This, flags, debugstr_guid(riid), ppv);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI IFView_GetSelectionMarkedItem(IFolderView *iface, int *item)
+{
+ IShellViewImpl *This = impl_from_IFolderView(iface);
+ FIXME("(%p)->(%p), stub\n", This, item);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI IFView_GetFocusedItem(IFolderView *iface, int *item)
+{
+ IShellViewImpl *This = impl_from_IFolderView(iface);
+ FIXME("(%p)->(%p), stub\n", This, item);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI IFView_GetItemPosition(IFolderView *iface, PCUITEMID_CHILD pidl, POINT *ppt)
+{
+ IShellViewImpl *This = impl_from_IFolderView(iface);
+ FIXME("(%p)->(%p %p), stub\n", This, pidl, ppt);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI IFView_GetSpacing(IFolderView *iface, POINT *pt)
+{
+ IShellViewImpl *This = impl_from_IFolderView(iface);
+ FIXME("(%p)->(%p), stub\n", This, pt);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI IFView_GetDefaultSpacing(IFolderView *iface, POINT *pt)
+{
+ IShellViewImpl *This = impl_from_IFolderView(iface);
+ FIXME("(%p)->(%p), stub\n", This, pt);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI IFView_GetAutoArrange(IFolderView *iface)
+{
+ IShellViewImpl *This = impl_from_IFolderView(iface);
+ FIXME("(%p), stub\n", This);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI IFView_SelectItem(IFolderView *iface, int item, DWORD flags)
+{
+ IShellViewImpl *This = impl_from_IFolderView(iface);
+ FIXME("(%p)->(%d, %x), stub\n", This, item, flags);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI IFView_SelectAndPositionItems(IFolderView *iface, UINT cidl,
+ PCUITEMID_CHILD_ARRAY apidl, POINT *apt, DWORD flags)
+{
+ IShellViewImpl *This = impl_from_IFolderView(iface);
+ FIXME("(%p)->(%u %p %p %x), stub\n", This, cidl, apidl, apt, flags);
+ return E_NOTIMPL;
+}
+
+static const IFolderViewVtbl fviewvt =
+{
+ IFView_QueryInterface,
+ IFView_AddRef,
+ IFView_Release,
+ IFView_GetCurrentViewMode,
+ IFView_SetCurrentViewMode,
+ IFView_GetFolder,
+ IFView_Item,
+ IFView_ItemCount,
+ IFView_Items,
+ IFView_GetSelectionMarkedItem,
+ IFView_GetFocusedItem,
+ IFView_GetItemPosition,
+ IFView_GetSpacing,
+ IFView_GetDefaultSpacing,
+ IFView_GetAutoArrange,
+ IFView_SelectItem,
+ IFView_SelectAndPositionItems
+};
diff --git a/include/shobjidl.idl b/include/shobjidl.idl
index 60da174..e1bf70b 100644
--- a/include/shobjidl.idl
+++ b/include/shobjidl.idl
@@ -535,6 +535,52 @@ cpp_quote("#include <poppack.h>")
);
}
+/*****************************************************************************
+ * IFolderView interface
+ */
+[
+ uuid(cde725b0-ccc9-4519-917e-325d72fab4ce),
+ object,
+ pointer_default(unique)
+]
+interface IFolderView : IUnknown
+{
+ HRESULT GetCurrentViewMode( [out] UINT *mode );
+ HRESULT SetCurrentViewMode( [in] UINT mode );
+ HRESULT GetFolder( [in] REFIID riid, [out, iid_is(riid)] void **ppv );
+ HRESULT Item(
+ [in] int index,
+ [out] PITEMID_CHILD *ppidl
+ );
+ HRESULT ItemCount(
+ [in] UINT flags,
+ [out] int *items
+ );
+ HRESULT Items(
+ [in] UINT flags,
+ [in] REFIID riid,
+ [out, iid_is(riid)] void **ppv
+ );
+ HRESULT GetSelectionMarkedItem( [out] int *item );
+ HRESULT GetFocusedItem( [out] int *item );
+ HRESULT GetItemPosition(
+ [in] PCUITEMID_CHILD pidl,
+ [out] POINT* ppt
+ );
+ HRESULT GetSpacing( [in, out, unique] POINT* pt );
+ HRESULT GetDefaultSpacing( [out] POINT* pt );
+ HRESULT GetAutoArrange();
+ HRESULT SelectItem(
+ [in] int item,
+ [in] DWORD flags
+ );
+ HRESULT SelectAndPositionItems(
+ [in] UINT cidl,
+ [in, size_is(cidl)] PCUITEMID_CHILD_ARRAY apidl,
+ [in, unique, size_is(cidl)] POINT* apt,
+ [in] DWORD flags
+ );
+}
/*****************************************************************************
* IShellBrowser interface
diff --git a/include/shtypes.idl b/include/shtypes.idl
index 2433fb5..021d467 100644
--- a/include/shtypes.idl
+++ b/include/shtypes.idl
@@ -34,6 +34,9 @@ typedef struct _ITEMIDLIST
SHITEMID mkid; /* first itemid in list */
} ITEMIDLIST,*LPITEMIDLIST;
typedef const ITEMIDLIST *LPCITEMIDLIST;
+typedef LPITEMIDLIST PITEMID_CHILD;
+typedef LPCITEMIDLIST PCUITEMID_CHILD;
+typedef LPCITEMIDLIST *PCUITEMID_CHILD_ARRAY;
cpp_quote("#include <poppack.h>")
#ifndef MAX_PATH
More information about the wine-cvs
mailing list