]> git.saurik.com Git - wxWidgets.git/blob - include/wx/ownerdrw.h
Applied #15226 with modifications: wxRichTextCtrl: Implement setting properties with...
[wxWidgets.git] / include / wx / ownerdrw.h
1 ///////////////////////////////////////////////////////////////////////////////
2 // Name: wx/ownerdrw.h
3 // Purpose: interface for owner-drawn GUI elements
4 // Author: Vadim Zeitlin
5 // Modified by: Marcin Malich
6 // Created: 11.11.97
7 // Copyright: (c) 1998 Vadim Zeitlin <zeitlin@dptmaths.ens-cachan.fr>
8 // Licence: wxWindows licence
9 ///////////////////////////////////////////////////////////////////////////////
10
11 #ifndef _WX_OWNERDRW_H_BASE
12 #define _WX_OWNERDRW_H_BASE
13
14 #include "wx/defs.h"
15
16 #if wxUSE_OWNER_DRAWN
17
18 #include "wx/font.h"
19 #include "wx/colour.h"
20
21 class WXDLLIMPEXP_FWD_CORE wxDC;
22
23 // ----------------------------------------------------------------------------
24 // wxOwnerDrawn - a mix-in base class, derive from it to implement owner-drawn
25 // behaviour
26 //
27 // wxOwnerDrawn supports drawing of an item with non standard font, color and
28 // also supports 3 bitmaps: either a checked/unchecked bitmap for a checkable
29 // element or one unchangeable bitmap otherwise.
30 // ----------------------------------------------------------------------------
31
32 class WXDLLIMPEXP_CORE wxOwnerDrawnBase
33 {
34 public:
35 wxOwnerDrawnBase()
36 {
37 m_ownerDrawn = false;
38 m_margin = ms_defaultMargin;
39 }
40
41 virtual ~wxOwnerDrawnBase() {}
42
43 void SetFont(const wxFont& font)
44 { m_font = font; m_ownerDrawn = true; }
45
46 wxFont& GetFont() const
47 { return (wxFont&) m_font; }
48
49
50 void SetTextColour(const wxColour& colText)
51 { m_colText = colText; m_ownerDrawn = true; }
52
53 wxColour& GetTextColour() const
54 { return (wxColour&) m_colText; }
55
56 void SetBackgroundColour(const wxColour& colBack)
57 { m_colBack = colBack; m_ownerDrawn = true; }
58
59 wxColour& GetBackgroundColour() const
60 { return (wxColour&) m_colBack ; }
61
62
63 void SetMarginWidth(int width)
64 { m_margin = width; }
65
66 int GetMarginWidth() const
67 { return m_margin; }
68
69 static int GetDefaultMarginWidth()
70 { return ms_defaultMargin; }
71
72
73 // get item name (with mnemonics if exist)
74 virtual wxString GetName() const = 0;
75
76
77 // this function might seem strange, but if it returns false it means that
78 // no non-standard attribute are set, so there is no need for this control
79 // to be owner-drawn. Moreover, you can force owner-drawn to false if you
80 // want to change, say, the color for the item but only if it is owner-drawn
81 // (see wxMenuItem::wxMenuItem for example)
82 bool IsOwnerDrawn() const
83 { return m_ownerDrawn; }
84
85 // switch on/off owner-drawing the item
86 void SetOwnerDrawn(bool ownerDrawn = true)
87 { m_ownerDrawn = ownerDrawn; }
88
89
90 // constants used in OnDrawItem
91 // (they have the same values as corresponding Win32 constants)
92 enum wxODAction
93 {
94 wxODDrawAll = 0x0001, // redraw entire control
95 wxODSelectChanged = 0x0002, // selection changed (see Status.Select)
96 wxODFocusChanged = 0x0004 // keyboard focus changed (see Status.Focus)
97 };
98
99 enum wxODStatus
100 {
101 wxODSelected = 0x0001, // control is currently selected
102 wxODGrayed = 0x0002, // item is to be grayed
103 wxODDisabled = 0x0004, // item is to be drawn as disabled
104 wxODChecked = 0x0008, // item is to be checked
105 wxODHasFocus = 0x0010, // item has the keyboard focus
106 wxODDefault = 0x0020, // item is the default item
107 wxODHidePrefix= 0x0100 // hide keyboard cues (w2k and xp only)
108 };
109
110 // virtual functions to implement drawing (return true if processed)
111 virtual bool OnMeasureItem(size_t *width, size_t *height);
112 virtual bool OnDrawItem(wxDC& dc, const wxRect& rc, wxODAction act, wxODStatus stat) = 0;
113
114 protected:
115
116 // get the font and colour to use, whether it is set or not
117 virtual void GetFontToUse(wxFont& font) const;
118 virtual void GetColourToUse(wxODStatus stat, wxColour& colText, wxColour& colBack) const;
119
120 private:
121 bool m_ownerDrawn; // true if something is non standard
122
123 wxFont m_font; // font to use for drawing
124 wxColour m_colText, // color ----"---"---"----
125 m_colBack; // background color
126
127 int m_margin; // space occupied by bitmap to the left of the item
128
129 static int ms_defaultMargin;
130 };
131
132 // ----------------------------------------------------------------------------
133 // include the platform-specific class declaration
134 // ----------------------------------------------------------------------------
135
136 #if defined(__WXMSW__)
137 #include "wx/msw/ownerdrw.h"
138 #elif defined(__WXPM__)
139 #include "wx/os2/ownerdrw.h"
140 #endif
141
142 #endif // wxUSE_OWNER_DRAWN
143
144 #endif // _WX_OWNERDRW_H_BASE