]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/ownerdrw.h
switching modal loop implementation, fixes #11921
[wxWidgets.git] / include / wx / ownerdrw.h
index 0e5a8f312f00f31e39b57e09bdb7dad4082355e9..7fa15578a6da238a15609fcb8d8d9d219bcc1dbb 100644 (file)
@@ -2,23 +2,24 @@
 // Name:        ownerdrw.h
 // Purpose:     interface for owner-drawn GUI elements
 // Author:      Vadim Zeitlin
-// Modified by:
+// Modified by: Marcin Malich
 // Created:     11.11.97
 // RCS-ID:      $Id$
 // Copyright:   (c) 1998 Vadim Zeitlin <zeitlin@dptmaths.ens-cachan.fr>
 // Licence:     wxWindows licence
 ///////////////////////////////////////////////////////////////////////////////
 
-#ifndef   _OWNERDRW_H
-#define   _OWNERDRW_H
+#ifndef _WX_OWNERDRW_H_BASE
+#define _WX_OWNERDRW_H_BASE
 
 #include "wx/defs.h"
 
 #if wxUSE_OWNER_DRAWN
 
-#include "wx/bitmap.h"
-#include "wx/colour.h"
 #include "wx/font.h"
+#include "wx/colour.h"
+
+class WXDLLIMPEXP_FWD_CORE wxDC;
 
 // ----------------------------------------------------------------------------
 // wxOwnerDrawn - a mix-in base class, derive from it to implement owner-drawn
 // element or one unchangeable bitmap otherwise.
 // ----------------------------------------------------------------------------
 
