1 /////////////////////////////////////////////////////////////////////////////
2 // Name: wx/pickerbase.h
3 // Purpose: wxPickerBase definition
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_PICKERBASE_H_BASE_
13 #define _WX_PICKERBASE_H_BASE_
15 #include "wx/control.h"
18 class WXDLLIMPEXP_CORE wxTextCtrl
;
20 extern WXDLLEXPORT_DATA(const wxChar
) wxButtonNameStr
[];
22 // ----------------------------------------------------------------------------
23 // wxPickerBase is the base class for the picker controls which support
24 // a wxPB_USE_TEXTCTRL style; i.e. for those pickers which can use an auxiliary
25 // text control next to the 'real' picker.
27 // The wxTextPickerHelper class manages enabled/disabled state of the text control,
28 // its sizing and positioning.
29 // ----------------------------------------------------------------------------
31 #define wxPB_USE_TEXTCTRL 0x0002
33 class WXDLLIMPEXP_CORE wxPickerBase
: public wxControl
36 // ctor: text is the associated text control
37 wxPickerBase() : m_text(NULL
), m_picker(NULL
), m_sizer(NULL
)
38 { m_container
.SetContainerWindow(this); }
39 virtual ~wxPickerBase() {}
42 // if present, intercepts wxPB_USE_TEXTCTRL style and creates the text control
43 // The 3rd argument is the initial wxString to display in the text control
44 bool CreateBase(wxWindow
*parent
,
46 const wxString
& text
= wxEmptyString
,
47 const wxPoint
& pos
= wxDefaultPosition
,
48 const wxSize
& size
= wxDefaultSize
,
50 const wxValidator
& validator
= wxDefaultValidator
,
51 const wxString
& name
= wxButtonNameStr
);
56 // margin between the text control and the picker
57 void SetInternalMargin(int newmargin
)
58 { GetTextCtrlItem()->SetBorder(newmargin
); m_sizer
->Layout(); }
59 int GetInternalMargin() const
60 { return GetTextCtrlItem()->GetBorder(); }
62 // proportion of the text control
63 void SetTextCtrlProportion(int prop
)
64 { GetTextCtrlItem()->SetProportion(prop
); m_sizer
->Layout(); }
65 int GetTextCtrlProportion() const
66 { return GetTextCtrlItem()->GetProportion(); }
68 // proportion of the picker control
69 void SetPickerCtrlProportion(int prop
)
70 { GetPickerCtrlItem()->SetProportion(prop
); m_sizer
->Layout(); }
71 int GetPickerCtrlProportion() const
72 { return GetPickerCtrlItem()->GetProportion(); }
74 bool IsTextCtrlGrowable() const
75 { return (GetTextCtrlItem()->GetFlag() & wxGROW
) != 0; }
76 void SetTextCtrlGrowable(bool grow
= true)
78 int f
= GetDefaultTextCtrlFlag();
84 GetTextCtrlItem()->SetFlag(f
);
87 bool IsPickerCtrlGrowable() const
88 { return (GetPickerCtrlItem()->GetFlag() & wxGROW
) != 0; }
89 void SetPickerCtrlGrowable(bool grow
= true)
91 int f
= GetDefaultPickerCtrlFlag();
97 GetPickerCtrlItem()->SetFlag(f
);
100 bool HasTextCtrl() const
101 { return m_text
!= NULL
; }
102 wxTextCtrl
*GetTextCtrl()
104 wxControl
*GetPickerCtrl()
107 public: // methods that derived class must/may override
109 virtual void UpdatePickerFromTextCtrl() = 0;
110 virtual void UpdateTextCtrlFromPicker() = 0;
112 protected: // utility functions
115 void OnTextCtrlDelete(wxWindowDestroyEvent
&);
116 void OnTextCtrlUpdate(wxCommandEvent
&);
117 void OnTextCtrlKillFocus(wxFocusEvent
&);
119 void OnSize(wxSizeEvent
&);
121 // returns the set of styles for the attached wxTextCtrl
122 // from given wxPickerBase's styles
123 virtual long GetTextCtrlStyle(long style
) const
124 { return (style
& wxWINDOW_STYLE_MASK
); }
126 // returns the set of styles for the m_picker
127 virtual long GetPickerStyle(long style
) const
128 { return (style
& wxWINDOW_STYLE_MASK
); }
131 wxSizerItem
*GetPickerCtrlItem() const
133 if (this->HasTextCtrl())
134 return m_sizer
->GetItem((size_t)1);
135 return m_sizer
->GetItem((size_t)0);
138 wxSizerItem
*GetTextCtrlItem() const
140 wxASSERT(this->HasTextCtrl());
141 return m_sizer
->GetItem((size_t)0);
144 int GetDefaultPickerCtrlFlag() const
146 // on macintosh, without additional borders
147 // there's not enough space for focus rect
148 return wxALIGN_CENTER_VERTICAL
|wxGROW
150 | wxTOP
| wxRIGHT
| wxBOTTOM
155 int GetDefaultTextCtrlFlag() const
157 // on macintosh, without wxALL there's not enough space for focus rect
158 return wxALIGN_CENTER_VERTICAL
170 wxTextCtrl
*m_text
; // can be NULL
175 DECLARE_ABSTRACT_CLASS(wxPickerBase
)
176 DECLARE_EVENT_TABLE()
178 // This class must be something just like a panel...
179 WX_DECLARE_CONTROL_CONTAINER();
184 // _WX_PICKERBASE_H_BASE_