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