]> git.saurik.com Git - wxWidgets.git/blob - include/wx/generic/grideditors.h
supporting clang memory management annotations
[wxWidgets.git] / include / wx / generic / grideditors.h
1 /////////////////////////////////////////////////////////////////////////////
2 // Name: wx/generic/grideditors.h
3 // Purpose: wxGridCellEditorEvtHandler and wxGrid editors
4 // Author: Michael Bedward (based on code by Julian Smart, Robin Dunn)
5 // Modified by: Santiago Palacios
6 // Created: 1/08/1999
7 // RCS-ID: $Id$
8 // Copyright: (c) Michael Bedward
9 // Licence: wxWindows licence
10 /////////////////////////////////////////////////////////////////////////////
11
12 #ifndef _WX_GENERIC_GRID_EDITORS_H_
13 #define _WX_GENERIC_GRID_EDITORS_H_
14
15 #include "wx/defs.h"
16
17 #if wxUSE_GRID
18
19 class wxGridCellEditorEvtHandler : public wxEvtHandler
20 {
21 public:
22 wxGridCellEditorEvtHandler(wxGrid* grid, wxGridCellEditor* editor)
23 : m_grid(grid),
24 m_editor(editor),
25 m_inSetFocus(false)
26 {
27 }
28
29 void OnKillFocus(wxFocusEvent& event);
30 void OnKeyDown(wxKeyEvent& event);
31 void OnChar(wxKeyEvent& event);
32
33 void SetInSetFocus(bool inSetFocus) { m_inSetFocus = inSetFocus; }
34
35 private:
36 wxGrid *m_grid;
37 wxGridCellEditor *m_editor;
38
39 // Work around the fact that a focus kill event can be sent to
40 // a combobox within a set focus event.
41 bool m_inSetFocus;
42
43 DECLARE_EVENT_TABLE()
44 DECLARE_DYNAMIC_CLASS(wxGridCellEditorEvtHandler)
45 wxDECLARE_NO_COPY_CLASS(wxGridCellEditorEvtHandler);
46 };
47
48
49 #if wxUSE_TEXTCTRL
50
51 // the editor for string/text data
52 class WXDLLIMPEXP_ADV wxGridCellTextEditor : public wxGridCellEditor
53 {
54 public:
55 wxGridCellTextEditor();
56
57 virtual void Create(wxWindow* parent,
58 wxWindowID id,
59 wxEvtHandler* evtHandler);
60 virtual void SetSize(const wxRect& rect);
61
62 virtual void PaintBackground(const wxRect& rectCell, wxGridCellAttr *attr);
63
64 virtual bool IsAcceptedKey(wxKeyEvent& event);
65 virtual void BeginEdit(int row, int col, wxGrid* grid);
66 virtual bool EndEdit(int row, int col, const wxGrid* grid,
67 const wxString& oldval, wxString *newval);
68 virtual void ApplyEdit(int row, int col, wxGrid* grid);
69
70 virtual void Reset();
71 virtual void StartingKey(wxKeyEvent& event);
72 virtual void HandleReturn(wxKeyEvent& event);
73
74 // parameters string format is "max_width"
75 virtual void SetParameters(const wxString& params);
76
77 virtual wxGridCellEditor *Clone() const
78 { return new wxGridCellTextEditor; }
79
80 // added GetValue so we can get the value which is in the control
81 virtual wxString GetValue() const;
82
83 protected:
84 wxTextCtrl *Text() const { return (wxTextCtrl *)m_control; }
85
86 // parts of our virtual functions reused by the derived classes
87 void DoCreate(wxWindow* parent, wxWindowID id, wxEvtHandler* evtHandler,
88 long style = 0);
89 void DoBeginEdit(const wxString& startValue);
90 void DoReset(const wxString& startValue);
91
92 private:
93 size_t m_maxChars; // max number of chars allowed
94 wxString m_value;
95
96 wxDECLARE_NO_COPY_CLASS(wxGridCellTextEditor);
97 };
98
99 // the editor for numeric (long) data
100 class WXDLLIMPEXP_ADV wxGridCellNumberEditor : public wxGridCellTextEditor
101 {
102 public:
103 // allows to specify the range - if min == max == -1, no range checking is
104 // done
105 wxGridCellNumberEditor(int min = -1, int max = -1);
106
107 virtual void Create(wxWindow* parent,
108 wxWindowID id,
109 wxEvtHandler* evtHandler);
110
111 virtual bool IsAcceptedKey(wxKeyEvent& event);
112 virtual void BeginEdit(int row, int col, wxGrid* grid);
113 virtual bool EndEdit(int row, int col, const wxGrid* grid,
114 const wxString& oldval, wxString *newval);
115 virtual void ApplyEdit(int row, int col, wxGrid* grid);
116
117 virtual void Reset();
118 virtual void StartingKey(wxKeyEvent& event);
119
120 // parameters string format is "min,max"
121 virtual void SetParameters(const wxString& params);
122
123 virtual wxGridCellEditor *Clone() const
124 { return new wxGridCellNumberEditor(m_min, m_max); }
125
126 // added GetValue so we can get the value which is in the control
127 virtual wxString GetValue() const;
128
129 protected:
130 #if wxUSE_SPINCTRL
131 wxSpinCtrl *Spin() const { return (wxSpinCtrl *)m_control; }
132 #endif
133
134 // if HasRange(), we use wxSpinCtrl - otherwise wxTextCtrl
135 bool HasRange() const
136 {
137 #if wxUSE_SPINCTRL
138 return m_min != m_max;
139 #else
140 return false;
141 #endif
142 }
143
144 // string representation of our value
145 wxString GetString() const
146 { return wxString::Format(wxT("%ld"), m_value); }
147
148 private:
149 int m_min,
150 m_max;
151
152 long m_value;
153
154 wxDECLARE_NO_COPY_CLASS(wxGridCellNumberEditor);
155 };
156
157
158 enum wxGridCellFloatFormat
159 {
160 // Decimal floating point (%f)
161 wxGRID_FLOAT_FORMAT_FIXED = 0x0010,
162
163 // Scientific notation (mantise/exponent) using e character (%e)
164 wxGRID_FLOAT_FORMAT_SCIENTIFIC = 0x0020,
165
166 // Use the shorter of %e or %f (%g)
167 wxGRID_FLOAT_FORMAT_COMPACT = 0x0040,
168
169 // To use in combination with one of the above formats (%F/%E/%G)
170 wxGRID_FLOAT_FORMAT_UPPER = 0x0080,
171
172 // Format used by default.
173 wxGRID_FLOAT_FORMAT_DEFAULT = wxGRID_FLOAT_FORMAT_FIXED,
174
175 // A mask to extract format from the combination of flags.
176 wxGRID_FLOAT_FORMAT_MASK = wxGRID_FLOAT_FORMAT_FIXED |
177 wxGRID_FLOAT_FORMAT_SCIENTIFIC |
178 wxGRID_FLOAT_FORMAT_COMPACT |
179 wxGRID_FLOAT_FORMAT_UPPER
180 };
181
182 // the editor for floating point numbers (double) data
183 class WXDLLIMPEXP_ADV wxGridCellFloatEditor : public wxGridCellTextEditor
184 {
185 public:
186 wxGridCellFloatEditor(int width = -1,
187 int precision = -1,
188 int format = wxGRID_FLOAT_FORMAT_DEFAULT);
189
190 virtual void Create(wxWindow* parent,
191 wxWindowID id,
192 wxEvtHandler* evtHandler);
193
194 virtual bool IsAcceptedKey(wxKeyEvent& event);
195 virtual void BeginEdit(int row, int col, wxGrid* grid);
196 virtual bool EndEdit(int row, int col, const wxGrid* grid,
197 const wxString& oldval, wxString *newval);
198 virtual void ApplyEdit(int row, int col, wxGrid* grid);
199
200 virtual void Reset();
201 virtual void StartingKey(wxKeyEvent& event);
202
203 virtual wxGridCellEditor *Clone() const
204 { return new wxGridCellFloatEditor(m_width, m_precision); }
205
206 // parameters string format is "width[,precision[,format]]"
207 // format to choose beween f|e|g|E|G (f is used by default)
208 virtual void SetParameters(const wxString& params);
209
210 protected:
211 // string representation of our value
212 wxString GetString();
213
214 private:
215 int m_width,
216 m_precision;
217 double m_value;
218
219 int m_style;
220 wxString m_format;
221
222 wxDECLARE_NO_COPY_CLASS(wxGridCellFloatEditor);
223 };
224
225 #endif // wxUSE_TEXTCTRL
226
227 #if wxUSE_CHECKBOX
228
229 // the editor for boolean data
230 class WXDLLIMPEXP_ADV wxGridCellBoolEditor : public wxGridCellEditor
231 {
232 public:
233 wxGridCellBoolEditor() { }
234
235 virtual void Create(wxWindow* parent,
236 wxWindowID id,
237 wxEvtHandler* evtHandler);
238
239 virtual void SetSize(const wxRect& rect);
240 virtual void Show(bool show, wxGridCellAttr *attr = NULL);
241
242 virtual bool IsAcceptedKey(wxKeyEvent& event);
243 virtual void BeginEdit(int row, int col, wxGrid* grid);
244 virtual bool EndEdit(int row, int col, const wxGrid* grid,
245 const wxString& oldval, wxString *newval);
246 virtual void ApplyEdit(int row, int col, wxGrid* grid);
247
248 virtual void Reset();
249 virtual void StartingClick();
250 virtual void StartingKey(wxKeyEvent& event);
251
252 virtual wxGridCellEditor *Clone() const
253 { return new wxGridCellBoolEditor; }
254
255 // added GetValue so we can get the value which is in the control, see
256 // also UseStringValues()
257 virtual wxString GetValue() const;
258
259 // set the string values returned by GetValue() for the true and false
260 // states, respectively
261 static void UseStringValues(const wxString& valueTrue = wxT("1"),
262 const wxString& valueFalse = wxEmptyString);
263
264 // return true if the given string is equal to the string representation of
265 // true value which we currently use
266 static bool IsTrueValue(const wxString& value);
267
268 protected:
269 wxCheckBox *CBox() const { return (wxCheckBox *)m_control; }
270
271 private:
272 bool m_value;
273
274 static wxString ms_stringValues[2];
275
276 wxDECLARE_NO_COPY_CLASS(wxGridCellBoolEditor);
277 };
278
279 #endif // wxUSE_CHECKBOX
280
281 #if wxUSE_COMBOBOX
282
283 // the editor for string data allowing to choose from the list of strings
284 class WXDLLIMPEXP_ADV wxGridCellChoiceEditor : public wxGridCellEditor
285 {
286 public:
287 // if !allowOthers, user can't type a string not in choices array
288 wxGridCellChoiceEditor(size_t count = 0,
289 const wxString choices[] = NULL,
290 bool allowOthers = false);
291 wxGridCellChoiceEditor(const wxArrayString& choices,
292 bool allowOthers = false);
293
294 virtual void Create(wxWindow* parent,
295 wxWindowID id,
296 wxEvtHandler* evtHandler);
297
298 virtual void SetSize(const wxRect& rect);
299
300 virtual void PaintBackground(const wxRect& rectCell, wxGridCellAttr *attr);
301
302 virtual void BeginEdit(int row, int col, wxGrid* grid);
303 virtual bool EndEdit(int row, int col, const wxGrid* grid,
304 const wxString& oldval, wxString *newval);
305 virtual void ApplyEdit(int row, int col, wxGrid* grid);
306
307 virtual void Reset();
308
309 // parameters string format is "item1[,item2[...,itemN]]"
310 virtual void SetParameters(const wxString& params);
311
312 virtual wxGridCellEditor *Clone() const;
313
314 // added GetValue so we can get the value which is in the control
315 virtual wxString GetValue() const;
316
317 protected:
318 wxComboBox *Combo() const { return (wxComboBox *)m_control; }
319
320 wxString m_value;
321 wxArrayString m_choices;
322 bool m_allowOthers;
323
324 wxDECLARE_NO_COPY_CLASS(wxGridCellChoiceEditor);
325 };
326
327 #endif // wxUSE_COMBOBOX
328
329 #if wxUSE_COMBOBOX
330
331 class WXDLLIMPEXP_ADV wxGridCellEnumEditor : public wxGridCellChoiceEditor
332 {
333 public:
334 wxGridCellEnumEditor( const wxString& choices = wxEmptyString );
335 virtual ~wxGridCellEnumEditor() {}
336
337 virtual wxGridCellEditor* Clone() const;
338
339 virtual void BeginEdit(int row, int col, wxGrid* grid);
340 virtual bool EndEdit(int row, int col, const wxGrid* grid,
341 const wxString& oldval, wxString *newval);
342 virtual void ApplyEdit(int row, int col, wxGrid* grid);
343
344 private:
345 long m_index;
346
347 wxDECLARE_NO_COPY_CLASS(wxGridCellEnumEditor);
348 };
349
350 #endif // wxUSE_COMBOBOX
351
352 class WXDLLIMPEXP_ADV wxGridCellAutoWrapStringEditor : public wxGridCellTextEditor
353 {
354 public:
355 wxGridCellAutoWrapStringEditor() : wxGridCellTextEditor() { }
356 virtual void Create(wxWindow* parent,
357 wxWindowID id,
358 wxEvtHandler* evtHandler);
359
360 virtual wxGridCellEditor *Clone() const
361 { return new wxGridCellAutoWrapStringEditor; }
362
363 wxDECLARE_NO_COPY_CLASS(wxGridCellAutoWrapStringEditor);
364 };
365
366 #endif // wxUSE_GRID
367
368 #endif // _WX_GENERIC_GRID_EDITORS_H_