]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/ownerdrw.h
implementing rollover and pressed image for bitmapbutton on osx_cocoa
[wxWidgets.git] / include / wx / ownerdrw.h
index 0ad31e7fec1446b0aeecb1a50a40631f282ab3eb..50e85b4a6451cffb295361d37507c7027d32664e 100644 (file)
@@ -6,17 +6,15 @@
 // Created:     11.11.97
 // RCS-ID:      $Id$
 // Copyright:   (c) 1998 Vadim Zeitlin <zeitlin@dptmaths.ens-cachan.fr>
-// Licence:     wxWindows license
+// Licence:     wxWindows licence
 ///////////////////////////////////////////////////////////////////////////////
 
 #ifndef   _OWNERDRW_H
 #define   _OWNERDRW_H
 
-#if wxUSE_OWNER_DRAWN
+#include "wx/defs.h"
 
-#ifdef    __GNUG__
-    #pragma interface "ownerdrw.h"
-#endif
+#if wxUSE_OWNER_DRAWN
 
 #include "wx/bitmap.h"
 #include "wx/colour.h"
 // element or one unchangeable bitmap otherwise.
 // ----------------------------------------------------------------------------
 
-class WXDLLEXPORT wxOwnerDrawn
+class WXDLLIMPEXP_CORE wxOwnerDrawn
 {
 public:
   // ctor & dtor
   wxOwnerDrawn(const wxString& str = wxEmptyString,
-               bool bCheckable = FALSE,
-               bool bMenuItem = FALSE); // FIXME kludge for colors
-  virtual ~wxOwnerDrawn() { }
+               bool bCheckable = false,
+               bool bMenuItem = false); // FIXME kludge for colors
+  virtual ~wxOwnerDrawn();
 
   // fix appearance
   void SetFont(const wxFont& font)
-      { m_font = font; m_bOwnerDrawn = TRUE; }
+      { m_font = font; m_bOwnerDrawn = true; }
 
   wxFont& GetFont() const { return (wxFont &)m_font; }
 
   void SetTextColour(const wxColour& colText)
-      { m_colText = colText; m_bOwnerDrawn = TRUE; }
+      { m_colText = colText; m_bOwnerDrawn = true; }
 
   wxColour& GetTextColour() const { return (wxColour&) m_colText; }
 
   void SetBackgroundColour(const wxColour& colBack)
-      { m_colBack = colBack; m_bOwnerDrawn = TRUE; }
+      { m_colBack = colBack; m_bOwnerDrawn = true; }
 
   wxColour& GetBackgroundColour() const
       { return (wxColour&) m_colBack ; }
@@ -61,15 +59,27 @@ public:
                   const wxBitmap& bmpUnchecked = wxNullBitmap)
       { m_bmpChecked = bmpChecked;
         m_bmpUnchecked = bmpUnchecked;
-        m_bOwnerDrawn = TRUE; }
+        m_bOwnerDrawn = true; }
 
-  void SetBitmap(const wxBitmap& bmpChecked);
-      { m_bmpChecked = bmpChecked;
-        m_bOwnerDrawn = TRUE; }
+  void SetBitmap(const wxBitmap& bmp, bool bChecked = true)
+  {
+      if ( bChecked )
+          m_bmpChecked = bmp;
+      else
+          m_bmpUnchecked = bmp;
+      m_bOwnerDrawn = true;
+  }
+
+  void SetDisabledBitmap( const wxBitmap& bmpDisabled )
+      { m_bmpDisabled = bmpDisabled;
+        m_bOwnerDrawn = true; }
 
-  const wxBitmap& GetBitmap(bool bChecked = TRUE) const
+  const wxBitmap& GetBitmap(bool bChecked = true) const
       { return (bChecked ? m_bmpChecked : m_bmpUnchecked); }
 
+  const wxBitmap& GetDisabledBitmap() const
+      { return m_bmpDisabled; }
+
   // the height of the menu checkmark (or bitmap) is determined by the font
   // for the current item, but the width should be always the same (for the
   // items to be aligned), so by default it's taken to be the same as for
