]> git.saurik.com Git - wxWidgets.git/blame - include/wx/pickerbase.h
Don't define __STRICT_ANSI__, we should build both with and without it.
[wxWidgets.git] / include / wx / pickerbase.h
CommitLineData
ec376c8f
VZ
1/////////////////////////////////////////////////////////////////////////////
2// Name: wx/pickerbase.h
3// Purpose: wxPickerBase definition
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
ec376c8f
VZ
8// Licence: wxWindows Licence
9/////////////////////////////////////////////////////////////////////////////
10
11#ifndef _WX_PICKERBASE_H_BASE_
12#define _WX_PICKERBASE_H_BASE_
13
c757b5fe 14#include "wx/control.h"
1bc79697 15#include "wx/sizer.h"
4107600f 16#include "wx/containr.h"
c757b5fe 17
b5dbe15d
VS
18class WXDLLIMPEXP_FWD_CORE wxTextCtrl;
19class WXDLLIMPEXP_FWD_CORE wxToolTip;
c757b5fe 20
53a2db12 21extern WXDLLIMPEXP_DATA_CORE(const char) wxButtonNameStr[];
ec376c8f
VZ
22
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.
27//
28// The wxTextPickerHelper class manages enabled/disabled state of the text control,
29// its sizing and positioning.
30// ----------------------------------------------------------------------------
31
32#define wxPB_USE_TEXTCTRL 0x0002
75bc8b34 33#define wxPB_SMALL 0x8000
ec376c8f 34
90230407 35class WXDLLIMPEXP_CORE wxPickerBase : public wxNavigationEnabled<wxControl>
ec376c8f
VZ
36{
37public:
38 // ctor: text is the associated text control
a65ffcb2 39 wxPickerBase() : m_text(NULL), m_picker(NULL), m_sizer(NULL)
90230407 40 { }
a65ffcb2 41 virtual ~wxPickerBase() {}
ec376c8f
VZ
42
43
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
5f6475c1
VZ
46 bool CreateBase(wxWindow *parent,
47 wxWindowID id,
48 const wxString& text = wxEmptyString,
49 const wxPoint& pos = wxDefaultPosition,
50 const wxSize& size = wxDefaultSize,
51 long style = 0,
52 const wxValidator& validator = wxDefaultValidator,
55b43eaa 53 const wxString& name = wxButtonNameStr);
ec376c8f 54
ec376c8f
VZ
55public: // public API
56
57 // margin between the text control and the picker
a65ffcb2
VZ
58 void SetInternalMargin(int newmargin)
59 { GetTextCtrlItem()->SetBorder(newmargin); m_sizer->Layout(); }
60 int GetInternalMargin() const
61 { return GetTextCtrlItem()->GetBorder(); }
ec376c8f 62
ecd87e5b 63 // proportion of the text control
a65ffcb2
VZ
64 void SetTextCtrlProportion(int prop)
65 { GetTextCtrlItem()->SetProportion(prop); m_sizer->Layout(); }
66 int GetTextCtrlProportion() const
67 { return GetTextCtrlItem()->GetProportion(); }
68
ecd87e5b
VZ
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(); }
74
a65ffcb2 75 bool IsTextCtrlGrowable() const
57b49e94 76 { return (GetTextCtrlItem()->GetFlag() & wxGROW) != 0; }
a65ffcb2
VZ
77 void SetTextCtrlGrowable(bool grow = true)
78 {
79 int f = GetDefaultTextCtrlFlag();
57b49e94
VZ
80 if ( grow )
81 f |= wxGROW;
a65ffcb2 82 else
57b49e94
VZ
83 f &= ~wxGROW;
84
85 GetTextCtrlItem()->SetFlag(f);
a65ffcb2
VZ
86 }
87
88 bool IsPickerCtrlGrowable() const
57b49e94 89 { return (GetPickerCtrlItem()->GetFlag() & wxGROW) != 0; }
a65ffcb2
VZ
90 void SetPickerCtrlGrowable(bool grow = true)
91 {
92 int f = GetDefaultPickerCtrlFlag();
57b49e94
VZ
93 if ( grow )
94 f |= wxGROW;
a65ffcb2 95 else
57b49e94
VZ
96 f &= ~wxGROW;
97
98 GetPickerCtrlItem()->SetFlag(f);
a65ffcb2 99 }
ec376c8f
VZ
100
101 bool HasTextCtrl() const
102 { return m_text != NULL; }
103 wxTextCtrl *GetTextCtrl()
104 { return m_text; }
105 wxControl *GetPickerCtrl()
106 { return m_picker; }
107
575821fa
RD
108 void SetTextCtrl(wxTextCtrl* text)
109 { m_text = text; }
110 void SetPickerCtrl(wxControl* picker)
111 { m_picker = picker; }
112
8ef74b15 113 // methods that derived class must/may override
ec376c8f
VZ
114 virtual void UpdatePickerFromTextCtrl() = 0;
115 virtual void UpdateTextCtrlFromPicker() = 0;
116
8ef74b15
VZ
117protected:
118 // overridden base class methods
119#if wxUSE_TOOLTIPS
120 virtual void DoSetToolTip(wxToolTip *tip);
121#endif // wxUSE_TOOLTIPS
122
ec376c8f 123
ec376c8f
VZ
124 // event handlers
125 void OnTextCtrlDelete(wxWindowDestroyEvent &);
126 void OnTextCtrlUpdate(wxCommandEvent &);
127 void OnTextCtrlKillFocus(wxFocusEvent &);
128
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); }
133
134 // returns the set of styles for the m_picker
135 virtual long GetPickerStyle(long style) const
136 { return (style & wxWINDOW_STYLE_MASK); }
137
a65ffcb2
VZ
138
139 wxSizerItem *GetPickerCtrlItem() const
140 {
141 if (this->HasTextCtrl())
142 return m_sizer->GetItem((size_t)1);
143 return m_sizer->GetItem((size_t)0);
144 }
145
146 wxSizerItem *GetTextCtrlItem() const
147 {
148 wxASSERT(this->HasTextCtrl());
149 return m_sizer->GetItem((size_t)0);
150 }
151
152 int GetDefaultPickerCtrlFlag() const
153 {
154 // on macintosh, without additional borders
155 // there's not enough space for focus rect
156 return wxALIGN_CENTER_VERTICAL|wxGROW
157#ifdef __WXMAC__
158 | wxTOP | wxRIGHT | wxBOTTOM
159#endif
160 ;
161 }
162
163 int GetDefaultTextCtrlFlag() const
164 {
165 // on macintosh, without wxALL there's not enough space for focus rect
166 return wxALIGN_CENTER_VERTICAL
167#ifdef __WXMAC__
168 | wxALL
169#else
170 | wxRIGHT
171#endif
172 ;
173 }
174
175 void PostCreation();
176
ec376c8f
VZ
177protected:
178 wxTextCtrl *m_text; // can be NULL
179 wxControl *m_picker;
a65ffcb2 180 wxBoxSizer *m_sizer;
ec376c8f
VZ
181
182private:
183 DECLARE_ABSTRACT_CLASS(wxPickerBase)
184};
185
186
187#endif
188 // _WX_PICKERBASE_H_BASE_