This commit was manufactured by cvs2svn to create branch 'captive'.
[reactos.git] / subsys / system / explorer / shell / shellbrowser.h
diff --git a/subsys/system/explorer/shell/shellbrowser.h b/subsys/system/explorer/shell/shellbrowser.h
new file mode 100644 (file)
index 0000000..8d33cf9
--- /dev/null
@@ -0,0 +1,134 @@
+/*
+ * Copyright 2003 Martin Fuchs
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
+
+ //
+ // Explorer clone
+ //
+ // shellbrowser.h
+ //
+ // Martin Fuchs, 23.07.2003
+ //
+
+#include "../utility/treedroptarget.h"
+#include "../utility/shellbrowserimpl.h"
+
+
+struct ShellBrowserChild : public ChildWindow, public IShellBrowserImpl
+{
+       typedef ChildWindow super;
+
+       ShellBrowserChild(HWND hwnd, const ShellChildWndInfo& info);
+       ~ShellBrowserChild();
+
+       static ShellBrowserChild* create(HWND hmdiclient, const FileChildWndInfo& info)
+       {
+#ifndef _NO_MDI
+               ChildWindow* child = ChildWindow::create(hmdiclient, info._pos.rcNormalPosition,
+                                                                                                       WINDOW_CREATOR_INFO(ShellBrowserChild,ShellChildWndInfo), CLASSNAME_CHILDWND, NULL, &info);
+#else
+               //TODO: SDI implementation
+#endif
+
+               ShowWindow(*child, info._pos.showCmd);
+
+               return static_cast<ShellBrowserChild*>(child);
+       }
+
+       //IOleWindow
+       STDMETHOD(GetWindow)(HWND* lphwnd)
+       {
+               *lphwnd = _hwnd;
+               return S_OK;
+       }
+
+       //IShellBrowser
+       STDMETHOD(QueryActiveShellView)(IShellView** ppshv)
+       {
+               _pShellView->AddRef();
+               *ppshv = _pShellView;
+               return S_OK;
+       }
+
+       STDMETHOD(GetControlWindow)(UINT id, HWND* lphwnd)
+       {
+               if (!lphwnd)
+                       return E_POINTER;
+
+               if (id == FCW_TREE) {
+                       *lphwnd = _left_hwnd;
+                       return S_OK;
+               }
+
+               HWND hwnd = (HWND)SendMessage(_hWndFrame, PM_GET_CONTROLWINDOW, id, 0);
+
+               if (hwnd) {
+                       *lphwnd = hwnd;
+                       return S_OK;
+               }
+
+               return E_NOTIMPL;
+       }
+
+       STDMETHOD(SendControlMsg)(UINT id, UINT uMsg, WPARAM wParam, LPARAM lParam, LRESULT* pret)
+       {
+               if (!pret)
+                       return E_POINTER;
+
+               HWND hstatusbar = (HWND)SendMessage(_hWndFrame, PM_GET_CONTROLWINDOW, id, 0);
+
+               if (hstatusbar) {
+                       *pret = ::SendMessage(hstatusbar, uMsg, wParam, lParam);
+                       return S_OK;
+               }
+
+               return E_NOTIMPL;
+       }
+
+       STDMETHOD(OnDefaultCommand)(IShellView* ppshv);
+
+protected:
+       Root _root;
+
+       WindowHandle _hWndFrame;
+       ShellChildWndInfo _create_info;
+
+       IShellView*     _pShellView;    // current hosted shellview
+       HIMAGELIST      _himlSmall;             // list
+//     HIMAGELIST      _himlLarge;             // shell image
+       TreeDropTarget* _pDropTarget;
+
+       HTREEITEM _last_sel;
+
+       LRESULT WndProc(UINT nmsg, WPARAM wparam, LPARAM lparam);
+       int     Notify(int id, NMHDR* pnmh);
+
+       LRESULT Init(LPCREATESTRUCT);
+       void    InitializeTree(/*const FileChildWndInfo& info*/);
+       void    InsertSubitems(HTREEITEM hParentItem, Entry* entry, IShellFolder* pParentFolder);
+       bool    InitDragDrop();
+
+       void    OnTreeGetDispInfo(int idCtrl, LPNMHDR pnmh);
+       void    OnTreeItemExpanding(int idCtrl, LPNMTREEVIEW pnmtv);
+       void    OnTreeItemRClick(int idCtrl, LPNMHDR pnmh);
+       void    OnTreeItemSelected(int idCtrl, LPNMTREEVIEW pnmtv);
+
+       void    UpdateFolderView(IShellFolder* folder);
+       void    Tree_DoItemMenu(HWND hwndTreeView, HTREEITEM hItem, LPPOINT pptScreen);
+       bool    expand_folder(ShellDirectory* entry);
+};