@@ -80,7 +90,7 @@ public:
   {
       ms_nLastMarginWidth = m_nMarginWidth = (size_t) nWidth;
       if ( ((size_t) nWidth) != ms_nDefaultMarginWidth )
-          m_bOwnerDrawn = TRUE;
+          m_bOwnerDrawn = true;
   }
 
   int GetMarginWidth() const { return (int) m_nMarginWidth; }
@@ -92,13 +102,20 @@ public:
   void SetCheckable(bool checkable) { m_bCheckable = checkable; }
   bool IsCheckable() const { return m_bCheckable; }
 
-  // this function might seem strange, but if it returns FALSE it means that
+  // this is for menu items only: accel string is drawn right aligned after the
+  // menu item if not empty
+  void SetAccelString(const wxString& strAccel) { m_strAccel = strAccel; }
+
+  // this function might seem strange, but if it returns false it means that
   // no non-standard attribute are set, so there is no need for this control
-  // to be owner-drawn. Moreover, you can force owner-drawn to FALSE if you
+  // to be owner-drawn. Moreover, you can force owner-drawn to false if you
   // want to change, say, the color for the item but only if it is owner-drawn
   // (see wxMenuItem::wxMenuItem for example)
   bool IsOwnerDrawn() const { return m_bOwnerDrawn;   }
-  void ResetOwnerDrawn() { m_bOwnerDrawn = FALSE;  }
+
+  // switch on/off owner-drawing the item
+  void SetOwnerDrawn(bool ownerDrawn = true) { m_bOwnerDrawn = ownerDrawn; }
+  void ResetOwnerDrawn() { m_bOwnerDrawn = false;  }
 
 public:
   // constants used in OnDrawItem
@@ -117,28 +134,39 @@ public:
     wxODDisabled  = 0x0004,         // item is to be drawn as disabled
     wxODChecked   = 0x0008,         // item is to be checked
     wxODHasFocus  = 0x0010,         // item has the keyboard focus
-    wxODDefault   = 0x0020          // item is the default item
+    wxODDefault   = 0x0020,         // item is the default item
+    wxODHidePrefix= 0x0100          // hide keyboard cues (w2k and xp only)
   };
 
-  // virtual functions to implement drawing (return TRUE if processed)
+  // virtual functions to implement drawing (return true if processed)
   virtual bool OnMeasureItem(size_t *pwidth, size_t *pheight);
   virtual bool OnDrawItem(wxDC& dc, const wxRect& rc, wxODAction act, wxODStatus stat);
 
 protected:
-  wxString  m_strName;      // label for a manu item
+  // return true if this is a menu item
+  bool IsMenuItem() const;
+
+  // get the font to use, whether m_font is set or not
+  wxFont GetFontToUse() const;
+
+
+  wxString  m_strName,      // label for a manu item
+            m_strAccel;     // the accel string ("Ctrl-F17") if any
 
 private:
   static size_t ms_nDefaultMarginWidth; // menu check mark width
   static size_t ms_nLastMarginWidth;    // handy for aligning all items
 
   bool      m_bCheckable,   // used only for menu or check listbox items
-            m_bOwnerDrawn;  // true if something is non standard
+            m_bOwnerDrawn,  // true if something is non standard
+            m_isMenuItem;   // true if this is a menu item
 
   wxFont    m_font;         // font to use for drawing
   wxColour  m_colText,      // color ----"---"---"----
             m_colBack;      // background color
   wxBitmap  m_bmpChecked,   // bitmap to put near the item
-            m_bmpUnchecked; // (checked is used also for 'uncheckable' items)
+            m_bmpUnchecked, // (checked is used also for 'uncheckable' items)
+            m_bmpDisabled;
 
   size_t    m_nHeight,      // font height
             m_nMarginWidth; // space occupied by bitmap to the left of the item