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
8 // Licence: wxWindows Licence
9 /////////////////////////////////////////////////////////////////////////////
11 #ifndef _WX_PICKERBASE_H_BASE_
12 #define _WX_PICKERBASE_H_BASE_
14 #include "wx/control.h"
16 #include "wx/containr.h"
18 class WXDLLIMPEXP_FWD_CORE wxTextCtrl
;
19 class WXDLLIMPEXP_FWD_CORE wxToolTip
;
21 extern WXDLLIMPEXP_DATA_CORE(const char) wxButtonNameStr
[];
23 // ----------------------------------------------------------------------------
24 // wxPickerBase is the base class for the picker controls which support
25 // a wxPB_USE_TEXTCTRL style; i.e. for those pickers which can use an auxiliary
26 // text control next to the 'real' picker.
28 // The wxTextPickerHelper class manages enabled/disabled state of the text control,
29 // its sizing and positioning.
30 // ----------------------------------------------------------------------------
32 #define wxPB_USE_TEXTCTRL 0x0002
33 #define wxPB_SMALL 0x8000
35 class WXDLLIMPEXP_CORE wxPickerBase
: public wxNavigationEnabled
<wxControl
>
38 // ctor: text is the associated text control
39 wxPickerBase() : m_text(NULL
), m_picker(NULL
), m_sizer(NULL
)
41 virtual ~wxPickerBase() {}
44 // if present, intercepts wxPB_USE_TEXTCTRL style and creates the text control
45 // The 3rd argument is the initial wxString to display in the text control
46 bool CreateBase(wxWindow
*parent
,
48 const wxString
& text
= wxEmptyString
,
49 const wxPoint
& pos
= wxDefaultPosition
,
50 const wxSize
& size
= wxDefaultSize
,
52 const wxValidator
& validator
= wxDefaultValidator
,
53 const wxString
& name
= wxButtonNameStr
);
57 // margin between the text control and the picker
58 void SetInternalMargin(int newmargin
)
59 { GetTextCtrlItem()->SetBorder(newmargin
); m_sizer
->Layout(); }
60 int GetInternalMargin() const
61 { return GetTextCtrlItem()->GetBorder(); }
63 // proportion of the text control
64 void SetTextCtrlProportion(int prop
)
65 { GetTextCtrlItem()->SetProportion(prop
); m_sizer
->Layout(); }
66 int GetTextCtrlProportion() const
67 { return GetTextCtrlItem()->GetProportion(); }
69 // proportion of the picker control
70 void SetPickerCtrlProportion(int prop
)
71 { GetPickerCtrlItem()->SetProportion(prop
); m_sizer
->Layout(); }
72 int GetPickerCtrlProportion() const
73 { return GetPickerCtrlItem()->GetProportion(); }
75 bool IsTextCtrlGrowable() const
76 { return (GetTextCtrlItem()->GetFlag() & wxGROW
) != 0; }
77 void SetTextCtrlGrowable(bool grow
= true)
79 int f
= GetDefaultTextCtrlFlag();
85 GetTextCtrlItem()->SetFlag(f
);
88 bool IsPickerCtrlGrowable() const
89 { return (GetPickerCtrlItem()->GetFlag() & wxGROW
) != 0; }
90 void SetPickerCtrlGrowable(bool grow
= true)
92 int f
= GetDefaultPickerCtrlFlag();
98 GetPickerCtrlItem()->SetFlag(f
);
101 bool HasTextCtrl() const
102 { return m_text
!= NULL
; }
103 wxTextCtrl
*GetTextCtrl()
105 wxControl
*GetPickerCtrl()
108 void SetTextCtrl(wxTextCtrl
* text
)
110 void SetPickerCtrl(wxControl
* picker
)
111 { m_picker
= picker
; }
113 // methods that derived class must/may override
114 virtual void UpdatePickerFromTextCtrl() = 0;
115 virtual void UpdateTextCtrlFromPicker() = 0;
118 // overridden base class methods
120 virtual void DoSetToolTip(wxToolTip
*tip
);
121 #endif // wxUSE_TOOLTIPS
125 void OnTextCtrlDelete(wxWindowDestroyEvent
&);
126 void OnTextCtrlUpdate(wxCommandEvent
&);
127 void OnTextCtrlKillFocus(wxFocusEvent
&);
129 // returns the set of styles for the attached wxTextCtrl
130 // from given wxPickerBase's styles
131 virtual long GetTextCtrlStyle(long style
) const
132 { return (style
& wxWINDOW_STYLE_MASK
); }
134 // returns the set of styles for the m_picker
135 virtual long GetPickerStyle(long style
) const
136 { return (style
& wxWINDOW_STYLE_MASK
); }
139 wxSizerItem
*GetPickerCtrlItem() const
141 if (this->HasTextCtrl())
142 return m_sizer
->GetItem((size_t)1);
143 return m_sizer
->GetItem((size_t)0);
146 wxSizerItem
*GetTextCtrlItem() const
148 wxASSERT(this->HasTextCtrl());
149 return m_sizer
->GetItem((size_t)0);
152 int GetDefaultPickerCtrlFlag() const
154 // on macintosh, without additional borders
155 // there's not enough space for focus rect
156 return wxALIGN_CENTER_VERTICAL
|wxGROW
158 | wxTOP
| wxRIGHT
| wxBOTTOM
163 int GetDefaultTextCtrlFlag() const
165 // on macintosh, without wxALL there's not enough space for focus rect
166 return wxALIGN_CENTER_VERTICAL
178 wxTextCtrl
*m_text
; // can be NULL
183 DECLARE_ABSTRACT_CLASS(wxPickerBase
)
188 // _WX_PICKERBASE_H_BASE_