ReactOS 0.4.16-dev-816-g135a9a9
CSearchBar.cpp File Reference
#include "CSearchBar.h"
#include <psdk/wingdi.h>
#include <commoncontrols.h>
#include <../browseui.h>
#include <shellapi.h>
#include <exdispid.h>
Include dependency graph for CSearchBar.cpp:

Go to the source code of this file.

Classes

struct  SPECIALFINDITEMID
 

Macros

#define UNIMPLEMENTED   DbgPrint("%s is UNIMPLEMENTED!\n", __FUNCTION__)
 
#define IDS_SEARCH_BROWSEITEM   10244 /* shell32 shresdef.h */
 

Enumerations

enum  { SPECIAL_BROWSE = 42 }
 

Functions

 WINE_DEFAULT_DEBUG_CHANNEL (shellfind)
 
static BOOL IsWindowChildOf (const HWND hNeedle, const HWND hRoot)
 
static UINT GetShellViewItemCount (IShellView *pSV)
 
static BYTE GetSpecial (PCIDLIST_ABSOLUTE pidl)
 
static HRESULT BindToObject (PCIDLIST_ABSOLUTE pidl, REFIID riid, void **ppv)
 
static HRESULT GetClassOfItem (PCIDLIST_ABSOLUTE pidl, CLSID *pCLSID)
 
void FreeList (LOCATIONITEM *pItems)
 
static LOCATIONITEMCreateLocationListItem (PCWSTR szPath)
 
template<class T >
static LOCATIONITEMBuildLocationList (T **rgszPaths, SIZE_T nCount)
 
static LOCATIONITEMGetDesktopLocations ()
 
static LOCATIONITEMGetLocalDisksLocations ()
 

Variables

static const SPECIALFINDITEMID g_pidlBrowseDir
 

Macro Definition Documentation

◆ IDS_SEARCH_BROWSEITEM

#define IDS_SEARCH_BROWSEITEM   10244 /* shell32 shresdef.h */

◆ UNIMPLEMENTED

#define UNIMPLEMENTED   DbgPrint("%s is UNIMPLEMENTED!\n", __FUNCTION__)

Definition at line 20 of file CSearchBar.cpp.

Enumeration Type Documentation

◆ anonymous enum

anonymous enum
Enumerator
SPECIAL_BROWSE 

Definition at line 58 of file CSearchBar.cpp.

58{ SPECIAL_BROWSE = 42 };
@ SPECIAL_BROWSE
Definition: CSearchBar.cpp:58

Function Documentation

◆ BindToObject()

static HRESULT BindToObject ( PCIDLIST_ABSOLUTE  pidl,
REFIID  riid,
void **  ppv 
)
static

Definition at line 77 of file CSearchBar.cpp.

78{
79 PCUITEMID_CHILD pidlChild;
81 HRESULT hr = SHBindToParent(pidl, IID_PPV_ARG(IShellFolder, &psf), &pidlChild);
82 return SUCCEEDED(hr) ? psf->BindToObject(pidlChild, NULL, riid, ppv) : hr;
83}
#define NULL
Definition: types.h:112
REFIID riid
Definition: atlbase.h:39
REFIID LPVOID * ppv
Definition: atlbase.h:39
#define SUCCEEDED(hr)
Definition: intsafe.h:50
HRESULT WINAPI SHBindToParent(LPCITEMIDLIST pidl, REFIID riid, LPVOID *ppv, LPCITEMIDLIST *ppidlLast)
Definition: pidl.c:1462
HRESULT hr
Definition: shlfolder.c:183
const ITEMID_CHILD UNALIGNED * PCUITEMID_CHILD
Definition: shtypes.idl:70
#define IID_PPV_ARG(Itype, ppType)

Referenced by CCommonFolder< TSelf, TItemId, TExtractIcon >::CompareIDs(), GetClassOfItem(), CCommonFolder< TSelf, TItemId, TExtractIcon >::GetDisplayNameOf(), Moniker_BindToObject(), CCommonFolder< TSelf, TItemId, TExtractIcon >::ParseDisplayName(), and test_Hlink_Navigate().

◆ BuildLocationList()

template<class T >
static LOCATIONITEM * BuildLocationList ( T **  rgszPaths,
SIZE_T  nCount 
)
static

Definition at line 114 of file CSearchBar.cpp.

115{
116 LOCATIONITEM *pStart = NULL, *pPrev = NULL;
117 for (SIZE_T i = 0; i < nCount; ++i)
118 {
119 LOCATIONITEM *pItem = CreateLocationListItem(rgszPaths[i]);
120 if (!pStart)
121 pStart = pItem;
122 else if (pPrev)
123 pPrev->pNext = pItem;
124 pPrev = pItem;
125 if (!pItem)
126 {
127 FreeList(pStart);
128 return NULL;
129 }
130 }
131 return pStart;
132}
static LOCATIONITEM * CreateLocationListItem(PCWSTR szPath)
Definition: CSearchBar.cpp:102
void FreeList(LOCATIONITEM *pItems)
Definition: CSearchBar.cpp:92
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
struct tagLOCATIONITEM * pNext
Definition: shellfind.h:36
ULONG_PTR SIZE_T
Definition: typedefs.h:80

