]> git.saurik.com Git - wxWidgets.git/blame_incremental - include/wx/pickerbase.h
change wxDataViewItem id to void*
[wxWidgets.git] / include / wx / pickerbase.h
... / ...
CommitLineData
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
8// RCS-ID: $Id$
9// Licence: wxWindows Licence
10/////////////////////////////////////////////////////////////////////////////
11
12#ifndef _WX_PICKERBASE_H_BASE_
13#define _WX_PICKERBASE_H_BASE_
14
15#include "wx/control.h"
16#include "wx/sizer.h"
17#include "wx/containr.h"
18
19class WXDLLIMPEXP_FWD_CORE wxTextCtrl;
20class WXDLLIMPEXP_FWD_CORE wxToolTip;
21
22extern WXDLLEXPORT_DATA(const wxChar) wxButtonNameStr[];
23
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.
28//
29// The wxTextPickerHelper class manages enabled/disabled state of the text control,
30// its sizing and positioning.
31// ----------------------------------------------------------------------------
32
33#define wxPB_USE_TEXTCTRL 0x0002
34
35class WXDLLIMPEXP_CORE wxPickerBase : public wxControl
36{
37public:
38 // ctor: text is the associated text control
39 wxPickerBase() : m_text(NULL), m_picker(NULL), m_sizer(NULL)
40 { WX_INIT_CONTROL_CONTAINER(); }
41 virtual ~wxPickerBase() {}
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
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,
53 const wxString& name = wxButtonNameStr);
54
55public: // public API
56
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(); }
62
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(); }
68
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
75 bool IsTextCtrlGrowable() const
76 { return (GetTextCtrlItem()->GetFlag() & wxGROW) != 0; }
77 void SetTextCtrlGrowable(bool grow = true)
78 {
79 int f = GetDefaultTextCtrlFlag();
80 if ( grow )
81 f |= wxGROW;
82 else
83 f &= ~wxGROW;
84
85 GetTextCtrlItem()->SetFlag(f);
86 }
87
88 bool IsPickerCtrlGrowable() const
89 { return (GetPickerCtrlItem()->GetFlag() & wxGROW) != 0; }
90 void SetPickerCtrlGrowable(bool grow = true)
91 {
92 int f = GetDefaultPickerCtrlFlag();
93 if ( grow )
94 f |= wxGROW;
95 else
96 f &= ~wxGROW;
97
98 GetPickerCtrlItem()->SetFlag(f);
99 }
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
108 // methods that derived class must/may override
109 virtual void UpdatePickerFromTextCtrl() = 0;
110 virtual void UpdateTextCtrlFromPicker() = 0;
111
112protected:
113 // overridden base class methods
114#if wxUSE_TOOLTIPS
115 virtual void DoSetToolTip(wxToolTip *tip);
116#endif // wxUSE_TOOLTIPS
117
118
119 // event handlers
120 void OnTextCtrlDelete(wxWindowDestroyEvent &);
121 void OnTextCtrlUpdate(wxCommandEvent &);
122 void OnTextCtrlKillFocus(wxFocusEvent &);
123
124 void OnSize(wxSizeEvent &);
125
126 // returns the set of styles for the attached wxTextCtrl
127 // from given wxPickerBase's styles
128 virtual long GetTextCtrlStyle(long style) const
129 { return (style & wxWINDOW_STYLE_MASK); }
130
131 // returns the set of styles for the m_picker
132 virtual long GetPickerStyle(long style) const
133 { return (style & wxWINDOW_STYLE_MASK); }
134
135
136 wxSizerItem *GetPickerCtrlItem() const
137 {
138 if (this->HasTextCtrl())
139 return m_sizer->GetItem((size_t)1);
140 return m_sizer->GetItem((size_t)0);
141 }
142
143 wxSizerItem *GetTextCtrlItem() const
144 {
145 wxASSERT(this->HasTextCtrl());
146 return m_sizer->GetItem((size_t)0);
147 }
148
149 int GetDefaultPickerCtrlFlag() const
150 {
151 // on macintosh, without additional borders
152 // there's not enough space for focus rect
153 return wxALIGN_CENTER_VERTICAL|wxGROW
154#ifdef __WXMAC__
155 | wxTOP | wxRIGHT | wxBOTTOM
156#endif
157 ;
158 }
159
160 int GetDefaultTextCtrlFlag() const
161 {
162 // on macintosh, without wxALL there's not enough space for focus rect
163 return wxALIGN_CENTER_VERTICAL
164#ifdef __WXMAC__
165 | wxALL
166#else
167 | wxRIGHT
168#endif
169 ;
170 }
171
172 void PostCreation();
173
174protected:
175 wxTextCtrl *m_text; // can be NULL
176 wxControl *m_picker;
177 wxBoxSizer *m_sizer;
178
179private:
180 DECLARE_ABSTRACT_CLASS(wxPickerBase)
181 DECLARE_EVENT_TABLE()
182
183 // This class must be something just like a panel...
184 WX_DECLARE_CONTROL_CONTAINER();
185};
186
187
188#endif
189 // _WX_PICKERBASE_H_BASE_