ReactOS 0.4.16-dev-1946-g52006dd
CDefViewUtil.cpp
Go to the documentation of this file.
1/*
2 * PROJECT: shell32
3 * LICENSE: LGPL-2.1+ (https://spdx.org/licenses/LGPL-2.1+)
4 * PURPOSE: DefView utility functions
5 * COPYRIGHT: Copyright 2024 Whindmar Saksit <whindsaks@proton.me>
6 */
7
8#include "precomp.h"
9
11
13ShellViewIdToFolderViewMode(const SHELLVIEWID *pVid)
14{
15 if (IsEqualIID(*pVid, VID_LargeIcons))
16 return FVM_ICON;
17 else if (IsEqualIID(*pVid, VID_SmallIcons))
18 return FVM_SMALLICON;
19 else if (IsEqualIID(*pVid, VID_List))
20 return FVM_LIST;
21 else if (IsEqualIID(*pVid, VID_Details))
22 return FVM_DETAILS;
23 else if (IsEqualIID(*pVid, VID_Thumbnails))
24 return FVM_THUMBNAIL;
25 else if (IsEqualIID(*pVid, VID_Tile))
26 return FVM_TILE;
27 else if (IsEqualIID(*pVid, VID_ThumbStrip))
28 return FVM_THUMBSTRIP;
29 return E_UNEXPECTED;
30}
31
32const SHELLVIEWID *
34{
35 static const SHELLVIEWID *vids[] = {
36 &VID_LargeIcons, &VID_SmallIcons,
37 &VID_Details, &VID_Thumbnails,
38 &VID_Tile, &VID_ThumbStrip,
39 };
40 FVM -= FVM_FIRST;
41 return FVM < _countof(vids) ? vids[FVM] : NULL;
42}
43
44// This class adapts the legacy function callback to work as an IShellFolderViewCB
46 public CComObjectRootEx<CComMultiThreadModelNoCS>,
47 public IShellFolderViewCB,
48 public CObjectWithSiteBase
49{
50protected:
58
59public:
61
63 {
65 }
66
68 {
69 m_psf = psvcbi->pshf;
70 m_psvOuter = psvcbi->psvOuter;
71 m_Pidl = psvcbi->pidl ? ILClone(psvcbi->pidl) : NULL;
72 m_Callback = psvcbi->pfnCallback;
73 m_FVM = psvcbi->fvm;
74 m_Events = psvcbi->lEvents;
75 return S_OK;
76 }
77
78 // IShellFolderViewCB
80 {
81 switch (uMsg)
82 {
83 case SFVM_HWNDMAIN:
85 break;
86
88 if (m_FVM)
90 break;
91 }
92
94 if (SUCCEEDED(hr))
95 return hr;
96
97 switch (uMsg)
98 {
99 case SFVM_GETNOTIFY:
101 *(LONG*)lParam = m_Events;
102 return S_OK;
103 }
104 return hr;
105 }
106
107 // IObjectWithSite
108 STDMETHODIMP SetSite(IUnknown *pUnkSite) override
109 {
110 // learn.microsoft.com/en-us/windows/win32/shell/sfvm-setisfv
111 HRESULT hr = CObjectWithSiteBase::SetSite(pUnkSite);
112 MessageSFVCB(SFVM_SETISFV, 0, (LPARAM)pUnkSite);
113 return hr;
114 }
115
119 COM_INTERFACE_ENTRY_IID(IID_IShellFolderViewCB, IShellFolderViewCB)
122};
123
124/*************************************************************************
125 * SHCreateShellFolderViewEx [SHELL32.174] (Win95+)
126 */
129{
130 if (!ppsv)
131 return E_INVALIDARG;
132 *ppsv = NULL;
133
134 TRACE("sf=%p pidl=%p cb=%p mode=0x%08x outer=%p\n",
135 pcsfv->pshf, pcsfv->pidl, pcsfv->pfnCallback,
136 pcsfv->fvm, pcsfv->psvOuter);
137
139 SFV_CREATE create = { sizeof(create), pcsfv->pshf, pcsfv->psvOuter };
140
141 if (pcsfv->pfnCallback)
142 {
143 HRESULT hr = ShellObjectCreatorInit<CShellFolderViewCBWrapper>(pcsfv,
144 IID_PPV_ARG(IShellFolderViewCB, &psfvcb));
145 if (FAILED(hr))
146 return hr;
147 create.psfvcb = psfvcb;
148 }
149 return SHCreateShellFolderView(&create, ppsv);
150}
HRESULT ShellViewIdToFolderViewMode(const SHELLVIEWID *pVid)
const SHELLVIEWID * FolderViewModeToShellViewId(UINT FVM)
EXTERN_C HRESULT WINAPI SHCreateShellFolderViewEx(_In_ LPCSFV pcsfv, _Out_ IShellView **ppsv)
HRESULT WINAPI SHCreateShellFolderView(const SFV_CREATE *pcsfv, IShellView **ppsv)
Definition: CDefView.cpp:4826
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
Definition: precomp.h:23
void shell(int argc, const char *argv[])
Definition: cmds.c:1231
#define EXTERN_C
Definition: basetyps.h:12
#define STDMETHODIMP
Definition: basetyps.h:43
HRESULT WINAPI Initialize(LPCSFV psvcbi)
CComPtr< IShellView > m_psvOuter
LPFNVIEWCALLBACK m_Callback
virtual ~CShellFolderViewCBWrapper()
STDMETHODIMP MessageSFVCB(UINT uMsg, WPARAM wParam, LPARAM lParam) override
STDMETHODIMP SetSite(IUnknown *pUnkSite) override
PIDLIST_ABSOLUTE m_Pidl
CComPtr< IShellFolder > m_psf
WPARAM wParam
Definition: combotst.c:138
LPARAM lParam
Definition: combotst.c:139
#define E_INVALIDARG
Definition: ddrawi.h:101
#define NULL
Definition: types.h:112
HANDLE HWND
Definition: compat.h:19
#define S_OK
Definition: intsafe.h:52
#define SUCCEEDED(hr)
Definition: intsafe.h:50
#define FAILED(hr)
Definition: intsafe.h:51
#define BEGIN_COM_MAP(x)
Definition: atlcom.h:581
#define COM_INTERFACE_ENTRY_IID(iid, x)
Definition: atlcom.h:601
#define DECLARE_NOT_AGGREGATABLE(x)
Definition: atlcom.h:651
#define END_COM_MAP()
Definition: atlcom.h:592
#define DECLARE_NO_REGISTRY()
Definition: atlcom.h:639
LONG_PTR LPARAM
Definition: minwindef.h:175
UINT_PTR WPARAM
Definition: minwindef.h:174
const IID IID_IObjectWithSite
static const struct access_res create[16]
Definition: package.c:7505
unsigned int UINT
Definition: ndis.h:50
#define _Out_
Definition: no_sal2.h:160
#define _In_
Definition: no_sal2.h:158
long LONG
Definition: pedump.c:60
LPITEMIDLIST WINAPI ILClone(LPCITEMIDLIST pidl)
Definition: pidl.c:238
void WINAPI ILFree(LPITEMIDLIST pidl)
Definition: pidl.c:1045
#define IsEqualIID(riid1, riid2)
Definition: guiddef.h:95
HRESULT hr
Definition: shlfolder.c:183
#define SFVM_DEFVIEWMODE
Definition: shlobj.h:1323
HRESULT(CALLBACK * LPFNVIEWCALLBACK)(_In_ IShellView *dwUser, _In_ IShellFolder *pshf, _In_ HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
Definition: shlobj.h:1269
#define SFVM_HWNDMAIN
Definition: shlobj.h:1339
#define SFVM_GETNOTIFY
Definition: shlobj.h:1342
#define SFVM_SETISFV
Definition: shlobj.h:1335
FOLDERVIEWMODE
Definition: shobjidl.idl:677
@ FVM_SMALLICON
Definition: shobjidl.idl:681
@ FVM_LIST
Definition: shobjidl.idl:682
@ FVM_TILE
Definition: shobjidl.idl:685
@ FVM_THUMBNAIL
Definition: shobjidl.idl:684
@ FVM_THUMBSTRIP
Definition: shobjidl.idl:686
@ FVM_ICON
Definition: shobjidl.idl:679
@ FVM_DETAILS
Definition: shobjidl.idl:683
@ FVM_FIRST
Definition: shobjidl.idl:680
ITEMIDLIST UNALIGNED * LPITEMIDLIST
Definition: shtypes.idl:41
#define _countof(array)
Definition: sndvol32.h:70
#define TRACE(s)
Definition: solgame.cpp:4
Definition: shlobj.h:1280
FOLDERVIEWMODE fvm
Definition: shlobj.h:1287
IShellView * psvOuter
Definition: shlobj.h:1283
LPFNVIEWCALLBACK pfnCallback
Definition: shlobj.h:1286
LONG lEvents
Definition: shlobj.h:1285
PCIDLIST_ABSOLUTE pidl
Definition: shlobj.h:1284
IShellFolder * pshf
Definition: shlobj.h:1282
#define WINAPI
Definition: msvc.h:6
#define E_UNEXPECTED
Definition: winerror.h:3528
#define IID_PPV_ARG(Itype, ppType)