Referenced by CSearchBar::GetAddressEditBoxLocations(), GetDesktopLocations(), and GetLocalDisksLocations().

◆ CreateLocationListItem()

static LOCATIONITEM * CreateLocationListItem ( PCWSTR  szPath)
static

Definition at line 102 of file CSearchBar.cpp.

103{
104 const SIZE_T cch = lstrlenW(szPath) + 1;
106 if (p)
107 {
108 p->pNext = NULL;
109 CopyMemory(p->szPath, szPath, cch * sizeof(*szPath));
110 }
111 return p;
112}
#define lstrlenW
Definition: compat.h:750
GLfloat GLfloat p
Definition: glext.h:8902
LPVOID WINAPI CoTaskMemAlloc(SIZE_T size)
Definition: ifs.c:426
LPCWSTR szPath
Definition: env.c:37
static DWORD DWORD void LPSTR DWORD cch
Definition: str.c:202
#define FIELD_OFFSET(t, f)
Definition: typedefs.h:255
#define CopyMemory
Definition: winbase.h:1735

Referenced by BuildLocationList().

◆ FreeList()

void FreeList ( LOCATIONITEM pItems)

Definition at line 92 of file CSearchBar.cpp.

93{
94 while (pItems)
95 {
96 LOCATIONITEM *pNext = pItems->pNext;
98 pItems = pNext;
99 }
100}
VOID WINAPI CoTaskMemFree(LPVOID ptr)
Definition: ifs.c:442
static int int const SCRIPT_CONTROL const SCRIPT_STATE SCRIPT_ITEM * pItems
Definition: usp10.c:62

Referenced by BuildLocationList(), CcPurgeCacheSection(), CcRosTrimCache(), NdisDprFreePacketNonInterlocked(), RtlAllocateHeap(), RtlpAllocateNonDedicated(), RtlpInsertFreeBlockHelper(), RtlpRemoveFreeBlock(), RtlpValidateHeap(), _SearchData::~_SearchData(), and ScopedFreeLocationItems::~ScopedFreeLocationItems().

◆ GetClassOfItem()

static HRESULT GetClassOfItem ( PCIDLIST_ABSOLUTE  pidl,
CLSID pCLSID 
)
static

Definition at line 85 of file CSearchBar.cpp.

86{
89 return SUCCEEDED(hr) ? IUnknown_GetClassID(psf, pCLSID) : hr;
90}
static HRESULT BindToObject(PCIDLIST_ABSOLUTE pidl, REFIID riid, void **ppv)
Definition: CSearchBar.cpp:77
HRESULT WINAPI IUnknown_GetClassID(IUnknown *lpUnknown, CLSID *clsid)
Definition: ordinal.c:1457

Referenced by CSearchBar::GetAddressEditBoxLocations(), and CSearchBar::Invoke().

◆ GetDesktopLocations()

static LOCATIONITEM * GetDesktopLocations ( )
static

Definition at line 134 of file CSearchBar.cpp.

135{
136 SIZE_T nCount = 0;
137 PCWSTR rgszLocations[2];
138 WCHAR szUser[MAX_PATH], szCommon[MAX_PATH];
139
140 rgszLocations[nCount] = szUser;
142 rgszLocations[nCount] = szCommon;
144 return BuildLocationList(rgszLocations, nCount);
145}
static LOCATIONITEM * BuildLocationList(T **rgszPaths, SIZE_T nCount)
Definition: CSearchBar.cpp:114
#define TRUE
Definition: types.h:120
#define MAX_PATH
Definition: compat.h:34
BOOL WINAPI SHGetSpecialFolderPathW(HWND hwndOwner, LPWSTR szPath, int nFolder, BOOL bCreate)
Definition: shellpath.c:3092
#define CSIDL_COMMON_DESKTOPDIRECTORY
Definition: shlobj.h:2197
#define CSIDL_DESKTOPDIRECTORY
Definition: shlobj.h:2188
const uint16_t * PCWSTR
Definition: typedefs.h:57
__wchar_t WCHAR
Definition: xmlstorage.h:180

Referenced by CSearchBar::GetAddressEditBoxLocations().

◆ GetLocalDisksLocations()

static LOCATIONITEM * GetLocalDisksLocations ( )
static

Definition at line 147 of file CSearchBar.cpp.

