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