home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / wxos2240.zip / wxWindows-2.4.0 / include / wx / ownerdrw.h < prev    next >
C/C++ Source or Header  |  2002-09-02  |  6KB  |  157 lines

  1. ///////////////////////////////////////////////////////////////////////////////
  2. // Name:        ownerdrw.h
  3. // Purpose:     interface for owner-drawn GUI elements
  4. // Author:      Vadim Zeitlin
  5. // Modified by:
  6. // Created:     11.11.97
  7. // RCS-ID:      $Id: ownerdrw.h,v 1.17 2002/09/02 19:15:40 GD Exp $
  8. // Copyright:   (c) 1998 Vadim Zeitlin <zeitlin@dptmaths.ens-cachan.fr>
  9. // Licence:     wxWindows license
  10. ///////////////////////////////////////////////////////////////////////////////
  11.  
  12. #ifndef   _OWNERDRW_H
  13. #define   _OWNERDRW_H
  14.  
  15. #if wxUSE_OWNER_DRAWN
  16.  
  17. #if defined(__GNUG__) && !defined(__APPLE__)
  18.     #pragma interface "ownerdrw.h"
  19. #endif
  20.  
  21. #include "wx/bitmap.h"
  22. #include "wx/colour.h"
  23. #include "wx/font.h"
  24.  
  25. // ----------------------------------------------------------------------------
  26. // wxOwnerDrawn - a mix-in base class, derive from it to implement owner-drawn
  27. //                behaviour
  28. //
  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. // ----------------------------------------------------------------------------
  33.  
  34. class WXDLLEXPORT wxOwnerDrawn
  35. {
  36. public:
  37.   // ctor & dtor
  38.   wxOwnerDrawn(const wxString& str = wxEmptyString,
  39.                bool bCheckable = FALSE,
  40.                bool bMenuItem = FALSE); // FIXME kludge for colors
  41.   virtual ~wxOwnerDrawn() { }
  42.  
  43.   // fix appearance
  44.   void SetFont(const wxFont& font)
  45.       { m_font = font; m_bOwnerDrawn = TRUE; }
  46.  
  47.   wxFont& GetFont() const { return (wxFont &)m_font; }
  48.  
  49.   void SetTextColour(const wxColour& colText)
  50.       { m_colText = colText; m_bOwnerDrawn = TRUE; }
  51.  
  52.   wxColour& GetTextColour() const { return (wxColour&) m_colText; }
  53.  
  54.   void SetBackgroundColour(const wxColour& colBack)
  55.       { m_colBack = colBack; m_bOwnerDrawn = TRUE; }
  56.  
  57.   wxColour& GetBackgroundColour() const
  58.       { return (wxColour&) m_colBack ; }
  59.  
  60.   void SetBitmaps(const wxBitmap& bmpChecked,
  61.                   const wxBitmap& bmpUnchecked = wxNullBitmap)
  62.       { m_bmpChecked = bmpChecked;
  63.         m_bmpUnchecked = bmpUnchecked;
  64.         m_bOwnerDrawn = TRUE; }
  65.  
  66.   void SetBitmap(const wxBitmap& bmpChecked)
  67.       { m_bmpChecked = bmpChecked;
  68.         m_bOwnerDrawn = TRUE; }
  69.  
  70.   const wxBitmap& GetBitmap(bool bChecked = TRUE) const
  71.       { return (bChecked ? m_bmpChecked : m_bmpUnchecked); }
  72.  
  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).
  77.   //
  78.   // NB: default is too small for bitmaps, but ok for checkmarks.
  79.   void SetMarginWidth(int nWidth)
  80.   {
  81.       ms_nLastMarginWidth = m_nMarginWidth = (size_t) nWidth;
  82.       if ( ((size_t) nWidth) != ms_nDefaultMarginWidth )
  83.           m_bOwnerDrawn = TRUE;
  84.   }
  85.  
  86.   int GetMarginWidth() const { return (int) m_nMarginWidth; }
  87.   static int GetDefaultMarginWidth() { return (int) ms_nDefaultMarginWidth; }
  88.  
  89.   // accessors
  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; }
  94.  
  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; }
  98.  
  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;  }
  106.  
  107. public:
  108.   // constants used in OnDrawItem
  109.   // (they have the same values as corresponding Win32 constants)
  110.   enum wxODAction
  111.   {
  112.     wxODDrawAll       = 0x0001,   // redraw entire control
  113.     wxODSelectChanged = 0x0002,   // selection changed (see Status.Select)
  114.     wxODFocusChanged  = 0x0004    // keyboard focus changed (see Status.Focus)
  115.   };
  116.  
  117.   enum wxODStatus
  118.   {
  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
  125.   };
  126.  
  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);
  130.  
  131. protected:
  132.   wxString  m_strName,      // label for a manu item
  133.             m_strAccel;     // the accel string ("Ctrl-F17") if any
  134.  
  135. private:
  136.   static size_t ms_nDefaultMarginWidth; // menu check mark width
  137.   static size_t ms_nLastMarginWidth;    // handy for aligning all items
  138.  
  139.   bool      m_bCheckable,   // used only for menu or check listbox items
  140.             m_bOwnerDrawn;  // true if something is non standard
  141.  
  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)
  147.  
  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
  151. };
  152.  
  153. #endif // wxUSE_OWNER_DRAWN
  154.  
  155. #endif
  156.   // _OWNERDRW_H
  157.