]>
git.saurik.com Git - wxWidgets.git/blob - include/wx/ownerdrw.h
   1 /////////////////////////////////////////////////////////////////////////////// 
   3 // Purpose:     interface for owner-drawn GUI elements 
   4 // Author:      Vadim Zeitlin 
   8 // Copyright:   (c) 1998 Vadim Zeitlin <zeitlin@dptmaths.ens-cachan.fr> 
   9 // Licence:     wxWindows licence 
  10 /////////////////////////////////////////////////////////////////////////////// 
  17 #if defined(__GNUG__) && !defined(__APPLE__) 
  18     #pragma interface "ownerdrw.h" 
  21 #include "wx/bitmap.h" 
  22 #include "wx/colour.h" 
  25 // ---------------------------------------------------------------------------- 
  26 // wxOwnerDrawn - a mix-in base class, derive from it to implement owner-drawn 
  29 // wxOwnerDrawn supports drawing of an item with non standard font, color and 
  30 // also supports 3 bitmaps: either a checked/unchecked bitmap for a checkable 
  31 // element or one unchangeable bitmap otherwise. 
  32 // ---------------------------------------------------------------------------- 
  34 class WXDLLEXPORT wxOwnerDrawn
 
  38   wxOwnerDrawn(const wxString
& str 
= wxEmptyString
, 
  39                bool bCheckable 
= FALSE
, 
  40                bool bMenuItem 
= FALSE
); // FIXME kludge for colors 
  41   virtual ~wxOwnerDrawn() { } 
  44   void SetFont(const wxFont
& font
) 
  45       { m_font 
= font
; m_bOwnerDrawn 
= TRUE
; } 
  47   wxFont
& GetFont() const { return (wxFont 
&)m_font
; } 
  49   void SetTextColour(const wxColour
& colText
) 
  50       { m_colText 
= colText
; m_bOwnerDrawn 
= TRUE
; } 
  52   wxColour
& GetTextColour() const { return (wxColour
&) m_colText
; } 
  54   void SetBackgroundColour(const wxColour
& colBack
) 
  55       { m_colBack 
= colBack
; m_bOwnerDrawn 
= TRUE
; } 
  57   wxColour
& GetBackgroundColour() const 
  58       { return (wxColour
&) m_colBack 
; } 
  60   void SetBitmaps(const wxBitmap
& bmpChecked
, 
  61                   const wxBitmap
& bmpUnchecked 
= wxNullBitmap
) 
  62       { m_bmpChecked 
= bmpChecked
; 
  63         m_bmpUnchecked 
= bmpUnchecked
; 
  64         m_bOwnerDrawn 
= TRUE
; } 
  66   void SetBitmap(const wxBitmap
& bmpChecked
) 
  67       { m_bmpChecked 
= bmpChecked
; 
  68         m_bOwnerDrawn 
= TRUE
; } 
  70   const wxBitmap
& GetBitmap(bool bChecked 
= TRUE
) const 
  71       { return (bChecked 
? m_bmpChecked 
: m_bmpUnchecked
); } 
  73   // the height of the menu checkmark (or bitmap) is determined by the font 
  74   // for the current item, but the width should be always the same (for the 
  75   // items to be aligned), so by default it's taken to be the same as for 
  76   // the last item (and default width for the first one). 
  78   // NB: default is too small for bitmaps, but ok for checkmarks. 
  79   void SetMarginWidth(int nWidth
) 
  81       ms_nLastMarginWidth 
= m_nMarginWidth 
= (size_t) nWidth
; 
  82       if ( ((size_t) nWidth
) != ms_nDefaultMarginWidth 
) 
  86   int GetMarginWidth() const { return (int) m_nMarginWidth
; } 
  87   static int GetDefaultMarginWidth() { return (int) ms_nDefaultMarginWidth
; } 
  90   void SetName(const wxString
& strName
)  { m_strName 
= strName
; } 
  91   const wxString
& GetName() const { return m_strName
;    } 
  92   void SetCheckable(bool checkable
) { m_bCheckable 
= checkable
; } 
  93   bool IsCheckable() const { return m_bCheckable
; } 
  95   // this is for menu items only: accel string is drawn right aligned after the 
  96   // menu item if not empty 
  97   void SetAccelString(const wxString
& strAccel
) { m_strAccel 
= strAccel
; } 
  99   // this function might seem strange, but if it returns FALSE it means that 
 100   // no non-standard attribute are set, so there is no need for this control 
 101   // to be owner-drawn. Moreover, you can force owner-drawn to FALSE if you 
 102   // want to change, say, the color for the item but only if it is owner-drawn 
 103   // (see wxMenuItem::wxMenuItem for example) 
 104   bool IsOwnerDrawn() const { return m_bOwnerDrawn
;   } 
 105   void ResetOwnerDrawn() { m_bOwnerDrawn 
= FALSE
;  } 
 108   // constants used in OnDrawItem 
 109   // (they have the same values as corresponding Win32 constants) 
 112     wxODDrawAll       
= 0x0001,   // redraw entire control 
 113     wxODSelectChanged 
= 0x0002,   // selection changed (see Status.Select) 
 114     wxODFocusChanged  
= 0x0004    // keyboard focus changed (see Status.Focus) 
 119     wxODSelected  
= 0x0001,         // control is currently selected 
 120     wxODGrayed    
= 0x0002,         // item is to be grayed 
 121     wxODDisabled  
= 0x0004,         // item is to be drawn as disabled 
 122     wxODChecked   
= 0x0008,         // item is to be checked 
 123     wxODHasFocus  
= 0x0010,         // item has the keyboard focus 
 124     wxODDefault   
= 0x0020          // item is the default item 
 127   // virtual functions to implement drawing (return TRUE if processed) 
 128   virtual bool OnMeasureItem(size_t *pwidth
, size_t *pheight
); 
 129   virtual bool OnDrawItem(wxDC
& dc
, const wxRect
& rc
, wxODAction act
, wxODStatus stat
); 
 132   wxString  m_strName
,      // label for a manu item 
 133             m_strAccel
;     // the accel string ("Ctrl-F17") if any 
 136   static size_t ms_nDefaultMarginWidth
; // menu check mark width 
 137   static size_t ms_nLastMarginWidth
;    // handy for aligning all items 
 139   bool      m_bCheckable
,   // used only for menu or check listbox items 
 140             m_bOwnerDrawn
;  // true if something is non standard 
 142   wxFont    m_font
;         // font to use for drawing 
 143   wxColour  m_colText
,      // color ----"---"---"---- 
 144             m_colBack
;      // background color 
 145   wxBitmap  m_bmpChecked
,   // bitmap to put near the item 
 146             m_bmpUnchecked
; // (checked is used also for 'uncheckable' items) 
 148   size_t    m_nHeight
,      // font height 
 149             m_nMinHeight
,   // minimum height, as determined by user's system settings 
 150             m_nMarginWidth
; // space occupied by bitmap to the left of the item 
 153 #endif // wxUSE_OWNER_DRAWN