1 /////////////////////////////////////////////////////////////////////////////
2 // Name: wx/clrpicker.h
3 // Purpose: wxColourPickerCtrl base header
4 // Author: Francesco Montorsi (based on Vadim Zeitlin's code)
7 // Copyright: (c) Vadim Zeitlin, Francesco Montorsi
9 // Licence: wxWindows Licence
10 /////////////////////////////////////////////////////////////////////////////
12 #ifndef _WX_CLRPICKER_H_BASE_
13 #define _WX_CLRPICKER_H_BASE_
18 #if wxUSE_COLOURPICKERCTRL
20 #include "wx/pickerbase.h"
23 class WXDLLIMPEXP_CORE wxColourPickerEvent
;
25 extern WXDLLEXPORT_DATA(const wxChar
) wxColourPickerWidgetNameStr
[];
26 extern WXDLLEXPORT_DATA(const wxChar
) wxColourPickerCtrlNameStr
[];
29 // ----------------------------------------------------------------------------
30 // wxColourPickerWidgetBase: a generic abstract interface which must be
31 // implemented by controls used by wxColourPickerCtrl
32 // ----------------------------------------------------------------------------
34 class WXDLLIMPEXP_CORE wxColourPickerWidgetBase
37 wxColourPickerWidgetBase() { m_colour
= *wxBLACK
; }
38 virtual ~wxColourPickerWidgetBase() {}
40 wxColour
GetColour() const
42 virtual void SetColour(const wxColour
&col
)
43 { m_colour
= col
; UpdateColour(); }
44 virtual void SetColour(const wxString
&col
)
45 { m_colour
.Set(col
); UpdateColour(); }
49 virtual void UpdateColour() = 0;
51 // the current colour (may be invalid if none)
56 // Styles which must be supported by all controls implementing wxColourPickerWidgetBase
57 // NB: these styles must be defined to carefully-chosen values to
58 // avoid conflicts with wxButton's styles
60 // show the colour in HTML form (#AABBCC) as colour button label
61 // (instead of no label at all)
62 // NOTE: this style is supported just by wxColourButtonGeneric and
63 // thus is not exposed in wxColourPickerCtrl
64 #define wxCLRP_SHOW_LABEL 0x0008
66 // map platform-dependent controls which implement the wxColourPickerWidgetBase
67 // under the name "wxColourPickerWidget".
68 // NOTE: wxColourPickerCtrl allocates a wxColourPickerWidget and relies on the
69 // fact that all classes being mapped as wxColourPickerWidget have the
70 // same prototype for their contructor (and also explains why we use
71 // define instead of a typedef)
72 #if defined(__WXGTK24__) // since GTK > 2.4, there is GtkColorButton
73 #include "wx/gtk/clrpicker.h"
74 #define wxColourPickerWidget wxColourButton
76 #include "wx/generic/clrpickerg.h"
77 #define wxColourPickerWidget wxGenericColourButton
81 // ----------------------------------------------------------------------------
82 // wxColourPickerCtrl: platform-independent class which embeds a
83 // platform-dependent wxColourPickerWidget and, if wxCLRP_USE_TEXTCTRL style is
84 // used, a textctrl next to it.
85 // ----------------------------------------------------------------------------
87 #define wxCLRP_USE_TEXTCTRL (wxPB_USE_TEXTCTRL)
88 #define wxCLRP_DEFAULT_STYLE 0
90 class WXDLLIMPEXP_CORE wxColourPickerCtrl
: public wxPickerBase
93 wxColourPickerCtrl() : m_bIgnoreNextTextCtrlUpdate(false) {}
94 virtual ~wxColourPickerCtrl() {}
97 wxColourPickerCtrl(wxWindow
*parent
, wxWindowID id
,
98 const wxColour
& col
= *wxBLACK
, const wxPoint
& pos
= wxDefaultPosition
,
99 const wxSize
& size
= wxDefaultSize
, long style
= wxCLRP_DEFAULT_STYLE
,
100 const wxValidator
& validator
= wxDefaultValidator
,
101 const wxString
& name
= wxColourPickerCtrlNameStr
)
102 : m_bIgnoreNextTextCtrlUpdate(false)
103 { Create(parent
, id
, col
, pos
, size
, style
, validator
, name
); }
105 bool Create(wxWindow
*parent
, wxWindowID id
,
106 const wxColour
& col
= *wxBLACK
,
107 const wxPoint
& pos
= wxDefaultPosition
,
108 const wxSize
& size
= wxDefaultSize
,
109 long style
= wxCLRP_DEFAULT_STYLE
,
110 const wxValidator
& validator
= wxDefaultValidator
,
111 const wxString
& name
= wxColourPickerCtrlNameStr
);
114 public: // public API
116 // get the colour chosen
117 wxColour
GetColour() const
118 { return ((wxColourPickerWidget
*)m_picker
)->GetColour(); }
120 // set currently displayed color
121 void SetColour(const wxColour
& col
);
123 // set colour using RGB(r,g,b) syntax or considering given text as a colour name;
124 // returns true if the given text was successfully recognized.
125 bool SetColour(const wxString
& text
);
128 public: // internal functions
130 // update the button colour to match the text control contents
131 void UpdatePickerFromTextCtrl();
133 // update the text control to match the button's colour
134 void UpdateTextCtrlFromPicker();
136 // event handler for our picker
137 void OnColourChange(wxColourPickerEvent
&);
140 virtual long GetPickerStyle(long style
) const
141 { return (style
& wxCLRP_SHOW_LABEL
); }
143 // true if the next UpdateTextCtrl() call is to ignore
144 bool m_bIgnoreNextTextCtrlUpdate
;
147 DECLARE_DYNAMIC_CLASS(wxColourPickerCtrl
)
151 // ----------------------------------------------------------------------------
152 // wxColourPickerEvent: used by wxColourPickerCtrl only
153 // ----------------------------------------------------------------------------
155 BEGIN_DECLARE_EVENT_TYPES()
156 DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_CORE
, wxEVT_COMMAND_COLOURPICKER_CHANGED
, 1102)
157 END_DECLARE_EVENT_TYPES()
159 class WXDLLIMPEXP_CORE wxColourPickerEvent
: public wxCommandEvent
162 wxColourPickerEvent() {}
163 wxColourPickerEvent(wxObject
*generator
, int id
, const wxColour
&col
)
164 : wxCommandEvent(wxEVT_COMMAND_COLOURPICKER_CHANGED
, id
),
167 SetEventObject(generator
);
170 wxColour
GetColour() const { return m_colour
; }
171 void SetColour(const wxColour
&c
) { m_colour
= c
; }
174 // default copy ctor, assignment operator and dtor are ok
175 virtual wxEvent
*Clone() const { return new wxColourPickerEvent(*this); }
180 DECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxColourPickerEvent
)
183 // ----------------------------------------------------------------------------
184 // event types and macros
185 // ----------------------------------------------------------------------------
187 typedef void (wxEvtHandler::*wxColourPickerEventFunction
)(wxColourPickerEvent
&);
189 #define wxColourPickerEventHandler(func) \
190 (wxObjectEventFunction)(wxEventFunction)wxStaticCastEvent(wxColourPickerEventFunction, &func)
192 #define EVT_COLOURPICKER_CHANGED(id, fn) \
193 wx__DECLARE_EVT1(wxEVT_COMMAND_COLOURPICKER_CHANGED, id, wxColourPickerEventHandler(fn))
195 #ifdef _WX_DEFINE_DATE_EVENTS_
196 DEFINE_EVENT_TYPE(wxEVT_COMMAND_COLOURPICKER_CHANGED
)
198 IMPLEMENT_DYNAMIC_CLASS(wxColourPickerEvent
, wxCommandEvent
)
203 #endif // wxUSE_COLOURPICKERCTRL
205 #endif // _WX_CLRPICKER_H_BASE_