-class WXDLLEXPORT wxOwnerDrawn
+class WXDLLIMPEXP_CORE wxOwnerDrawnBase
 {
 public:
-  // ctor & dtor
-  wxOwnerDrawn(const wxString& str = wxEmptyString,
-               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; }
-
-  wxFont& GetFont() const { return (wxFont &)m_font; }
-
-  void SetTextColour(const wxColour& colText)
-      { m_colText = colText; m_bOwnerDrawn = true; }
-
-  wxColour& GetTextColour() const { return (wxColour&) m_colText; }
-
-  void SetBackgroundColour(const wxColour& colBack)
-      { m_colBack = colBack; m_bOwnerDrawn = true; }
-
-  wxColour& GetBackgroundColour() const
-      { return (wxColour&) m_colBack ; }
-
-  void SetBitmaps(const wxBitmap& bmpChecked,
-                  const wxBitmap& bmpUnchecked = wxNullBitmap)
-      { m_bmpChecked = bmpChecked;
-        m_bmpUnchecked = bmpUnchecked;
-        m_bOwnerDrawn = true; }
-
-  void SetBitmap(const wxBitmap& bmpChecked)
-      { m_bmpChecked = bmpChecked;
-        m_bOwnerDrawn = true; }
-
-  void SetDisabledBitmap( const wxBitmap& bmpDisabled )
-      { m_bmpDisabled = bmpDisabled;
-        m_bOwnerDrawn = true; }
-
-  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
-  // the last item (and default width for the first one).
-  //
-  // NB: default is too small for bitmaps, but ok for checkmarks.
-  void SetMarginWidth(int nWidth)
-  {
-      ms_nLastMarginWidth = m_nMarginWidth = (size_t) nWidth;
-      if ( ((size_t) nWidth) != ms_nDefaultMarginWidth )
-          m_bOwnerDrawn = true;
-  }
-
-  int GetMarginWidth() const { return (int) m_nMarginWidth; }
-  static int GetDefaultMarginWidth() { return (int) ms_nDefaultMarginWidth; }
-
-  // accessors
-  void SetName(const wxString& strName)  { m_strName = strName; }
-  const wxString& GetName() const { return m_strName;    }
-  void SetCheckable(bool checkable) { m_bCheckable = checkable; }
-  bool IsCheckable() const { return m_bCheckable; }
-
-  // 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; }
+    wxOwnerDrawnBase()
+    {
+        m_ownerDrawn = false;
+        m_margin = ms_defaultMargin;
+    }
+
+    virtual ~wxOwnerDrawnBase() {}
+
+    void SetFont(const wxFont& font)
+        { m_font = font; m_ownerDrawn = true; }
+
+    wxFont& GetFont() const
+        { return (wxFont&) m_font; }
+
+
+    void SetTextColour(const wxColour& colText)
+        { m_colText = colText; m_ownerDrawn = true; }
+
+    wxColour& GetTextColour() const
+        { return (wxColour&) m_colText; }
+
+    void SetBackgroundColour(const wxColour& colBack)
+        { m_colBack = colBack; m_ownerDrawn = true; }
+
+    wxColour& GetBackgroundColour() const
+        { return (wxColour&) m_colBack ; }
+
+
+    void SetMarginWidth(int width)
+        { m_margin = width; }
+
+    int GetMarginWidth() const
+        { return m_margin; }
+
+    static int GetDefaultMarginWidth()
+        { return ms_defaultMargin; }
+
+
+    // get item name (with mnemonics if exist)
+    virtual wxString GetName() const = 0;
+
 
   // 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
   // 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;   }
-
-  // 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
-  // (they have the same values as corresponding Win32 constants)
-  enum wxODAction
-  {
-    wxODDrawAll       = 0x0001,   // redraw entire control
-    wxODSelectChanged = 0x0002,   // selection changed (see Status.Select)
-    wxODFocusChanged  = 0x0004    // keyboard focus changed (see Status.Focus)
-  };
-
-  enum wxODStatus
-  {
-    wxODSelected  = 0x0001,         // control is currently selected
-    wxODGrayed    = 0x0002,         // item is to be grayed
-    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
-    wxODHidePrefix= 0x0100          // hide keyboard cues (w2k and xp only)
-  };
-
-  // 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);
+    bool IsOwnerDrawn() const
+        { return m_ownerDrawn; }
+
+    // switch on/off owner-drawing the item
+    void SetOwnerDrawn(bool ownerDrawn = true)
+        { m_ownerDrawn = ownerDrawn; }
+
+
+    // constants used in OnDrawItem
+    // (they have the same values as corresponding Win32 constants)
+    enum wxODAction
+    {
+        wxODDrawAll       = 0x0001,     // redraw entire control
+        wxODSelectChanged = 0x0002,     // selection changed (see Status.Select)
+        wxODFocusChanged  = 0x0004      // keyboard focus changed (see Status.Focus)
+    };
+
+    enum wxODStatus
+    {
+        wxODSelected  = 0x0001,         // control is currently selected
+        wxODGrayed    = 0x0002,         // item is to be grayed
+        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
+        wxODHidePrefix= 0x0100          // hide keyboard cues (w2k and xp only)
+    };
+
+    // virtual functions to implement drawing (return true if processed)
+    virtual bool OnMeasureItem(size_t *width, size_t *height);
+    virtual bool OnDrawItem(wxDC& dc, const wxRect& rc, wxODAction act, wxODStatus stat) = 0;
 
 protected:
-  // 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;
+    // get the font and colour to use, whether it is set or not
+    virtual void GetFontToUse(wxFont& font) const;
+    virtual void GetColourToUse(wxODStatus stat, wxColour& colText, wxColour& colBack) const;
 
+private:
+    bool        m_ownerDrawn;       // true if something is non standard
 
-  wxString  m_strName,      // label for a manu item
-            m_strAccel;     // the accel string ("Ctrl-F17") if any
+    wxFont      m_font;             // font to use for drawing
+    wxColour    m_colText,          // color ----"---"---"----
+                m_colBack;          // background color
 
-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
-
-  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_bmpDisabled;
-
-  size_t    m_nHeight,      // font height
-            m_nMinHeight,   // minimum height, as determined by user's system settings
-            m_nMarginWidth; // space occupied by bitmap to the left of the item
+    int         m_margin;           // space occupied by bitmap to the left of the item
+
+    static int  ms_defaultMargin;
 };
 
-#endif // wxUSE_OWNER_DRAWN
+// ----------------------------------------------------------------------------
+// include the platform-specific class declaration
+// ----------------------------------------------------------------------------
 
+#if defined(__WXMSW__)
+    #include "wx/msw/ownerdrw.h"
+#elif defined(__WXPM__)
+    #include "wx/os2/ownerdrw.h"
 #endif
-  // _OWNERDRW_H
+
+#endif // wxUSE_OWNER_DRAWN
+
+#endif // _WX_OWNERDRW_H_BASE