update for HEAD-2003091401
[reactos.git] / subsys / system / explorer / Seashell / SeaShellExt / Include / UIFlatBar.h
diff --git a/subsys/system/explorer/Seashell/SeaShellExt/Include/UIFlatBar.h b/subsys/system/explorer/Seashell/SeaShellExt/Include/UIFlatBar.h
new file mode 100644 (file)
index 0000000..6b8654d
--- /dev/null
@@ -0,0 +1,195 @@
+////////////////////////////////////////////////////////////////
+// Copyright 1998 Paul DiLascia
+// If this code works, it was written by Paul DiLascia.
+// If not, I don't know who wrote it.
+//
+#ifndef __FLATBAR_H
+#define __FLATBAR_H
+
+#ifndef TB_SETEXTENDEDSTYLE
+#error FlatBar.h requires a newer version of the SDK than you have!
+#error Please update your SDK files.
+#endif
+
+#ifndef countof
+#define countof(x)     (sizeof(x)/sizeof(x[0]))
+#endif
+#ifndef _tsizeof
+#define _tsizeof(s) sizeof(s)/sizeof(TCHAR)
+#endif
+
+#include "UIFixTB.h"
+
+// fwd ref
+struct DROPDOWNBUTTON;
+
+#define CFlatToolBarBase CFixMFCToolBar
+
+//////////////////
+// CFlatToolbar is a drop-in replacement for CToolBar that supports
+// flat-style buttons and gripper handles. Use instead of CToolBar in your
+// CMainFrame. CFlatTooBar's don'tK actually have to have the flat style,
+// but they do by default. If you don't want the flat look, you can call
+// ModifyStyle(TBSTYLE_FLAT, 0);
+//
+// CFlatToolBar overcomes various MFC drawing bugs that cause it not to work
+// with flat-style buttons. CFlatToolBar Can also used inside a coolbar
+// (unlike CToolBar).
+//
+// CFlatToolBar has other good stuff too, like an easy way to handle drop-down
+// buttons--See MBTest for example how to use.
+//
+class CTRL_EXT_CLASS CFlatToolBar : public CFlatToolBarBase {
+public:
+       CFlatToolBar();
+       virtual ~CFlatToolBar();
+
+       static BOOL bTRACE;                                             // to see TRACE diagnostics
+
+       // set these before creation:
+       BOOL m_bDrawDisabledButtonsInColor;     // draw disabled buttons in color
+       BOOL m_bInCoolBar;                                              // set if flatbar is inside coolbar
+
+       // You must call one of these to get the flat look; if not, you must
+       // set TBSTYLE_FLAT yourself.
+       BOOL LoadToolBar(LPCTSTR lpszResourceName);
+       BOOL LoadToolBar(UINT nIDResource)
+               { return LoadToolBar(MAKEINTRESOURCE(nIDResource)); }
+
+       // call to add drop-down buttons
+       BOOL AddDropDownButton(UINT nIDButton, UINT nIDMenu, BOOL bArrow);
+
+       // Use these to get/set the flat style. By default, LoadToolBar calls
+       // SetFlatStyle(TRUE); if you create some other way, you must call it
+       // yourself.
+       BOOL SetFlatStyle(BOOL bFlat) {
+               return ModifyStyle(bFlat ? 0 : TBSTYLE_FLAT, bFlat ? TBSTYLE_FLAT : 0);
+       }
+       BOOL GetFlatStyle() {
+               return (GetStyle() & TBSTYLE_FLAT)!=0;
+       }
+
+       // silly function to fake out compiler with const-ness
+       LRESULT SendMessageC(UINT m, WPARAM wp=0, LPARAM lp=0) const
+               { return ((CFixMFCToolBar*)this)->SendMessage(m, wp, lp); }
+
+       // Wrappers that are not in MFC but should be;
+       // I copied these from CToolBarCtrl
+       BOOL EnableButton(int nID, BOOL bEnable)
+               { return SendMessage(TB_ENABLEBUTTON, nID, MAKELPARAM(bEnable, 0)); }
+       BOOL CheckButton(int nID, BOOL bCheck)
+               { return SendMessage(TB_CHECKBUTTON, nID, MAKELPARAM(bCheck, 0)); }
+       BOOL PressButton(int nID, BOOL bPress)
+               { return SendMessage(TB_PRESSBUTTON, nID, MAKELPARAM(bPress, 0)); }
+       BOOL HideButton(int nID, BOOL bHide)
+               { return SendMessage(TB_HIDEBUTTON, nID, MAKELPARAM(bHide, 0)); }
+       BOOL Indeterminate(int nID, BOOL bIndeterminate)
+               { return SendMessage(TB_INDETERMINATE, nID, MAKELPARAM(bIndeterminate, 0)); }
+       BOOL IsButtonEnabled(int nID) const
+               { return SendMessageC(TB_ISBUTTONENABLED, nID); }
+       BOOL IsButtonChecked(int nID) const
+               { return SendMessageC(TB_ISBUTTONCHECKED, nID); }
+       BOOL IsButtonPressed(int nID) const
+               { return SendMessageC(TB_ISBUTTONPRESSED, nID); }
+       BOOL IsButtonHidden(int nID) const
+               { return SendMessageC(TB_ISBUTTONHIDDEN, nID); }
+       BOOL IsButtonIndeterminate(int nID) const
+               { return SendMessageC(TB_ISBUTTONINDETERMINATE, nID); }
+       BOOL SetState(int nID, UINT nState)
+               { return SendMessage(TB_SETSTATE, nID, MAKELPARAM(nState, 0)); }
+       int GetState(int nID) const
+               { return SendMessageC(TB_GETSTATE, nID); }
+       BOOL AddButtons(int nNumButtons, LPTBBUTTON lpButtons)
+               { return SendMessage(TB_ADDBUTTONS, nNumButtons, (LPARAM)lpButtons); }
+       BOOL InsertButton(int nIndex, LPTBBUTTON lpButton)
+               { return SendMessage(TB_INSERTBUTTON, nIndex, (LPARAM)lpButton); }
+       BOOL DeleteButton(int nIndex)
+               { return SendMessage(TB_DELETEBUTTON, nIndex); }
+       int GetButtonCount() const
+               { return SendMessageC(TB_BUTTONCOUNT); }
+       UINT CommandToIndex(UINT nID) const
+               { return SendMessageC(TB_COMMANDTOINDEX, nID); }
+       void Customize()
+               { SendMessage(TB_CUSTOMIZE, 0, 0L); }
+       int AddStrings(LPCTSTR lpszStrings)
+               { return SendMessage(TB_ADDSTRING, 0, (LPARAM)lpszStrings); }
+       void SetButtonStructSize(int nSize)
+               { SendMessage(TB_BUTTONSTRUCTSIZE, nSize); }
+       BOOL SetButtonSize(CSize sz)
+               { return SendMessage(TB_SETBUTTONSIZE, 0, MAKELPARAM(sz.cx, sz.cy)); }
+       BOOL SetBitmapSize(CSize sz)
+               { return SendMessage(TB_SETBITMAPSIZE, 0, MAKELPARAM(sz.cx, sz.cy)); }
+       void AutoSize()
+               { SendMessage(TB_AUTOSIZE); }
+       CToolTipCtrl* GetToolTips() const
+               { return (CToolTipCtrl*)CWnd::FromHandle((HWND)SendMessageC(TB_GETTOOLTIPS)); }
+       void SetToolTips(CToolTipCtrl* pTip)
+               { SendMessage(TB_SETTOOLTIPS, (WPARAM)pTip->m_hWnd); }
+// NO!!!--this is not the same as the MFC owner
+//     void SetOwner(CWnd* pWnd)
+//             { SendMessage(TB_SETPARENT, (WPARAM)pWnd->m_hWnd); }
+       void SetRows(int nRows, BOOL bLarger, LPRECT lpRect)
+               { SendMessage(TB_SETROWS, MAKELPARAM(nRows, bLarger), (LPARAM)lpRect); }
+       int GetRows() const
+               { return (int) SendMessageC(TB_GETROWS); }
+       BOOL SetCmdID(int nIndex, UINT nID)
+               { return SendMessage(TB_SETCMDID, nIndex, nID); }
+       UINT GetBitmapFlags() const
+               { return (UINT) SendMessageC(TB_GETBITMAPFLAGS); }
+
+       // Wrappers for some of the newer messages--not complete
+       BOOL SetIndent(int indent)
+               { return SendMessage(TB_SETINDENT, indent); }
+       HIMAGELIST GetImageList() const
+               { return (HIMAGELIST)SendMessageC(TB_GETIMAGELIST); }
+       HIMAGELIST SetImageList(HIMAGELIST hImgList)
+               { return (HIMAGELIST)SendMessage(TB_SETIMAGELIST, 0, (LPARAM)hImgList); }
+       int GetBitmap(UINT nIdButton) const
+               { return SendMessageC(TB_GETBITMAP, nIdButton); }
+       DWORD SetExtendedStyle(DWORD dwStyle)
+               { return SendMessage(TB_SETEXTENDEDSTYLE, 0, dwStyle); }
+       BOOL GetRect(UINT nIdButton, RECT& rc) const
+               { return SendMessageC(TB_GETRECT, nIdButton, (LPARAM)&rc); }
+       DWORD GetToolbarStyle() const
+               { return SendMessageC(TB_GETSTYLE); }
+       void SetToolbarStyle(DWORD dwStyle)
+               { SendMessage(TB_SETSTYLE, 0, dwStyle); }
+       int HitTest(CPoint p) const
+               { return SendMessageC(TB_HITTEST, 0, (LPARAM)&p); }
+       int  GetHotItem() const
+               { if (GetSafeHwnd()) return SendMessageC(TB_GETHOTITEM); return 0; }
+       void SetHotItem(int iHot)
+               { if (GetSafeHwnd()) SendMessage(TB_SETHOTITEM, iHot); }
+       BOOL MapAccelerator(TCHAR ch, UINT& nID) const
+               { return SendMessageC(TB_MAPACCELERATOR, (WPARAM)ch, (LPARAM)&nID); }
+       CSize GetPadding() const
+               { return SendMessageC(TB_GETPADDING); }
+       CSize SetPadding(CSize sz) 
+               { return SendMessage(TB_SETPADDING, 0, MAKELPARAM(sz.cx,sz.cy)); }
+
+protected:
+       CRect                            m_rcOldPos;                            // used when toolbar is moved
+       DROPDOWNBUTTON* m_pDropDownButtons;             // list of dropdown button/menu pairs
+       BOOL                             m_bNoEntry;                            // implementation hack
+
+       // override to do your own weird drop-down buttons
+       virtual void OnDropDownButton(const NMTOOLBAR& nmtb, UINT nID, CRect rc);
+       DROPDOWNBUTTON* FindDropDownButton(UINT nID);
+
+       // helpers
+       virtual void InvalidateOldPos(const CRect& rcInvalid);
+
+       afx_msg int  OnCreate(LPCREATESTRUCT lpcs);
+       afx_msg void OnTbnDropDown(NMHDR* pNMHDR, LRESULT* pRes);
+       afx_msg void OnWindowPosChanging(LPWINDOWPOS lpWndPos);
+       afx_msg void OnWindowPosChanged(LPWINDOWPOS lpWndPos);
+       afx_msg void OnNcCalcSize(BOOL bCalc, NCCALCSIZE_PARAMS*        pncp );
+       afx_msg BOOL OnEraseBkgnd(CDC* pDC);
+       afx_msg BOOL OnNcCreate(LPCREATESTRUCT lpcs);
+       afx_msg void OnPaint();
+
+       DECLARE_MESSAGE_MAP()
+       DECLARE_DYNAMIC(CFlatToolBar)
+};
+
+#endif