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"
17 #include "wx/containr.h"
19 class WXDLLIMPEXP_FWD_CORE wxTextCtrl
;
20 class WXDLLIMPEXP_FWD_CORE wxToolTip
;
22 extern WXDLLIMPEXP_DATA_CORE(const char) wxButtonNameStr
[];
24 // ----------------------------------------------------------------------------
25 // wxPickerBase is the base class for the picker controls which support
26 // a wxPB_USE_TEXTCTRL style; i.e. for those pickers which can use an auxiliary
27 // text control next to the 'real' picker.
29 // The wxTextPickerHelper class manages enabled/disabled state of the text control,
30 // its sizing and positioning.
31 // ----------------------------------------------------------------------------
33 #define wxPB_USE_TEXTCTRL 0x0002
34 #define wxPB_SMALL 0x8000
36 class WXDLLIMPEXP_CORE wxPickerBase
: public wxNavigationEnabled
<wxControl
>
39 // ctor: text is the associated text control
40 wxPickerBase() : m_text(NULL
), m_picker(NULL
), m_sizer(NULL
)
42 virtual ~wxPickerBase() {}
45 // if present, intercepts wxPB_USE_TEXTCTRL style and creates the text control
46 // The 3rd argument is the initial wxString to display in the text control
47 bool CreateBase(wxWindow
*parent
,
49 const wxString
& text
= wxEmptyString
,
50 const wxPoint
& pos
= wxDefaultPosition
,
51 const wxSize
& size
= wxDefaultSize
,
53 const wxValidator
& validator
= wxDefaultValidator
,
54 const wxString
& name
= wxButtonNameStr
);
58 // margin between the text control and the picker
59 void SetInternalMargin(int newmargin
)
60 { GetTextCtrlItem()->SetBorder(newmargin
); m_sizer
->Layout(); }
61 int GetInternalMargin() const
62 { return GetTextCtrlItem()->GetBorder(); }
64 // proportion of the text control
65 void SetTextCtrlProportion(int prop
)
66 { GetTextCtrlItem()->SetProportion(prop
); m_sizer
->Layout(); }
67 int GetTextCtrlProportion() const
68 { return GetTextCtrlItem()->GetProportion(); }
70 // proportion of the picker control
71 void SetPickerCtrlProportion(int prop
)
72 { GetPickerCtrlItem()->SetProportion(prop
); m_sizer
->Layout(); }
73 int GetPickerCtrlProportion() const
74 { return GetPickerCtrlItem()->GetProportion(); }
76 bool IsTextCtrlGrowable() const
77 { return (GetTextCtrlItem()->GetFlag() & wxGROW
) != 0; }
78 void SetTextCtrlGrowable(bool grow
= true)
80 int f
= GetDefaultTextCtrlFlag();
86 GetTextCtrlItem()->SetFlag(f
);
89 bool IsPickerCtrlGrowable() const
90 { return (GetPickerCtrlItem()->GetFlag() & wxGROW
) != 0; }
91 void SetPickerCtrlGrowable(bool grow
= true)
93 int f
= GetDefaultPickerCtrlFlag();
99 GetPickerCtrlItem()->SetFlag(f
);
102 bool HasTextCtrl() const
103 { return m_text
!= NULL
; }
104 wxTextCtrl
*GetTextCtrl()
106 wxControl
*GetPickerCtrl()
109 // methods that derived class must/may override
110 virtual void UpdatePickerFromTextCtrl() = 0;
111 virtual void UpdateTextCtrlFromPicker() = 0;
114 // overridden base class methods
116 virtual void DoSetToolTip(wxToolTip
*tip
);
117 #endif // wxUSE_TOOLTIPS
121 void OnTextCtrlDelete(wxWindowDestroyEvent
&);
122 void OnTextCtrlUpdate(wxCommandEvent
&);
123 void OnTextCtrlKillFocus(wxFocusEvent
&);
125 // returns the set of styles for the attached wxTextCtrl
126 // from given wxPickerBase's styles
127 virtual long GetTextCtrlStyle(long style
) const
128 { return (style
& wxWINDOW_STYLE_MASK
); }
130 // returns the set of styles for the m_picker
131 virtual long GetPickerStyle(long style
) const
132 { return (style
& wxWINDOW_STYLE_MASK
); }
135 wxSizerItem
*GetPickerCtrlItem() const
137 if (this->HasTextCtrl())
138 return m_sizer
->GetItem((size_t)1);
139 return m_sizer
->GetItem((size_t)0);
142 wxSizerItem
*GetTextCtrlItem() const
144 wxASSERT(this->HasTextCtrl());
145 return m_sizer
->GetItem((size_t)0);
148 int GetDefaultPickerCtrlFlag() const
150 // on macintosh, without additional borders
151 // there's not enough space for focus rect
152 return wxALIGN_CENTER_VERTICAL
|wxGROW
154 | wxTOP
| wxRIGHT
| wxBOTTOM
159 int GetDefaultTextCtrlFlag() const
161 // on macintosh, without wxALL there's not enough space for focus rect
162 return wxALIGN_CENTER_VERTICAL
174 wxTextCtrl
*m_text
; // can be NULL
179 DECLARE_ABSTRACT_CLASS(wxPickerBase
)
184 // _WX_PICKERBASE_H_BASE_