1///////////////////////////////////////////////////////////////////////////// 2// Name: wx/clrpicker.h 3// Purpose: wxColourPickerCtrl base header 4// Author: Francesco Montorsi (based on Vadim Zeitlin's code) 5// Modified by: 6// Created: 14/4/2006 7// Copyright: (c) Vadim Zeitlin, Francesco Montorsi 8// RCS-ID: $Id: clrpicker.h 53135 2008-04-12 02:31:04Z VZ $ 9// Licence: wxWindows Licence 10///////////////////////////////////////////////////////////////////////////// 11 12#ifndef _WX_CLRPICKER_H_BASE_ 13#define _WX_CLRPICKER_H_BASE_ 14 15#include "wx/defs.h" 16 17 18#if wxUSE_COLOURPICKERCTRL 19 20#include "wx/pickerbase.h" 21 22 23class WXDLLIMPEXP_FWD_CORE wxColourPickerEvent; 24 25extern WXDLLEXPORT_DATA(const wxChar) wxColourPickerWidgetNameStr[]; 26extern WXDLLEXPORT_DATA(const wxChar) wxColourPickerCtrlNameStr[]; 27 28 29// ---------------------------------------------------------------------------- 30// wxColourPickerWidgetBase: a generic abstract interface which must be 31// implemented by controls used by wxColourPickerCtrl 32// ---------------------------------------------------------------------------- 33 34class WXDLLIMPEXP_CORE wxColourPickerWidgetBase 35{ 36public: 37 wxColourPickerWidgetBase() { m_colour = *wxBLACK; } 38 virtual ~wxColourPickerWidgetBase() {} 39 40 wxColour GetColour() const 41 { return m_colour; } 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(); } 46 47protected: 48 49 virtual void UpdateColour() = 0; 50 51 // the current colour (may be invalid if none) 52 wxColour m_colour; 53}; 54 55 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 59 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 65 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// since GTK > 2.4, there is GtkColorButton 73#if defined(__WXGTK24__) && !defined(__WXUNIVERSAL__) 74 #include "wx/gtk/clrpicker.h" 75 #define wxColourPickerWidget wxColourButton 76#else 77 #include "wx/generic/clrpickerg.h" 78 #define wxColourPickerWidget wxGenericColourButton 79#endif 80 81 82// ---------------------------------------------------------------------------- 83// wxColourPickerCtrl: platform-independent class which embeds a 84// platform-dependent wxColourPickerWidget and, if wxCLRP_USE_TEXTCTRL style is 85// used, a textctrl next to it. 86// ---------------------------------------------------------------------------- 87 88#define wxCLRP_USE_TEXTCTRL (wxPB_USE_TEXTCTRL) 89#define wxCLRP_DEFAULT_STYLE 0 90 91class WXDLLIMPEXP_CORE wxColourPickerCtrl : public wxPickerBase 92{ 93public: 94 wxColourPickerCtrl() : m_bIgnoreNextTextCtrlUpdate(false) {} 95 virtual ~wxColourPickerCtrl() {} 96 97 98 wxColourPickerCtrl(wxWindow *parent, wxWindowID id, 99 const wxColour& col = *wxBLACK, const wxPoint& pos = wxDefaultPosition, 100 const wxSize& size = wxDefaultSize, long style = wxCLRP_DEFAULT_STYLE, 101 const wxValidator& validator = wxDefaultValidator, 102 const wxString& name = wxColourPickerCtrlNameStr) 103 : m_bIgnoreNextTextCtrlUpdate(false) 104 { Create(parent, id, col, pos, size, style, validator, name); } 105 106 bool Create(wxWindow *parent, wxWindowID id, 107 const wxColour& col = *wxBLACK, 108 const wxPoint& pos = wxDefaultPosition, 109 const wxSize& size = wxDefaultSize, 110 long style = wxCLRP_DEFAULT_STYLE, 111 const wxValidator& validator = wxDefaultValidator, 112 const wxString& name = wxColourPickerCtrlNameStr); 113 114 115public: // public API 116 117 // get the colour chosen 118 wxColour GetColour() const 119 { return ((wxColourPickerWidget *)m_picker)->GetColour(); } 120 121 // set currently displayed color 122 void SetColour(const wxColour& col); 123 124 // set colour using RGB(r,g,b) syntax or considering given text as a colour name; 125 // returns true if the given text was successfully recognized. 126 bool SetColour(const wxString& text); 127 128 129public: // internal functions 130 131 // update the button colour to match the text control contents 132 void UpdatePickerFromTextCtrl(); 133 134 // update the text control to match the button's colour 135 void UpdateTextCtrlFromPicker(); 136 137 // event handler for our picker 138 void OnColourChange(wxColourPickerEvent &); 139 140protected: 141 virtual long GetPickerStyle(long style) const 142 { return (style & wxCLRP_SHOW_LABEL); } 143 144 // true if the next UpdateTextCtrl() call is to ignore 145 bool m_bIgnoreNextTextCtrlUpdate; 146 147private: 148 DECLARE_DYNAMIC_CLASS(wxColourPickerCtrl) 149}; 150 151 152// ---------------------------------------------------------------------------- 153// wxColourPickerEvent: used by wxColourPickerCtrl only 154// ---------------------------------------------------------------------------- 155 156BEGIN_DECLARE_EVENT_TYPES() 157 DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_CORE, wxEVT_COMMAND_COLOURPICKER_CHANGED, 1102) 158END_DECLARE_EVENT_TYPES() 159 160class WXDLLIMPEXP_CORE wxColourPickerEvent : public wxCommandEvent 161{ 162public: 163 wxColourPickerEvent() {} 164 wxColourPickerEvent(wxObject *generator, int id, const wxColour &col) 165 : wxCommandEvent(wxEVT_COMMAND_COLOURPICKER_CHANGED, id), 166 m_colour(col) 167 { 168 SetEventObject(generator); 169 } 170 171 wxColour GetColour() const { return m_colour; } 172 void SetColour(const wxColour &c) { m_colour = c; } 173 174 175 // default copy ctor, assignment operator and dtor are ok 176 virtual wxEvent *Clone() const { return new wxColourPickerEvent(*this); } 177 178private: 179 wxColour m_colour; 180 181 DECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxColourPickerEvent) 182}; 183 184// ---------------------------------------------------------------------------- 185// event types and macros 186// ---------------------------------------------------------------------------- 187 188typedef void (wxEvtHandler::*wxColourPickerEventFunction)(wxColourPickerEvent&); 189 190#define wxColourPickerEventHandler(func) \ 191 (wxObjectEventFunction)(wxEventFunction)wxStaticCastEvent(wxColourPickerEventFunction, &func) 192 193#define EVT_COLOURPICKER_CHANGED(id, fn) \ 194 wx__DECLARE_EVT1(wxEVT_COMMAND_COLOURPICKER_CHANGED, id, wxColourPickerEventHandler(fn)) 195 196 197#endif // wxUSE_COLOURPICKERCTRL 198 199#endif // _WX_CLRPICKER_H_BASE_ 200 201