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_FWD_CORE wxColourPickerEvent
;
25 extern WXDLLIMPEXP_DATA_CORE(const char) wxColourPickerWidgetNameStr
[];
26 extern WXDLLIMPEXP_DATA_CORE(const char) wxColourPickerCtrlNameStr
[];
28 // show the colour in HTML form (#AABBCC) as colour button label
29 #define wxCLRBTN_SHOW_LABEL 100
32 #define wxCLRBTN_DEFAULT_STYLE (wxCLRBTN_SHOW_LABEL)
36 // ----------------------------------------------------------------------------
37 // wxColourPickerWidgetBase: a generic abstract interface which must be
38 // implemented by controls used by wxColourPickerCtrl
39 // ----------------------------------------------------------------------------
41 class WXDLLIMPEXP_CORE wxColourPickerWidgetBase
44 wxColourPickerWidgetBase() { m_colour
= *wxBLACK
; }
45 virtual ~wxColourPickerWidgetBase() {}
47 wxColour
GetColour() const
49 virtual void SetColour(const wxColour
&col
)
50 { m_colour
= col
; UpdateColour(); }
51 virtual void SetColour(const wxString
&col
)
52 { m_colour
.Set(col
); UpdateColour(); }
56 virtual void UpdateColour() = 0;
58 // the current colour (may be invalid if none)
63 // Styles which must be supported by all controls implementing wxColourPickerWidgetBase
64 // NB: these styles must be defined to carefully-chosen values to
65 // avoid conflicts with wxButton's styles
67 // show the colour in HTML form (#AABBCC) as colour button label
68 // (instead of no label at all)
69 // NOTE: this style is supported just by wxColourButtonGeneric and
70 // thus is not exposed in wxColourPickerCtrl
71 #define wxCLRP_SHOW_LABEL 0x0008
73 // map platform-dependent controls which implement the wxColourPickerWidgetBase
74 // under the name "wxColourPickerWidget".
75 // NOTE: wxColourPickerCtrl allocates a wxColourPickerWidget and relies on the
76 // fact that all classes being mapped as wxColourPickerWidget have the
77 // same prototype for their contructor (and also explains why we use
78 // define instead of a typedef)
79 // since GTK > 2.4, there is GtkColorButton
80 #if defined(__WXGTK20__) && !defined(__WXUNIVERSAL__)
81 #include "wx/gtk/clrpicker.h"
82 #define wxColourPickerWidget wxColourButton
84 #include "wx/generic/clrpickerg.h"
85 #define wxColourPickerWidget wxGenericColourButton
89 // ----------------------------------------------------------------------------
90 // wxColourPickerCtrl: platform-independent class which embeds a
91 // platform-dependent wxColourPickerWidget and, if wxCLRP_USE_TEXTCTRL style is
92 // used, a textctrl next to it.
93 // ----------------------------------------------------------------------------
95 #define wxCLRP_USE_TEXTCTRL (wxPB_USE_TEXTCTRL)
96 #define wxCLRP_DEFAULT_STYLE 0
98 class WXDLLIMPEXP_CORE wxColourPickerCtrl
: public wxPickerBase
101 wxColourPickerCtrl() : m_bIgnoreNextTextCtrlUpdate(false) {}
102 virtual ~wxColourPickerCtrl() {}
105 wxColourPickerCtrl(wxWindow
*parent
, wxWindowID id
,
106 const wxColour
& col
= *wxBLACK
, const wxPoint
& pos
= wxDefaultPosition
,
107 const wxSize
& size
= wxDefaultSize
, long style
= wxCLRP_DEFAULT_STYLE
,
108 const wxValidator
& validator
= wxDefaultValidator
,
109 const wxString
& name
= wxColourPickerCtrlNameStr
)
110 : m_bIgnoreNextTextCtrlUpdate(false)
111 { Create(parent
, id
, col
, pos
, size
, style
, validator
, name
); }
113 bool Create(wxWindow
*parent
, wxWindowID id
,
114 const wxColour
& col
= *wxBLACK
,
115 const wxPoint
& pos
= wxDefaultPosition
,
116 const wxSize
& size
= wxDefaultSize
,
117 long style
= wxCLRP_DEFAULT_STYLE
,
118 const wxValidator
& validator
= wxDefaultValidator
,
119 const wxString
& name
= wxColourPickerCtrlNameStr
);
122 public: // public API
124 // get the colour chosen
125 wxColour
GetColour() const
126 { return ((wxColourPickerWidget
*)m_picker
)->GetColour(); }
128 // set currently displayed color
129 void SetColour(const wxColour
& col
);
131 // set colour using RGB(r,g,b) syntax or considering given text as a colour name;
132 // returns true if the given text was successfully recognized.
133 bool SetColour(const wxString
& text
);
136 public: // internal functions
138 // update the button colour to match the text control contents
139 void UpdatePickerFromTextCtrl();
141 // update the text control to match the button's colour
142 void UpdateTextCtrlFromPicker();
144 // event handler for our picker
145 void OnColourChange(wxColourPickerEvent
&);
148 virtual long GetPickerStyle(long style
) const
149 { return (style
& wxCLRP_SHOW_LABEL
); }
151 // true if the next UpdateTextCtrl() call is to ignore
152 bool m_bIgnoreNextTextCtrlUpdate
;
155 DECLARE_DYNAMIC_CLASS(wxColourPickerCtrl
)
159 // ----------------------------------------------------------------------------
160 // wxColourPickerEvent: used by wxColourPickerCtrl only
161 // ----------------------------------------------------------------------------
163 extern WXDLLIMPEXP_CORE
const wxEventType wxEVT_COMMAND_COLOURPICKER_CHANGED
;
165 class WXDLLIMPEXP_CORE wxColourPickerEvent
: public wxCommandEvent
168 wxColourPickerEvent() {}
169 wxColourPickerEvent(wxObject
*generator
, int id
, const wxColour
&col
)
170 : wxCommandEvent(wxEVT_COMMAND_COLOURPICKER_CHANGED
, id
),
173 SetEventObject(generator
);
176 wxColour
GetColour() const { return m_colour
; }
177 void SetColour(const wxColour
&c
) { m_colour
= c
; }
180 // default copy ctor, assignment operator and dtor are ok
181 virtual wxEvent
*Clone() const { return new wxColourPickerEvent(*this); }
186 DECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxColourPickerEvent
)
189 // ----------------------------------------------------------------------------
190 // event types and macros
191 // ----------------------------------------------------------------------------
193 typedef void (wxEvtHandler::*wxColourPickerEventFunction
)(wxColourPickerEvent
&);
195 #define wxColourPickerEventHandler(func) \
196 (wxObjectEventFunction)(wxEventFunction)wxStaticCastEvent(wxColourPickerEventFunction, &func)
198 #define EVT_COLOURPICKER_CHANGED(id, fn) \
199 wx__DECLARE_EVT1(wxEVT_COMMAND_COLOURPICKER_CHANGED, id, wxColourPickerEventHandler(fn))
202 #endif // wxUSE_COLOURPICKERCTRL
204 #endif // _WX_CLRPICKER_H_BASE_