[SHELLFIND] Add search functionality
[reactos.git] / dll / win32 / browseui / shellfind / CFindFolder.h
index 189e6d9..1768d47 100644 (file)
@@ -6,10 +6,13 @@
 #define SWM_UPDATE_STATUS (WM_USER + 1)
 
 class CFindFolder :
+        public CWindowImpl<CFindFolder>,
         public CComCoClass<CFindFolder, &CLSID_FindFolder>,
         public CComObjectRootEx<CComMultiThreadModelNoCS>,
         public IShellFolder2,
-        public IPersistFolder2
+        public IPersistFolder2,
+        public IShellFolderViewCB,
+        public IContextMenuCB
 {
     // *** IShellFolder2 methods ***
     STDMETHODIMP GetDefaultSearchGUID(GUID *pguid);
@@ -46,14 +49,24 @@ class CFindFolder :
     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 GetDisplayNameOf(PCUITEMID_CHILD pidl, DWORD dwFlags, LPSTRRET pName);
     STDMETHODIMP SetNameOf(HWND hwndOwner, PCUITEMID_CHILD pidl, LPCOLESTR lpName, DWORD dwFlags,
                            PITEMID_CHILD *pPidlOut);
 
+    //// *** IShellFolderViewCB methods ***
+    STDMETHODIMP MessageSFVCB(UINT uMsg, WPARAM wParam, LPARAM lParam);
+
+    //// *** IContextMenuCB method ***
+    STDMETHODIMP CallBack(IShellFolder *psf, HWND hwndOwner, IDataObject *pdtobj, UINT uMsg, WPARAM wParam,
+                          LPARAM lParam);
+
 private:
     LPITEMIDLIST m_pidl;
     CComPtr<IShellFolder2> m_pisfInner;
+    CComPtr<IShellFolderView> m_shellFolderView;
+    CComPtr<IShellBrowser> m_shellBrowser;
+    HANDLE m_hStopEvent;
 
     //// *** IPersistFolder2 methods ***
     STDMETHODIMP GetCurFolder(LPITEMIDLIST *pidl);
@@ -66,19 +79,36 @@ private:
     // *** IPersist methods ***
     STDMETHODIMP GetClassID(CLSID *pClassId);
 
+    // *** Message handlers ***
+    LRESULT StartSearch(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled);
+
+    LRESULT AddResult(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled);
+
+    LRESULT UpdateStatus(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled);
+
 public:
+    CFindFolder();
+
     DECLARE_REGISTRY_RESOURCEID(IDR_FINDFOLDER)
 
     DECLARE_NOT_AGGREGATABLE(CFindFolder)
 
     DECLARE_PROTECT_FINAL_CONSTRUCT()
 
+    BEGIN_MSG_MAP(CFindFolder)
+        MESSAGE_HANDLER(WM_SEARCH_START, StartSearch)
+        MESSAGE_HANDLER(WM_SEARCH_ADD_RESULT, AddResult)
+        MESSAGE_HANDLER(WM_SEARCH_UPDATE_STATUS, UpdateStatus)
+    END_MSG_MAP()
+
     BEGIN_COM_MAP(CFindFolder)
         COM_INTERFACE_ENTRY_IID(IID_IShellFolder2, IShellFolder2)
         COM_INTERFACE_ENTRY_IID(IID_IShellFolder, IShellFolder)
+        COM_INTERFACE_ENTRY_IID(IID_IShellFolderViewCB, IShellFolderViewCB)
         COM_INTERFACE_ENTRY_IID(IID_IPersistFolder2, IPersistFolder2)
         COM_INTERFACE_ENTRY_IID(IID_IPersistFolder, IPersistFolder)
         COM_INTERFACE_ENTRY_IID(IID_IPersist, IPersist)
+        COM_INTERFACE_ENTRY_IID(IID_IContextMenuCB, IContextMenuCB)
     END_COM_MAP()
 };