2 * PROJECT: ReactOS Search Shell Extension
3 * LICENSE: GPL-2.0-or-later (https://spdx.org/licenses/GPL-2.0-or-later)
5 * COPYRIGHT: Copyright 2019 Brock Mammen
10 #include "shellfind.h"
13 public CComCoClass
<CSearchBar
, &CLSID_FileSearchBand
>,
14 public CComObjectRootEx
<CComMultiThreadModelNoCS
>,
16 public IObjectWithSite
,
18 public IPersistStream
,
19 public IOleCommandTarget
,
20 public IServiceProvider
,
22 public IWinEventHandler
,
23 public INamespaceProxy
,
25 public CDialogImpl
<CSearchBar
>
29 // *** BaseBarSite information ***
30 CComPtr
<IUnknown
> pSite
;
31 CComPtr
<IAddressEditBox
> fAddressEditBox
;
34 HRESULT
GetSearchResultsFolder(IShellBrowser
**ppShellBrowser
, HWND
*pHwnd
, IShellFolder
**ppShellFolder
);
35 BOOL
GetAddressEditBoxPath(WCHAR (&szPath
)[MAX_PATH
]);
36 void SetSearchInProgress(BOOL bInProgress
);
37 HRESULT
ExecuteCommand(CComPtr
<IContextMenu
>& menu
, UINT nCmd
);
39 // *** ATL event handlers ***
40 LRESULT
OnInitDialog(UINT uMsg
, WPARAM wParam
, LPARAM lParam
, BOOL
&bHandled
);
41 LRESULT
OnSetFocus(UINT uMsg
, WPARAM wParam
, LPARAM lParam
, BOOL
&bHandled
);
42 LRESULT
OnSearchButtonClicked(WORD wNotifyCode
, WORD wID
, HWND hWndCtl
, BOOL
&bHandled
);
43 LRESULT
OnStopButtonClicked(WORD wNotifyCode
, WORD wID
, HWND hWndCtl
, BOOL
&bHandled
);
44 LRESULT
OnSize(UINT uMsg
, WPARAM wParam
, LPARAM lParam
, BOOL
&bHandled
);
48 virtual ~CSearchBar();
50 // *** IOleWindow methods ***
51 virtual HRESULT STDMETHODCALLTYPE
GetWindow(HWND
*lphwnd
);
52 virtual HRESULT STDMETHODCALLTYPE
ContextSensitiveHelp(BOOL fEnterMode
);
54 // *** IDockingWindow methods ***
55 virtual HRESULT STDMETHODCALLTYPE
CloseDW(DWORD dwReserved
);
56 virtual HRESULT STDMETHODCALLTYPE
ResizeBorderDW(const RECT
*prcBorder
, IUnknown
*punkToolbarSite
, BOOL fReserved
);
57 virtual HRESULT STDMETHODCALLTYPE
ShowDW(BOOL fShow
);
59 // *** IDeskBand methods ***
60 virtual HRESULT STDMETHODCALLTYPE
GetBandInfo(DWORD dwBandID
, DWORD dwViewMode
, DESKBANDINFO
*pdbi
);
62 // *** IObjectWithSite methods ***
63 virtual HRESULT STDMETHODCALLTYPE
SetSite(IUnknown
*pUnkSite
);
64 virtual HRESULT STDMETHODCALLTYPE
GetSite(REFIID riid
, void **ppvSite
);
66 // *** IOleCommandTarget methods ***
67 virtual HRESULT STDMETHODCALLTYPE
QueryStatus(const GUID
*pguidCmdGroup
, ULONG cCmds
, OLECMD prgCmds
[], OLECMDTEXT
*pCmdText
);
68 virtual HRESULT STDMETHODCALLTYPE
Exec(const GUID
*pguidCmdGroup
, DWORD nCmdID
, DWORD nCmdexecopt
, VARIANT
*pvaIn
, VARIANT
*pvaOut
);
70 // *** IServiceProvider methods ***
71 virtual HRESULT STDMETHODCALLTYPE
QueryService(REFGUID guidService
, REFIID riid
, void **ppvObject
);
73 // *** IInputObject methods ***
74 virtual HRESULT STDMETHODCALLTYPE
UIActivateIO(BOOL fActivate
, LPMSG lpMsg
);
75 virtual HRESULT STDMETHODCALLTYPE
HasFocusIO();
76 virtual HRESULT STDMETHODCALLTYPE
TranslateAcceleratorIO(LPMSG lpMsg
);
78 // *** IPersist methods ***
79 virtual HRESULT STDMETHODCALLTYPE
GetClassID(CLSID
*pClassID
);
81 // *** IPersistStream methods ***
82 virtual HRESULT STDMETHODCALLTYPE
IsDirty();
83 virtual HRESULT STDMETHODCALLTYPE
Load(IStream
*pStm
);
84 virtual HRESULT STDMETHODCALLTYPE
Save(IStream
*pStm
, BOOL fClearDirty
);
85 virtual HRESULT STDMETHODCALLTYPE
GetSizeMax(ULARGE_INTEGER
*pcbSize
);
87 // *** IWinEventHandler methods ***
88 virtual HRESULT STDMETHODCALLTYPE
OnWinEvent(HWND hWnd
, UINT uMsg
, WPARAM wParam
, LPARAM lParam
, LRESULT
*theResult
);
89 virtual HRESULT STDMETHODCALLTYPE
IsWindowOwner(HWND hWnd
);
91 // *** IBandNavigate methods ***
92 virtual HRESULT STDMETHODCALLTYPE
Select(long paramC
);
94 // *** INamespaceProxy ***
95 virtual HRESULT STDMETHODCALLTYPE
GetNavigateTarget(long paramC
, long param10
, long param14
);
96 virtual HRESULT STDMETHODCALLTYPE
Invoke(long paramC
);
97 virtual HRESULT STDMETHODCALLTYPE
OnSelectionChanged(long paramC
);
98 virtual HRESULT STDMETHODCALLTYPE
RefreshFlags(long paramC
, long param10
, long param14
);
99 virtual HRESULT STDMETHODCALLTYPE
CacheItem(long paramC
);
101 // *** IDispatch methods ***
102 virtual HRESULT STDMETHODCALLTYPE
GetTypeInfoCount(UINT
*pctinfo
);
103 virtual HRESULT STDMETHODCALLTYPE
GetTypeInfo(UINT iTInfo
, LCID lcid
, ITypeInfo
**ppTInfo
);
104 virtual HRESULT STDMETHODCALLTYPE
GetIDsOfNames(REFIID riid
, LPOLESTR
*rgszNames
, UINT cNames
, LCID lcid
, DISPID
*rgDispId
);
105 virtual HRESULT STDMETHODCALLTYPE
Invoke(DISPID dispIdMember
, REFIID riid
, LCID lcid
, WORD wFlags
, DISPPARAMS
*pDispParams
, VARIANT
*pVarResult
, EXCEPINFO
*pExcepInfo
, UINT
*puArgErr
);
107 enum { IDD
= IDD_SEARCH_DLG
};
109 DECLARE_REGISTRY_RESOURCEID(IDR_EXPLORERBAND
)
110 DECLARE_NOT_AGGREGATABLE(CSearchBar
)
112 DECLARE_PROTECT_FINAL_CONSTRUCT()
114 BEGIN_COM_MAP(CSearchBar
)
115 COM_INTERFACE_ENTRY_IID(IID_IDispatch
, IDispatch
)
116 COM_INTERFACE_ENTRY_IID(DIID_DSearchCommandEvents
, IDispatch
)
117 COM_INTERFACE_ENTRY_IID(IID_IWinEventHandler
, IWinEventHandler
)
118 COM_INTERFACE_ENTRY_IID(IID_IBandNavigate
, IBandNavigate
)
119 COM_INTERFACE_ENTRY_IID(IID_INamespaceProxy
, INamespaceProxy
)
120 COM_INTERFACE_ENTRY2_IID(IID_IOleWindow
, IOleWindow
, IDeskBand
)
121 COM_INTERFACE_ENTRY2_IID(IID_IDockingWindow
, IDockingWindow
, IDeskBand
)
122 COM_INTERFACE_ENTRY_IID(IID_IDeskBand
, IDeskBand
)
123 COM_INTERFACE_ENTRY_IID(IID_IObjectWithSite
, IObjectWithSite
)
124 COM_INTERFACE_ENTRY_IID(IID_IOleCommandTarget
, IOleCommandTarget
)
125 COM_INTERFACE_ENTRY_IID(IID_IServiceProvider
, IServiceProvider
)
126 COM_INTERFACE_ENTRY_IID(IID_IInputObject
, IInputObject
)
127 COM_INTERFACE_ENTRY2_IID(IID_IPersist
, IPersist
, IPersistStream
)
128 COM_INTERFACE_ENTRY_IID(IID_IPersistStream
, IPersistStream
)
131 BEGIN_MSG_MAP(CSearchBar
)
132 MESSAGE_HANDLER(WM_INITDIALOG
, OnInitDialog
)
133 MESSAGE_HANDLER(WM_SETFOCUS
, OnSetFocus
)
134 MESSAGE_HANDLER(WM_SIZE
, OnSize
)
135 COMMAND_HANDLER(IDC_SEARCH_BUTTON
, BN_CLICKED
, OnSearchButtonClicked
)
136 COMMAND_HANDLER(IDC_SEARCH_STOP_BUTTON
, BN_CLICKED
, OnStopButtonClicked
)