mirror of
https://github.com/reactos/reactos.git
synced 2025-05-22 18:45:00 +00:00
[SHELLFIND] Add CFindFolder
This commit is contained in:
parent
7544656b85
commit
ccf9ce324f
9 changed files with 282 additions and 0 deletions
|
@ -155,6 +155,7 @@ OBJECT_ENTRY(CLSID_ExplorerBand, CExplorerBand)
|
|||
OBJECT_ENTRY(CLSID_FileSearchBand, CSearchBar)
|
||||
OBJECT_ENTRY(CLSID_ProgressDialog, CProgressDialog)
|
||||
OBJECT_ENTRY(CLSID_ISFBand, CISFBand)
|
||||
OBJECT_ENTRY(CLSID_FindFolder, CFindFolder)
|
||||
END_OBJECT_MAP()
|
||||
|
||||
CBrowseUIModule gModule;
|
||||
|
|
|
@ -49,6 +49,7 @@ IDR_ISFBAND REGISTRY "res/isfband.rgs"
|
|||
IDR_ACLCUSTOMMRU REGISTRY "res/custommru.rgs"
|
||||
IDR_TASKBARLIST REGISTRY "res/taskbarlist.rgs"
|
||||
IDR_FILESEARCHBAND REGISTRY "res/filesearchband.rgs"
|
||||
IDR_FINDFOLDER REGISTRY "res/findfolder.rgs"
|
||||
|
||||
#include <reactos/manifest_dll.rc>
|
||||
|
||||
|
|
|
@ -47,6 +47,7 @@
|
|||
#include "shellbars/CBandSite.h"
|
||||
#include "shellbars/CBandSiteMenu.h"
|
||||
#include "shellbars/CISFBand.h"
|
||||
#include "shellfind/CFindFolder.h"
|
||||
#include "shellfind/CSearchBar.h"
|
||||
#include "brandband.h"
|
||||
#include "internettoolbar.h"
|
||||
|
|
18
dll/win32/browseui/res/findfolder.rgs
Normal file
18
dll/win32/browseui/res/findfolder.rgs
Normal file
|
@ -0,0 +1,18 @@
|
|||
HKCR
|
||||
{
|
||||
NoRemove CLSID
|
||||
{
|
||||
ForceRemove {E17D4FC0-5564-11D1-83F2-00A0C90DC849} = s 'Search Results Folder'
|
||||
{
|
||||
DefaultIcon = e '%%SystemRoot%%\System32\shell32.dll,-134'
|
||||
InprocServer32 = s '%MODULE%'
|
||||
{
|
||||
val ThreadingModel = s 'Apartment'
|
||||
}
|
||||
ShellFolder
|
||||
{
|
||||
val Attributes = d '0x20180000'
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -106,6 +106,7 @@
|
|||
#define IDR_ACLCUSTOMMRU 144
|
||||
#define IDR_TASKBARLIST 145
|
||||
#define IDR_FILESEARCHBAND 146
|
||||
#define IDR_FINDFOLDER 147
|
||||
|
||||
#define IDS_SMALLICONS 12301
|
||||
#define IDS_LARGEICONS 12302
|
||||
|
|
175
dll/win32/browseui/shellfind/CFindFolder.cpp
Normal file
175
dll/win32/browseui/shellfind/CFindFolder.cpp
Normal file
|
@ -0,0 +1,175 @@
|
|||
/*
|
||||
* PROJECT: ReactOS Search Shell Extension
|
||||
* LICENSE: GPL-2.0-or-later (https://spdx.org/licenses/GPL-2.0-or-later)
|
||||
* PURPOSE: Search results folder
|
||||
* COPYRIGHT: Copyright 2019 Brock Mammen
|
||||
*/
|
||||
|
||||
#include "CFindFolder.h"
|
||||
|
||||
WINE_DEFAULT_DEBUG_CHANNEL(shellfind);
|
||||
|
||||
struct FolderViewColumns
|
||||
{
|
||||
LPCWSTR wzColumnName;
|
||||
DWORD dwDefaultState;
|
||||
int fmt;
|
||||
int cxChar;
|
||||
};
|
||||
|
||||
static FolderViewColumns g_ColumnDefs[] =
|
||||
{
|
||||
{L"Name", SHCOLSTATE_TYPE_STR | SHCOLSTATE_ONBYDEFAULT, LVCFMT_LEFT, 30},
|
||||
{L"In Folder", SHCOLSTATE_TYPE_STR | SHCOLSTATE_ONBYDEFAULT, LVCFMT_LEFT, 30},
|
||||
{L"Relevance", SHCOLSTATE_TYPE_STR, LVCFMT_LEFT, 0}
|
||||
};
|
||||
|
||||
// *** IShellFolder2 methods ***
|
||||
STDMETHODIMP CFindFolder::GetDefaultSearchGUID(GUID *pguid)
|
||||
{
|
||||
UNIMPLEMENTED;
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
STDMETHODIMP CFindFolder::EnumSearches(IEnumExtraSearch **ppenum)
|
||||
{
|
||||
UNIMPLEMENTED;
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
STDMETHODIMP CFindFolder::GetDefaultColumn(DWORD, ULONG *pSort, ULONG *pDisplay)
|
||||
{
|
||||
if (pSort)
|
||||
*pSort = 0;
|
||||
if (pDisplay)
|
||||
*pDisplay = 0;
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
STDMETHODIMP CFindFolder::GetDefaultColumnState(UINT iColumn, DWORD *pcsFlags)
|
||||
{
|
||||
if (!pcsFlags || iColumn >= _countof(g_ColumnDefs))
|
||||
return E_INVALIDARG;
|
||||
*pcsFlags = g_ColumnDefs[iColumn].dwDefaultState;
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
STDMETHODIMP CFindFolder::GetDetailsEx(PCUITEMID_CHILD pidl, const SHCOLUMNID *pscid, VARIANT *pv)
|
||||
{
|
||||
UNIMPLEMENTED;
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
STDMETHODIMP CFindFolder::GetDetailsOf(PCUITEMID_CHILD pidl, UINT iColumn, SHELLDETAILS *pDetails)
|
||||
{
|
||||
if (iColumn >= _countof(g_ColumnDefs))
|
||||
return E_FAIL;
|
||||
|
||||
pDetails->cxChar = g_ColumnDefs[iColumn].cxChar;
|
||||
pDetails->fmt = g_ColumnDefs[iColumn].fmt;
|
||||
|
||||
if (!pidl)
|
||||
return SHSetStrRet(&pDetails->str, g_ColumnDefs[iColumn].wzColumnName);
|
||||
|
||||
return GetDisplayNameOf(pidl, SHGDN_NORMAL, &pDetails->str);
|
||||
}
|
||||
|
||||
STDMETHODIMP CFindFolder::MapColumnToSCID(UINT iColumn, SHCOLUMNID *pscid)
|
||||
{
|
||||
UNIMPLEMENTED;
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
// *** IShellFolder methods ***
|
||||
STDMETHODIMP CFindFolder::ParseDisplayName(HWND hwndOwner, LPBC pbc, LPOLESTR lpszDisplayName, ULONG *pchEaten,
|
||||
PIDLIST_RELATIVE *ppidl, ULONG *pdwAttributes)
|
||||
{
|
||||
UNIMPLEMENTED;
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
STDMETHODIMP CFindFolder::EnumObjects(HWND hwndOwner, DWORD dwFlags, LPENUMIDLIST *ppEnumIDList)
|
||||
{
|
||||
*ppEnumIDList = NULL;
|
||||
return S_FALSE;
|
||||
}
|
||||
|
||||
STDMETHODIMP CFindFolder::BindToObject(PCUIDLIST_RELATIVE pidl, LPBC pbcReserved, REFIID riid, LPVOID *ppvOut)
|
||||
{
|
||||
UNIMPLEMENTED;
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
STDMETHODIMP CFindFolder::BindToStorage(PCUIDLIST_RELATIVE pidl, LPBC pbcReserved, REFIID riid, LPVOID *ppvOut)
|
||||
{
|
||||
UNIMPLEMENTED;
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
STDMETHODIMP CFindFolder::CompareIDs(LPARAM lParam, PCUIDLIST_RELATIVE pidl1, PCUIDLIST_RELATIVE pidl2)
|
||||
{
|
||||
UNIMPLEMENTED;
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
STDMETHODIMP CFindFolder::CreateViewObject(HWND hwndOwner, REFIID riid, LPVOID *ppvOut)
|
||||
{
|
||||
if (riid == IID_IShellView)
|
||||
{
|
||||
SFV_CREATE sfvparams = {};
|
||||
sfvparams.cbSize = sizeof(SFV_CREATE);
|
||||
sfvparams.pshf = this;
|
||||
HRESULT hr = SHCreateShellFolderView(&sfvparams, (IShellView **) ppvOut);
|
||||
return hr;
|
||||
}
|
||||
return E_NOINTERFACE;
|
||||
}
|
||||
|
||||
STDMETHODIMP CFindFolder::GetAttributesOf(UINT cidl, PCUITEMID_CHILD_ARRAY apidl, DWORD *rgfInOut)
|
||||
{
|
||||
*rgfInOut = SFGAO_NONENUMERATED;
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
STDMETHODIMP CFindFolder::GetUIObjectOf(HWND hwndOwner, UINT cidl, PCUITEMID_CHILD_ARRAY apidl, REFIID riid,
|
||||
UINT *prgfInOut, LPVOID *ppvOut)
|
||||
{
|
||||
return E_NOINTERFACE;
|
||||
}
|
||||
|
||||
STDMETHODIMP CFindFolder::GetDisplayNameOf(PCUITEMID_CHILD pidl, DWORD dwFlags, LPSTRRET pName)
|
||||
{
|
||||
return SHSetStrRet(pName, "search result");
|
||||
}
|
||||
|
||||
STDMETHODIMP CFindFolder::SetNameOf(HWND hwndOwner, PCUITEMID_CHILD pidl, LPCOLESTR lpName, DWORD dwFlags,
|
||||
PITEMID_CHILD *pPidlOut)
|
||||
{
|
||||
UNIMPLEMENTED;
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
//// *** IPersistFolder2 methods ***
|
||||
STDMETHODIMP CFindFolder::GetCurFolder(LPITEMIDLIST *pidl)
|
||||
{
|
||||
*pidl = ILClone(m_pidl);
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
// *** IPersistFolder methods ***
|
||||
STDMETHODIMP CFindFolder::Initialize(LPCITEMIDLIST pidl)
|
||||
{
|
||||
m_pidl = ILClone(pidl);
|
||||
if (!m_pidl)
|
||||
return E_OUTOFMEMORY;
|
||||
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
// *** IPersist methods ***
|
||||
STDMETHODIMP CFindFolder::GetClassID(CLSID *pClassId)
|
||||
{
|
||||
if (pClassId == NULL)
|
||||
return E_INVALIDARG;
|
||||
memcpy(pClassId, &CLSID_FindFolder, sizeof(CLSID));
|
||||
return S_OK;
|
||||
}
|
83
dll/win32/browseui/shellfind/CFindFolder.h
Normal file
83
dll/win32/browseui/shellfind/CFindFolder.h
Normal file
|
@ -0,0 +1,83 @@
|
|||
#pragma once
|
||||
|
||||
#include "shellfind.h"
|
||||
|
||||
#define SWM_ADD_ITEM (WM_USER + 0)
|
||||
#define SWM_UPDATE_STATUS (WM_USER + 1)
|
||||
|
||||
class CFindFolder :
|
||||
public CComCoClass<CFindFolder, &CLSID_FindFolder>,
|
||||
public CComObjectRootEx<CComMultiThreadModelNoCS>,
|
||||
public IShellFolder2,
|
||||
public IPersistFolder2
|
||||
{
|
||||
// *** IShellFolder2 methods ***
|
||||
STDMETHODIMP GetDefaultSearchGUID(GUID *pguid);
|
||||
|
||||
STDMETHODIMP EnumSearches(IEnumExtraSearch **ppenum);
|
||||
|
||||
STDMETHODIMP GetDefaultColumn(DWORD dwRes, ULONG *pSort, ULONG *pDisplay);
|
||||
|
||||
STDMETHODIMP GetDefaultColumnState(UINT iColumn, DWORD *pcsFlags);
|
||||
|
||||
STDMETHODIMP GetDetailsEx(PCUITEMID_CHILD pidl, const SHCOLUMNID *pscid, VARIANT *pv);
|
||||
|
||||
STDMETHODIMP GetDetailsOf(PCUITEMID_CHILD pidl, UINT iColumn, SHELLDETAILS *pDetails);
|
||||
|
||||
STDMETHODIMP MapColumnToSCID(UINT iColumn, SHCOLUMNID *pscid);
|
||||
|
||||
|
||||
// *** IShellFolder methods ***
|
||||
STDMETHODIMP ParseDisplayName(HWND hwndOwner, LPBC pbc, LPOLESTR lpszDisplayName, ULONG *pchEaten,
|
||||
PIDLIST_RELATIVE *ppidl, ULONG *pdwAttributes);
|
||||
|
||||
STDMETHODIMP EnumObjects(HWND hwndOwner, DWORD dwFlags, LPENUMIDLIST *ppEnumIDList);
|
||||
|
||||
STDMETHODIMP BindToObject(PCUIDLIST_RELATIVE pidl, LPBC pbcReserved, REFIID riid, LPVOID *ppvOut);
|
||||
|
||||
STDMETHODIMP BindToStorage(PCUIDLIST_RELATIVE pidl, LPBC pbcReserved, REFIID riid, LPVOID *ppvOut);
|
||||
|
||||
STDMETHODIMP CompareIDs(LPARAM lParam, PCUIDLIST_RELATIVE pidl1, PCUIDLIST_RELATIVE pidl2);
|
||||
|
||||
STDMETHODIMP CreateViewObject(HWND hwndOwner, REFIID riid, LPVOID *ppvOut);
|
||||
|
||||
STDMETHODIMP GetAttributesOf(UINT cidl, PCUITEMID_CHILD_ARRAY apidl, DWORD *rgfInOut);
|
||||
|
||||
STDMETHODIMP GetUIObjectOf(HWND hwndOwner, UINT cidl, PCUITEMID_CHILD_ARRAY apidl, REFIID riid, UINT *prgfInOut,
|
||||
LPVOID *ppvOut);
|
||||
|
||||
STDMETHODIMP GetDisplayNameOf(PCUITEMID_CHILD pidl, DWORD dwFlags, LPSTRRET pName);
|
||||
|
||||
STDMETHODIMP SetNameOf(HWND hwndOwner, PCUITEMID_CHILD pidl, LPCOLESTR lpName, DWORD dwFlags,
|
||||
PITEMID_CHILD *pPidlOut);
|
||||
|
||||
private:
|
||||
LPITEMIDLIST m_pidl;
|
||||
|
||||
//// *** IPersistFolder2 methods ***
|
||||
STDMETHODIMP GetCurFolder(LPITEMIDLIST *pidl);
|
||||
|
||||
|
||||
// *** IPersistFolder methods ***
|
||||
STDMETHODIMP Initialize(LPCITEMIDLIST pidl);
|
||||
|
||||
|
||||
// *** IPersist methods ***
|
||||
STDMETHODIMP GetClassID(CLSID *pClassId);
|
||||
|
||||
public:
|
||||
DECLARE_REGISTRY_RESOURCEID(IDR_FINDFOLDER)
|
||||
|
||||
DECLARE_NOT_AGGREGATABLE(CFindFolder)
|
||||
|
||||
DECLARE_PROTECT_FINAL_CONSTRUCT()
|
||||
|
||||
BEGIN_COM_MAP(CFindFolder)
|
||||
COM_INTERFACE_ENTRY_IID(IID_IShellFolder2, IShellFolder2)
|
||||
COM_INTERFACE_ENTRY_IID(IID_IShellFolder, IShellFolder)
|
||||
COM_INTERFACE_ENTRY_IID(IID_IPersistFolder2, IPersistFolder2)
|
||||
COM_INTERFACE_ENTRY_IID(IID_IPersistFolder, IPersistFolder)
|
||||
COM_INTERFACE_ENTRY_IID(IID_IPersist, IPersist)
|
||||
END_COM_MAP()
|
||||
};
|
||||
|
|
@ -10,6 +10,7 @@ include_directories(${REACTOS_SOURCE_DIR}/sdk/lib/atl)
|
|||
|
||||
list(APPEND SOURCE
|
||||
CSearchBar.cpp
|
||||
CFindFolder.cpp
|
||||
shellfind.h)
|
||||
|
||||
add_library(shellfind ${SOURCE})
|
||||
|
|
|
@ -72,6 +72,7 @@ DEFINE_GUID(CLSID_SH_SearchBand, 0x21569614, 0xB795, 0x46B1, 0x85, 0xF
|
|||
DEFINE_GUID(CLSID_FileSearchBand, 0xC4EE31F3, 0x4768, 0x11D2, 0xBE, 0x5C, 0x00, 0xA0, 0xC9, 0xA8, 0x3D, 0xA1);
|
||||
DEFINE_GUID(CLSID_IE_SearchBand, 0x30D02401, 0x6A81, 0x11D0, 0x82, 0x74, 0x00, 0xC0, 0x4F, 0xD5, 0xAE, 0x38);
|
||||
DEFINE_GUID(CLSID_ChannelsBand, 0xEFA24E63, 0xB078, 0x11D0, 0x89, 0xE4, 0x00, 0xC0, 0x4F, 0xC9, 0xE2, 0x6E);
|
||||
DEFINE_GUID(CLSID_FindFolder, 0xE17D4FC0, 0x5564, 0x11D1, 0x83, 0xF2, 0x00, 0xA0, 0xC9, 0x0D, 0xC8, 0x49);
|
||||
// missing ResearchBand
|
||||
|
||||
DEFINE_GUID(IID_IBandNavigate, 0x3697C30B, 0xCD88, 0x11D0, 0x8A, 0x3E, 0x00, 0xC0, 0x4F, 0xC9, 0xE2, 0x6E);
|
||||
|
|
Loading…
Reference in a new issue