148{
149 PCWSTR rgszLocations[26];
150 WCHAR rgszDrives[_countof(rgszLocations)][4];
151 UINT nCount = 0;
152 for (UINT i = 0, fDrives = GetLogicalDrives(); i < _countof(rgszLocations); ++i)
153 {
154 if (fDrives & (1 << i))
155 {
156 rgszDrives[nCount][0] = 'A' + i;
157 rgszDrives[nCount][1] = ':';
158 rgszDrives[nCount][2] = '\\';
159 rgszDrives[nCount][3] = UNICODE_NULL;
160 UINT fType = GetDriveTypeW(rgszDrives[nCount]);
161 if (fType == DRIVE_FIXED || fType == DRIVE_RAMDISK)
162 {
163 rgszLocations[nCount] = rgszDrives[nCount];
164 nCount++;
165 }
166 }
167 }
168 return BuildLocationList(rgszLocations, nCount);
169}
UINT WINAPI GetDriveTypeW(IN LPCWSTR lpRootPathName)
Definition: disk.c:497
unsigned int UINT
Definition: ndis.h:50
#define UNICODE_NULL
#define _countof(array)
Definition: sndvol32.h:70
DWORD WINAPI GetLogicalDrives(void)
Definition: disk.c:110
#define DRIVE_RAMDISK
Definition: winbase.h:281
#define DRIVE_FIXED
Definition: winbase.h:278

Referenced by CSearchBar::GetAddressEditBoxLocations().

◆ GetShellViewItemCount()

static UINT GetShellViewItemCount ( IShellView pSV)
static

Definition at line 37 of file CSearchBar.cpp.

38{
39 int signedCount;
40 CComQIIDPtr<I_ID(IFolderView)> pFV(pSV);
41 if (pFV && SUCCEEDED(pFV->ItemCount(SVGIO_ALLVIEW, &signedCount)))
42 return signedCount;
43 UINT unsignedCount;
44 CComQIIDPtr<I_ID(IShellFolderView)> pSFV(pSV);
45 if (pSFV && SUCCEEDED(pSFV->GetObjectCount(&unsignedCount)))
46 return unsignedCount;
47 return 0;
48}
#define I_ID(Itype)
Definition: atlcomcli.h:215

Referenced by CSearchBar::TrySetFocus().

◆ GetSpecial()

static BYTE GetSpecial ( PCIDLIST_ABSOLUTE  pidl)
static

Definition at line 63 of file CSearchBar.cpp.

64{
65 if (pidl && pidl->mkid.cb == FIELD_OFFSET(SPECIALFINDITEMID, Terminator))
66 {
67 SPECIALFINDITEMID *pSpecial = (SPECIALFINDITEMID*)pidl;
68 if (pSpecial->Type == g_pidlBrowseDir.Type && pSpecial->Cls == g_pidlBrowseDir.Cls &&
69 ILIsEmpty(ILGetNext(pidl)))
70 {
71 return pSpecial->Id;
72 }
73 }
74 return 0;
75}
static const SPECIALFINDITEMID g_pidlBrowseDir
Definition: CSearchBar.cpp:60
LPITEMIDLIST WINAPI ILGetNext(LPCITEMIDLIST pidl)
Definition: pidl.c:970
static BOOL ILIsEmpty(_In_opt_ PCUIDLIST_RELATIVE pidl)
Definition: shlobj.h:2519
WORD cb
Definition: shtypes.idl:27
SHITEMID mkid
Definition: shtypes.idl:34

Referenced by CSearchBar::GetAddressEditBoxLocations(), CSearchBar::Invoke(), and CSearchBar::OnLocationEditChange().

◆ IsWindowChildOf()

static BOOL IsWindowChildOf ( const HWND  hNeedle,
const HWND  hRoot 
)
static

Definition at line 23 of file CSearchBar.cpp.

24{
25 if (hNeedle != hRoot)
26 {
27 for (HWND hParent = hNeedle; hParent;)
28 {
29 hParent = GetParent(hParent);
30 if (hParent == hRoot)
31 return TRUE;
32 }
33 }
34 return FALSE;
35}
#define FALSE
Definition: types.h:117
static HTREEITEM hRoot
Definition: treeview.c:383
HWND WINAPI GetParent(_In_ HWND)

Referenced by CSearchBar::TrySetFocus().

◆ WINE_DEFAULT_DEBUG_CHANNEL()

WINE_DEFAULT_DEBUG_CHANNEL ( shellfind  )

Variable Documentation

◆ g_pidlBrowseDir

const SPECIALFINDITEMID g_pidlBrowseDir
static
Initial value:
0, SPECIAL_BROWSE, CLSID_FindFolder, 0 }

Definition at line 60 of file CSearchBar.cpp.

Referenced by GetSpecial(), and CSearchBar::Invoke().