~brian-sidebotham/wxwidgets-cmake/wxpython-2.9.4

« back to all changes in this revision

Viewing changes to interface/wx/grid.h

  • Committer: Brian Sidebotham
  • Date: 2013-08-03 14:30:08 UTC
  • Revision ID: brian.sidebotham@gmail.com-20130803143008-c7806tkych1tp6fc
Initial import into Bazaar

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/////////////////////////////////////////////////////////////////////////////
 
2
// Name:        grid.h
 
3
// Purpose:     interface of wxGrid and related classes
 
4
// Author:      wxWidgets team
 
5
// RCS-ID:      $Id: grid.h 71577 2012-05-27 13:00:19Z VZ $
 
6
// Licence:     wxWindows licence
 
7
/////////////////////////////////////////////////////////////////////////////
 
8
 
 
9
/**
 
10
    @class wxGridCellRenderer
 
11
 
 
12
    This class is responsible for actually drawing the cell in the grid. You
 
13
    may pass it to the wxGridCellAttr (below) to change the format of one given
 
14
    cell or to wxGrid::SetDefaultRenderer() to change the view of all cells.
 
15
    This is an abstract class, and you will normally use one of the predefined
 
16
    derived classes or derive your own class from it.
 
17
 
 
18
    @library{wxadv}
 
19
    @category{grid}
 
20
 
 
21
    @see wxGridCellAutoWrapStringRenderer, wxGridCellBoolRenderer,
 
22
         wxGridCellDateTimeRenderer, wxGridCellEnumRenderer,
 
23
         wxGridCellFloatRenderer, wxGridCellNumberRenderer,
 
24
         wxGridCellStringRenderer
 
25
*/
 
26
class wxGridCellRenderer
 
27
{
 
28
public:
 
29
    /**
 
30
        This function must be implemented in derived classes to return a copy
 
31
        of itself.
 
32
    */
 
33
    virtual wxGridCellRenderer* Clone() const = 0;
 
34
 
 
35
    /**
 
36
        Draw the given cell on the provided DC inside the given rectangle using
 
37
        the style specified by the attribute and the default or selected state
 
38
        corresponding to the isSelected value.
 
39
 
 
40
        This pure virtual function has a default implementation which will
 
41
        prepare the DC using the given attribute: it will draw the rectangle
 
42
        with the background colour from attr and set the text colour and font.
 
43
    */
 
44
    virtual void Draw(wxGrid& grid, wxGridCellAttr& attr, wxDC& dc,
 
45
                      const wxRect& rect, int row, int col,
 
46
                      bool isSelected) = 0;
 
47
 
 
48
    /**
 
49
        Get the preferred size of the cell for its contents.
 
50
    */
 
51
    virtual wxSize GetBestSize(wxGrid& grid, wxGridCellAttr& attr, wxDC& dc,
 
52
                               int row, int col) = 0;
 
53
};
 
54
 
 
55
/**
 
56
    @class wxGridCellAutoWrapStringRenderer
 
57
 
 
58
    This class may be used to format string data in a cell. The too
 
59
    long lines are wrapped to be shown entirely at word boundaries.
 
60
 
 
61
    @library{wxadv}
 
62
    @category{grid}
 
63
 
 
64
    @see wxGridCellRenderer, wxGridCellBoolRenderer,
 
65
         wxGridCellDateTimeRenderer, wxGridCellEnumRenderer,
 
66
         wxGridCellFloatRenderer, wxGridCellNumberRenderer,
 
67
         wxGridCellStringRenderer
 
68
*/
 
69
 
 
70
class wxGridCellAutoWrapStringRenderer : public wxGridCellStringRenderer
 
71
{
 
72
public:
 
73
    /**
 
74
        Default constructor.
 
75
    */
 
76
    wxGridCellAutoWrapStringRenderer();
 
77
};
 
78
 
 
79
 
 
80
/**
 
81
    @class wxGridCellBoolRenderer
 
82
 
 
83
    This class may be used to format boolean data in a cell.
 
84
 
 
85
    @library{wxadv}
 
86
    @category{grid}
 
87
 
 
88
    @see wxGridCellRenderer, wxGridCellAutoWrapStringRenderer,
 
89
         wxGridCellDateTimeRenderer, wxGridCellEnumRenderer,
 
90
         wxGridCellFloatRenderer, wxGridCellNumberRenderer,
 
91
         wxGridCellStringRenderer
 
92
*/
 
93
class wxGridCellBoolRenderer : public wxGridCellRenderer
 
94
{
 
95
public:
 
96
    /**
 
97
        Default constructor.
 
98
    */
 
99
    wxGridCellBoolRenderer();
 
100
};
 
101
 
 
102
/**
 
103
    @class wxGridCellDateTimeRenderer
 
104
 
 
105
    This class may be used to format a date/time data in a cell.
 
106
    The class wxDateTime is used internally to display the local date/time
 
107
    or to parse the string date entered in the cell thanks to the defined format.
 
108
 
 
109
    @library{wxadv}
 
110
    @category{grid}
 
111
 
 
112
    @see wxGridCellRenderer, wxGridCellAutoWrapStringRenderer,
 
113
         wxGridCellBoolRenderer, wxGridCellEnumRenderer,
 
114
         wxGridCellFloatRenderer, wxGridCellNumberRenderer,
 
115
         wxGridCellStringRenderer
 
116
*/
 
117
class wxGridCellDateTimeRenderer : public wxGridCellStringRenderer
 
118
{
 
119
public:
 
120
    /**
 
121
        Date/time renderer constructor.
 
122
 
 
123
        @param outformat
 
124
            strptime()-like format string used the parse the output date/time.
 
125
        @param informat
 
126
            strptime()-like format string used to parse the string entered in the cell.
 
127
    */
 
128
    wxGridCellDateTimeRenderer(const wxString& outformat = wxDefaultDateTimeFormat,
 
129
                               const wxString& informat = wxDefaultDateTimeFormat);
 
130
 
 
131
 
 
132
    /**
 
133
        Sets the strptime()-like format string which will be used to parse
 
134
        the date/time.
 
135
 
 
136
        @param params
 
137
            strptime()-like format string used to parse the date/time.
 
138
    */
 
139
    virtual void SetParameters(const wxString& params);
 
140
};
 
141
 
 
142
/**
 
143
    @class wxGridCellEnumRenderer
 
144
 
 
145
    This class may be used to render in a cell a number as a textual
 
146
    equivalent.
 
147
 
 
148
    The corresponding text strings are specified as comma-separated items in
 
149
    the string passed to this renderer ctor or SetParameters() method. For
 
150
    example, if this string is @c "John,Fred,Bob" the cell will be rendered as
 
151
    "John", "Fred" or "Bob" if its contents is 0, 1 or 2 respectively.
 
152
 
 
153
    @library{wxadv}
 
154
    @category{grid}
 
155
 
 
156
    @see wxGridCellRenderer, wxGridCellAutoWrapStringRenderer,
 
157
         wxGridCellBoolRenderer, wxGridCellDateTimeRenderer,
 
158
         wxGridCellFloatRenderer, wxGridCellNumberRenderer,
 
159
         wxGridCellStringRenderer
 
160
*/
 
161
class wxGridCellEnumRenderer : public wxGridCellStringRenderer
 
162
{
 
163
public:
 
164
    /**
 
165
        Enum renderer ctor.
 
166
 
 
167
        @param choices
 
168
            Comma separated string parameters "item1[,item2[...,itemN]]".
 
169
    */
 
170
    wxGridCellEnumRenderer( const wxString& choices = wxEmptyString );
 
171
 
 
172
    /**
 
173
        Sets the comma separated string content of the enum.
 
174
 
 
175
        @param params
 
176
            Comma separated string parameters "item1[,item2[...,itemN]]".
 
177
    */
 
178
    virtual void SetParameters(const wxString& params);
 
179
};
 
180
 
 
181
/**
 
182
    Specifier used to format the data to string for the numbers handled by
 
183
    wxGridCellFloatRenderer and wxGridCellFloatEditor.
 
184
 
 
185
    @since 2.9.3
 
186
*/
 
187
enum wxGridCellFloatFormat
 
188
{
 
189
    /// Decimal floating point (%f).
 
190
    wxGRID_FLOAT_FORMAT_FIXED       = 0x0010,
 
191
 
 
192
    /// Scientific notation (mantise/exponent) using e character (%e).
 
193
    wxGRID_FLOAT_FORMAT_SCIENTIFIC  = 0x0020,
 
194
 
 
195
    /// Use the shorter of %e or %f (%g).
 
196
    wxGRID_FLOAT_FORMAT_COMPACT     = 0x0040,
 
197
 
 
198
    /// To use in combination with one of the above formats for the upper
 
199
    /// case version (%F/%E/%G)
 
200
    wxGRID_FLOAT_FORMAT_UPPER       = 0x0080,
 
201
 
 
202
    /// The format used by default (wxGRID_FLOAT_FORMAT_FIXED).
 
203
    wxGRID_FLOAT_FORMAT_DEFAULT     = wxGRID_FLOAT_FORMAT_FIXED
 
204
};
 
205
 
 
206
/**
 
207
    @class wxGridCellFloatRenderer
 
208
 
 
209
    This class may be used to format floating point data in a cell.
 
210
 
 
211
    @library{wxadv}
 
212
    @category{grid}
 
213
 
 
214
    @see wxGridCellRenderer, wxGridCellAutoWrapStringRenderer,
 
215
         wxGridCellBoolRenderer, wxGridCellDateTimeRenderer,
 
216
         wxGridCellEnumRenderer, wxGridCellNumberRenderer,
 
217
         wxGridCellStringRenderer
 
218
*/
 
219
class wxGridCellFloatRenderer : public wxGridCellStringRenderer
 
220
{
 
221
public:
 
222
    /**
 
223
        Float cell renderer ctor.
 
224
 
 
225
        @param width
 
226
            Minimum number of characters to be shown.
 
227
        @param precision
 
228
            Number of digits after the decimal dot.
 
229
        @param format
 
230
            The format used to display the string, must be a combination of
 
231
            ::wxGridCellFloatFormat enum elements. This parameter is only
 
232
            available since wxWidgets 2.9.3.
 
233
    */
 
234
    wxGridCellFloatRenderer(int width = -1, int precision = -1,
 
235
                            int format = wxGRID_FLOAT_FORMAT_DEFAULT);
 
236
 
 
237
    /**
 
238
        Returns the specifier used to format the data to string.
 
239
 
 
240
        The returned value is a combination of ::wxGridCellFloatFormat elements.
 
241
 
 
242
        @since 2.9.3
 
243
    */
 
244
    int GetFormat() const;
 
245
 
 
246
    /**
 
247
        Returns the precision.
 
248
    */
 
249
    int GetPrecision() const;
 
250
 
 
251
    /**
 
252
        Returns the width.
 
253
    */
 
254
    int GetWidth() const;
 
255
 
 
256
    /**
 
257
        Set the format to use for display the number.
 
258
 
 
259
        @param format
 
260
            Must be a combination of ::wxGridCellFloatFormat enum elements.
 
261
 
 
262
        @since 2.9.3
 
263
    */
 
264
    void SetFormat(int format);
 
265
 
 
266
    /**
 
267
        The parameters string format is "width[,precision[,format]]" where
 
268
        @c format should be chosen between f|e|g|E|G (f is used by default)
 
269
    */
 
270
    virtual void SetParameters(const wxString& params);
 
271
 
 
272
    /**
 
273
        Sets the precision.
 
274
    */
 
275
    void SetPrecision(int precision);
 
276
 
 
277
    /**
 
278
        Sets the width.
 
279
    */
 
280
    void SetWidth(int width);
 
281
};
 
282
 
 
283
/**
 
284
    @class wxGridCellNumberRenderer
 
285
 
 
286
    This class may be used to format integer data in a cell.
 
287
 
 
288
    @library{wxadv}
 
289
    @category{grid}
 
290
 
 
291
    @see wxGridCellRenderer, wxGridCellAutoWrapStringRenderer,
 
292
         wxGridCellBoolRenderer, wxGridCellDateTimeRenderer,
 
293
         wxGridCellEnumRenderer, wxGridCellFloatRenderer,
 
294
         wxGridCellStringRenderer
 
295
*/
 
296
class wxGridCellNumberRenderer : public wxGridCellStringRenderer
 
297
{
 
298
public:
 
299
    /**
 
300
        Default constructor.
 
301
    */
 
302
    wxGridCellNumberRenderer();
 
303
};
 
304
 
 
305
/**
 
306
    @class wxGridCellStringRenderer
 
307
 
 
308
    This class may be used to format string data in a cell; it is the default
 
309
    for string cells.
 
310
 
 
311
    @library{wxadv}
 
312
    @category{grid}
 
313
 
 
314
    @see wxGridCellRenderer, wxGridCellAutoWrapStringRenderer,
 
315
         wxGridCellBoolRenderer, wxGridCellDateTimeRenderer,
 
316
         wxGridCellEnumRenderer, wxGridCellFloatRenderer,
 
317
         wxGridCellNumberRenderer
 
318
*/
 
319
class wxGridCellStringRenderer : public wxGridCellRenderer
 
320
{
 
321
public:
 
322
    /**
 
323
        Default constructor.
 
324
    */
 
325
    wxGridCellStringRenderer();
 
326
};
 
327
 
 
328
 
 
329
/**
 
330
    @class wxGridCellEditor
 
331
 
 
332
    This class is responsible for providing and manipulating the in-place edit
 
333
    controls for the grid.  Instances of wxGridCellEditor (actually, instances
 
334
    of derived classes since it is an abstract class) can be associated with
 
335
    the cell attributes for individual cells, rows, columns, or even for the
 
336
    entire grid.
 
337
 
 
338
    @library{wxadv}
 
339
    @category{grid}
 
340
 
 
341
    @see wxGridCellAutoWrapStringEditor, wxGridCellBoolEditor,
 
342
         wxGridCellChoiceEditor, wxGridCellEnumEditor,
 
343
         wxGridCellFloatEditor, wxGridCellNumberEditor,
 
344
         wxGridCellTextEditor
 
345
*/
 
346
class wxGridCellEditor
 
347
{
 
348
public:
 
349
    /**
 
350
        Default constructor.
 
351
    */
 
352
    wxGridCellEditor();
 
353
 
 
354
    /**
 
355
        Fetch the value from the table and prepare the edit control to begin
 
356
        editing.
 
357
 
 
358
        This function should save the original value of the grid cell at the
 
359
        given @a row and @a col and show the control allowing the user to
 
360
        change it.
 
361
 
 
362
        @see EndEdit()
 
363
    */
 
364
    virtual void BeginEdit(int row, int col, wxGrid* grid) = 0;
 
365
 
 
366
    /**
 
367
        Create a new object which is the copy of this one.
 
368
    */
 
369
    virtual wxGridCellEditor* Clone() const = 0;
 
370
 
 
371
    /**
 
372
        Creates the actual edit control.
 
373
    */
 
374
    virtual void Create(wxWindow* parent, wxWindowID id,
 
375
                        wxEvtHandler* evtHandler) = 0;
 
376
 
 
377
    /**
 
378
        Final cleanup.
 
379
    */
 
380
    virtual void Destroy();
 
381
 
 
382
    /**
 
383
        End editing the cell.
 
384
 
 
385
        This function must check if the current value of the editing control is
 
386
        valid and different from the original value (available as @a oldval in
 
387
        its string form and possibly saved internally using its real type by
 
388
        BeginEdit()). If it isn't, it just returns @false, otherwise it must do
 
389
        the following:
 
390
            # Save the new value internally so that ApplyEdit() could apply it.
 
391
            # Fill @a newval (which is never @NULL) with the string
 
392
            representation of the new value.
 
393
            # Return @true
 
394
 
 
395
        Notice that it must @em not modify the grid as the change could still
 
396
        be vetoed.
 
397
 
 
398
        If the user-defined wxEVT_GRID_CELL_CHANGING event handler doesn't veto
 
399
        this change, ApplyEdit() will be called next.
 
400
    */
 
401
    virtual bool EndEdit(int row, int col, const wxGrid* grid,
 
402
                         const wxString& oldval, wxString* newval) = 0;
 
403
 
 
404
    /**
 
405
        Effectively save the changes in the grid.
 
406
 
 
407
        This function should save the value of the control in the grid. It is
 
408
        called only after EndEdit() returns @true.
 
409
     */
 
410
    virtual void ApplyEdit(int row, int col, wxGrid* grid) = 0;
 
411
 
 
412
    /**
 
413
        Some types of controls on some platforms may need some help with the
 
414
        Return key.
 
415
    */
 
416
    virtual void HandleReturn(wxKeyEvent& event);
 
417
 
 
418
    /**
 
419
        Returns @true if the edit control has been created.
 
420
    */
 
421
    bool IsCreated();
 
422
 
 
423
    /**
 
424
        Draws the part of the cell not occupied by the control: the base class
 
425
        version just fills it with background colour from the attribute.
 
426
    */
 
427
    virtual void PaintBackground(const wxRect& rectCell, wxGridCellAttr* attr);
 
428
 
 
429
    /**
 
430
        Reset the value in the control back to its starting value.
 
431
    */
 
432
    virtual void Reset() = 0;
 
433
 
 
434
    /**
 
435
        Size and position the edit control.
 
436
    */
 
437
    virtual void SetSize(const wxRect& rect);
 
438
 
 
439
    /**
 
440
        Show or hide the edit control, use the specified attributes to set
 
441
        colours/fonts for it.
 
442
    */
 
443
    virtual void Show(bool show, wxGridCellAttr* attr = NULL);
 
444
 
 
445
    /**
 
446
        If the editor is enabled by clicking on the cell, this method will be
 
447
        called.
 
448
    */
 
449
    virtual void StartingClick();
 
450
 
 
451
    /**
 
452
        If the editor is enabled by pressing keys on the grid, this will be
 
453
        called to let the editor do something about that first key if desired.
 
454
    */
 
455
    virtual void StartingKey(wxKeyEvent& event);
 
456
 
 
457
protected:
 
458
 
 
459
    /**
 
460
        The destructor is private because only DecRef() can delete us.
 
461
    */
 
462
    virtual ~wxGridCellEditor();
 
463
};
 
464
 
 
465
/**
 
466
    @class wxGridCellAutoWrapStringEditor
 
467
 
 
468
    Grid cell editor for wrappable string/text data.
 
469
 
 
470
    @library{wxadv}
 
471
    @category{grid}
 
472
 
 
473
    @see wxGridCellEditor, wxGridCellBoolEditor, wxGridCellChoiceEditor,
 
474
         wxGridCellEnumEditor, wxGridCellFloatEditor,
 
475
         wxGridCellNumberEditor, wxGridCellTextEditor
 
476
*/
 
477
class wxGridCellAutoWrapStringEditor : public wxGridCellTextEditor
 
478
{
 
479
public:
 
480
    wxGridCellAutoWrapStringEditor();
 
481
};
 
482
 
 
483
/**
 
484
    @class wxGridCellBoolEditor
 
485
 
 
486
    Grid cell editor for boolean data.
 
487
 
 
488
    @library{wxadv}
 
489
    @category{grid}
 
490
 
 
491
    @see wxGridCellEditor, wxGridCellAutoWrapStringEditor,
 
492
         wxGridCellChoiceEditor, wxGridCellEnumEditor,
 
493
         wxGridCellFloatEditor, wxGridCellNumberEditor,
 
494
         wxGridCellTextEditor
 
495
*/
 
496
class wxGridCellBoolEditor : public wxGridCellEditor
 
497
{
 
498
public:
 
499
    /**
 
500
        Default constructor.
 
501
    */
 
502
    wxGridCellBoolEditor();
 
503
 
 
504
    /**
 
505
        Returns @true if the given @a value is equal to the string
 
506
        representation of the truth value we currently use (see
 
507
        UseStringValues()).
 
508
    */
 
509
    static bool IsTrueValue(const wxString& value);
 
510
 
 
511
    /**
 
512
        This method allows you to customize the values returned by GetValue()
 
513
        for the cell using this editor. By default, the default values of the
 
514
        arguments are used, i.e. @c "1" is returned if the cell is checked and
 
515
        an empty string otherwise.
 
516
    */
 
517
    static void UseStringValues(const wxString& valueTrue = "1",
 
518
                                const wxString& valueFalse = wxEmptyString);
 
519
};
 
520
 
 
521
/**
 
522
    @class wxGridCellChoiceEditor
 
523
 
 
524
    Grid cell editor for string data providing the user a choice from a list of
 
525
    strings.
 
526
 
 
527
    @library{wxadv}
 
528
    @category{grid}
 
529
 
 
530
    @see wxGridCellEditor, wxGridCellAutoWrapStringEditor,
 
531
         wxGridCellBoolEditor, wxGridCellEnumEditor,
 
532
         wxGridCellFloatEditor, wxGridCellNumberEditor,
 
533
         wxGridCellTextEditor
 
534
*/
 
535
class wxGridCellChoiceEditor : public wxGridCellEditor
 
536
{
 
537
public:
 
538
    /**
 
539
        Choice cell renderer ctor.
 
540
 
 
541
        @param count
 
542
            Number of strings from which the user can choose.
 
543
        @param choices
 
544
            An array of strings from which the user can choose.
 
545
        @param allowOthers
 
546
            If allowOthers is @true, the user can type a string not in choices
 
547
            array.
 
548
    */
 
549
    wxGridCellChoiceEditor(size_t count = 0,
 
550
                           const wxString choices[] = NULL,
 
551
                           bool allowOthers = false);
 
552
 
 
553
    /**
 
554
        Choice cell renderer ctor.
 
555
 
 
556
        @param choices
 
557
            An array of strings from which the user can choose.
 
558
        @param allowOthers
 
559
            If allowOthers is @true, the user can type a string not in choices
 
560
            array.
 
561
    */
 
562
    wxGridCellChoiceEditor(const wxArrayString& choices,
 
563
                           bool allowOthers = false);
 
564
 
 
565
    /**
 
566
        Parameters string format is "item1[,item2[...,itemN]]"
 
567
    */
 
568
    virtual void SetParameters(const wxString& params);
 
569
};
 
570
 
 
571
/**
 
572
    @class wxGridCellEnumEditor
 
573
 
 
574
    Grid cell editor which displays an enum number as a textual equivalent
 
575
    (eg. data in cell is 0,1,2 ... n the cell could be displayed as
 
576
    "John","Fred"..."Bob" in the combo choice box).
 
577
 
 
578
    @library{wxadv}
 
579
    @category{grid}
 
580
 
 
581
    @see wxGridCellEditor, wxGridCellAutoWrapStringEditor,
 
582
         wxGridCellBoolEditor, wxGridCellChoiceEditor,
 
583
         wxGridCellTextEditor, wxGridCellFloatEditor,
 
584
         wxGridCellNumberEditor
 
585
*/
 
586
class wxGridCellEnumEditor : public wxGridCellChoiceEditor
 
587
{
 
588
public:
 
589
    /**
 
590
        Enum cell editor ctor.
 
591
 
 
592
        @param choices
 
593
            Comma separated choice parameters "item1[,item2[...,itemN]]".
 
594
    */
 
595
    wxGridCellEnumEditor( const wxString& choices = wxEmptyString );
 
596
};
 
597
 
 
598
/**
 
599
    @class wxGridCellTextEditor
 
600
 
 
601
    Grid cell editor for string/text data.
 
602
 
 
603
    @library{wxadv}
 
604
    @category{grid}
 
605
 
 
606
    @see wxGridCellEditor, wxGridCellAutoWrapStringEditor,
 
607
         wxGridCellBoolEditor, wxGridCellChoiceEditor,
 
608
         wxGridCellEnumEditor, wxGridCellFloatEditor,
 
609
         wxGridCellNumberEditor
 
610
*/
 
611
class wxGridCellTextEditor : public wxGridCellEditor
 
612
{
 
613
public:
 
614
    /**
 
615
        Default constructor.
 
616
    */
 
617
    wxGridCellTextEditor();
 
618
 
 
619
    /**
 
620
        The parameters string format is "n" where n is a number representing
 
621
        the maximum width.
 
622
    */
 
623
    virtual void SetParameters(const wxString& params);
 
624
};
 
625
 
 
626
/**
 
627
    @class wxGridCellFloatEditor
 
628
 
 
629
    The editor for floating point numbers data.
 
630
 
 
631
    @library{wxadv}
 
632
    @category{grid}
 
633
 
 
634
    @see wxGridCellEditor, wxGridCellAutoWrapStringEditor,
 
635
         wxGridCellBoolEditor, wxGridCellChoiceEditor,
 
636
         wxGridCellEnumEditor, wxGridCellNumberEditor,
 
637
         wxGridCellTextEditor
 
638
*/
 
639
class wxGridCellFloatEditor : public wxGridCellTextEditor
 
640
{
 
641
public:
 
642
    /**
 
643
        Float cell editor ctor.
 
644
 
 
645
        @param width
 
646
            Minimum number of characters to be shown.
 
647
        @param precision
 
648
            Number of digits after the decimal dot.
 
649
        @param format
 
650
            The format to use for displaying the number, a combination of
 
651
            ::wxGridCellFloatFormat enum elements. This parameter is only
 
652
            available since wxWidgets 2.9.3.
 
653
    */
 
654
    wxGridCellFloatEditor(int width = -1, int precision = -1,
 
655
                          int format = wxGRID_FLOAT_FORMAT_DEFAULT);
 
656
 
 
657
    /**
 
658
        The parameters string format is "width[,precision[,format]]" where
 
659
        @c format should be chosen between f|e|g|E|G (f is used by default)
 
660
    */
 
661
    virtual void SetParameters(const wxString& params);
 
662
};
 
663
 
 
664
/**
 
665
    @class wxGridCellNumberEditor
 
666
 
 
667
    Grid cell editor for numeric integer data.
 
668
 
 
669
    @library{wxadv}
 
670
    @category{grid}
 
671
 
 
672
    @see wxGridCellEditor, wxGridCellAutoWrapStringEditor,
 
673
         wxGridCellBoolEditor, wxGridCellChoiceEditor,
 
674
         wxGridCellEnumEditor, wxGridCellFloatEditor,
 
675
         wxGridCellTextEditor
 
676
*/
 
677
class wxGridCellNumberEditor : public wxGridCellTextEditor
 
678
{
 
679
public:
 
680
    /**
 
681
        Allows you to specify the range for acceptable data. Values equal to
 
682
        -1 for both @a min and @a max indicate that no range checking should be
 
683
        done.
 
684
    */
 
685
    wxGridCellNumberEditor(int min = -1, int max = -1);
 
686
 
 
687
 
 
688
    /**
 
689
        Parameters string format is "min,max".
 
690
    */
 
691
    virtual void SetParameters(const wxString& params);
 
692
 
 
693
protected:
 
694
 
 
695
    /**
 
696
        If the return value is @true, the editor uses a wxSpinCtrl to get user
 
697
        input, otherwise it uses a wxTextCtrl.
 
698
    */
 
699
    bool HasRange() const;
 
700
 
 
701
    /**
 
702
        String representation of the value.
 
703
    */
 
704
    wxString GetString() const;
 
705
};
 
706
 
 
707
 
 
708
 
 
709
/**
 
710
    @class wxGridCellAttr
 
711
 
 
712
    This class can be used to alter the cells' appearance in the grid by
 
713
    changing their attributes from the defaults. An object of this class may be
 
714
    returned by wxGridTableBase::GetAttr().
 
715
 
 
716
    @library{wxadv}
 
717
    @category{grid}
 
718
*/
 
719
class wxGridCellAttr
 
720
{
 
721
public:
 
722
    /**
 
723
        Kind of the attribute to retrieve.
 
724
 
 
725
        @see wxGridCellAttrProvider::GetAttr(), wxGridTableBase::GetAttr()
 
726
     */
 
727
    enum wxAttrKind
 
728
    {
 
729
        /// Return the combined effective attribute for the cell.
 
730
        Any,
 
731
 
 
732
        /// Return the attribute explicitly set for this cell.
 
733
        Cell,
 
734
 
 
735
        /// Return the attribute set for this cells row.
 
736
        Row,
 
737
 
 
738
        /// Return the attribute set for this cells column.
 
739
        Col
 
740
    };
 
741
 
 
742
    /**
 
743
        Default constructor.
 
744
    */
 
745
    wxGridCellAttr(wxGridCellAttr* attrDefault = NULL);
 
746
    /**
 
747
        Constructor specifying some of the often used attributes.
 
748
    */
 
749
    wxGridCellAttr(const wxColour& colText, const wxColour& colBack,
 
750
                   const wxFont& font, int hAlign, int vAlign);
 
751
 
 
752
    /**
 
753
        Creates a new copy of this object.
 
754
    */
 
755
    wxGridCellAttr* Clone() const;
 
756
 
 
757
    /**
 
758
        This class is reference counted: it is created with ref count of 1, so
 
759
        calling DecRef() once will delete it. Calling IncRef() allows to lock
 
760
        it until the matching DecRef() is called.
 
761
    */
 
762
    void DecRef();
 
763
 
 
764
    /**
 
765
        Get the alignment to use for the cell with the given attribute.
 
766
 
 
767
        If this attribute doesn't specify any alignment, the default attribute
 
768
        alignment is used (which can be changed using
 
769
        wxGrid::SetDefaultCellAlignment() but is left and top by default).
 
770
 
 
771
        Notice that @a hAlign and @a vAlign values are always overwritten by
 
772
        this function, use GetNonDefaultAlignment() if this is not desirable.
 
773
 
 
774
        @param hAlign
 
775
            Horizontal alignment is returned here if this argument is non-@NULL.
 
776
            It is one of wxALIGN_LEFT, wxALIGN_CENTRE or wxALIGN_RIGHT.
 
777
        @param vAlign
 
778
            Vertical alignment is returned here if this argument is non-@NULL.
 
779
            It is one of wxALIGN_TOP, wxALIGN_CENTRE or wxALIGN_BOTTOM.
 
780
    */
 
781
    void GetAlignment(int* hAlign, int* vAlign) const;
 
782
 
 
783
    /**
 
784
        Returns the background colour.
 
785
    */
 
786
    const wxColour& GetBackgroundColour() const;
 
787
 
 
788
    /**
 
789
        Returns the cell editor.
 
790
    */
 
791
    wxGridCellEditor* GetEditor(const wxGrid* grid, int row, int col) const;
 
792
 
 
793
    /**
 
794
        Returns the font.
 
795
    */
 
796
    const wxFont& GetFont() const;
 
797
 
 
798
    /**
 
799
        Get the alignment defined by this attribute.
 
800
 
 
801
        Unlike GetAlignment() this function only modifies @a hAlign and @a
 
802
        vAlign if this attribute does define a non-default alignment. This
 
803
        means that they must be initialized before calling this function and
 
804
        that their values will be preserved unchanged if they are different
 
805
        from wxALIGN_INVALID.
 
806
 
 
807
        For example, the following fragment can be used to use the cell
 
808
        alignment if one is defined but right-align its contents by default
 
809
        (instead of left-aligning it by default) while still using the default
 
810
        vertical alignment:
 
811
        @code
 
812
            int hAlign = wxALIGN_RIGHT,
 
813
                vAlign = wxALIGN_INVALID;
 
814
            attr.GetNonDefaultAlignment(&hAlign, &vAlign);
 
815
        @endcode
 
816
 
 
817
        @since 2.9.1
 
818
     */
 
819
    void GetNonDefaultAlignment(int *hAlign, int *vAlign) const;
 
820
 
 
821
    /**
 
822
        Returns the cell renderer.
 
823
    */
 
824
    wxGridCellRenderer* GetRenderer(const wxGrid* grid, int row, int col) const;
 
825
 
 
826
    /**
 
827
        Returns the text colour.
 
828
    */
 
829
    const wxColour& GetTextColour() const;
 
830
 
 
831
    /**
 
832
        Returns @true if this attribute has a valid alignment set.
 
833
    */
 
834
    bool HasAlignment() const;
 
835
 
 
836
    /**
 
837
        Returns @true if this attribute has a valid background colour set.
 
838
    */
 
839
    bool HasBackgroundColour() const;
 
840
 
 
841
    /**
 
842
        Returns @true if this attribute has a valid cell editor set.
 
843
    */
 
844
    bool HasEditor() const;
 
845
 
 
846
    /**
 
847
        Returns @true if this attribute has a valid font set.
 
848
    */
 
849
    bool HasFont() const;
 
850
 
 
851
    /**
 
852
        Returns @true if this attribute has a valid cell renderer set.
 
853
    */
 
854
    bool HasRenderer() const;
 
855
 
 
856
    /**
 
857
        Returns @true if this attribute has a valid text colour set.
 
858
    */
 
859
    bool HasTextColour() const;
 
860
 
 
861
    /**
 
862
        This class is reference counted: it is created with ref count of 1, so
 
863
        calling DecRef() once will delete it. Calling IncRef() allows to lock
 
864
        it until the matching DecRef() is called.
 
865
    */
 
866
    void IncRef();
 
867
 
 
868
    /**
 
869
        Returns @true if this cell is set as read-only.
 
870
    */
 
871
    bool IsReadOnly() const;
 
872
 
 
873
    /**
 
874
        Sets the alignment. @a hAlign can be one of @c wxALIGN_LEFT,
 
875
        @c wxALIGN_CENTRE or @c wxALIGN_RIGHT and @a vAlign can be one of
 
876
        @c wxALIGN_TOP, @c wxALIGN_CENTRE or @c wxALIGN_BOTTOM.
 
877
    */
 
878
    void SetAlignment(int hAlign, int vAlign);
 
879
 
 
880
    /**
 
881
        Sets the background colour.
 
882
    */
 
883
    void SetBackgroundColour(const wxColour& colBack);
 
884
 
 
885
    /**
 
886
        @todo Needs documentation.
 
887
    */
 
888
    void SetDefAttr(wxGridCellAttr* defAttr);
 
889
 
 
890
    /**
 
891
        Sets the editor to be used with the cells with this attribute.
 
892
    */
 
893
    void SetEditor(wxGridCellEditor* editor);
 
894
 
 
895
    /**
 
896
        Sets the font.
 
897
    */
 
898
    void SetFont(const wxFont& font);
 
899
 
 
900
    /**
 
901
        Sets the cell as read-only.
 
902
    */
 
903
    void SetReadOnly(bool isReadOnly = true);
 
904
 
 
905
    /**
 
906
        Sets the renderer to be used for cells with this attribute. Takes
 
907
        ownership of the pointer.
 
908
    */
 
909
    void SetRenderer(wxGridCellRenderer* renderer);
 
910
 
 
911
    /**
 
912
        Sets the text colour.
 
913
    */
 
914
    void SetTextColour(const wxColour& colText);
 
915
};
 
916
 
 
917
/**
 
918
    Base class for corner window renderer.
 
919
 
 
920
    This is the simplest of all header renderers and only has a single
 
921
    function.
 
922
 
 
923
    @see wxGridCellAttrProvider::GetCornerRenderer()
 
924
 
 
925
    @since 2.9.1
 
926
 */
 
927
class wxGridCornerHeaderRenderer
 
928
{
 
929
public:
 
930
    /**
 
931
        Called by the grid to draw the corner window border.
 
932
 
 
933
        This method is responsible for drawing the border inside the given @a
 
934
        rect and adjusting the rectangle size to correspond to the area inside
 
935
        the border, i.e. usually call wxRect::Deflate() to account for the
 
936
        border width.
 
937
 
 
938
        @param grid
 
939
            The grid whose corner window is being drawn.
 
940
        @param dc
 
941
            The device context to use for drawing.
 
942
        @param rect
 
943
            Input/output parameter which contains the border rectangle on input
 
944
            and should be updated to contain the area inside the border on
 
945
            function return.
 
946
     */
 
947
    virtual void DrawBorder(const wxGrid& grid,
 
948
                            wxDC& dc,
 
949
                            wxRect& rect) const = 0;
 
950
};
 
951
/**
 
952
    Common base class for row and column headers renderers.
 
953
 
 
954
    @see wxGridColumnHeaderRenderer, wxGridRowHeaderRenderer
 
955
 
 
956
    @since 2.9.1
 
957
 */
 
958
class wxGridHeaderLabelsRenderer : public wxGridCornerHeaderRenderer
 
959
{
 
960
public:
 
961
    /**
 
962
        Called by the grid to draw the specified label.
 
963
 
 
964
        Notice that the base class DrawBorder() method is called before this
 
965
        one.
 
966
 
 
967
        The default implementation uses wxGrid::GetLabelTextColour() and
 
968
        wxGrid::GetLabelFont() to draw the label.
 
969
     */
 
970
    virtual void DrawLabel(const wxGrid& grid,
 
971
                           wxDC& dc,
 
972
                           const wxString& value,
 
973
                           const wxRect& rect,
 
974
                           int horizAlign,
 
975
                           int vertAlign,
 
976
                           int textOrientation) const;
 
977
};
 
978
 
 
979
/**
 
980
    Base class for row headers renderer.
 
981
 
 
982
    This is the same as wxGridHeaderLabelsRenderer currently but we still use a
 
983
    separate class for it to distinguish it from wxGridColumnHeaderRenderer.
 
984
 
 
985
    @see wxGridRowHeaderRendererDefault
 
986
 
 
987
    @see wxGridCellAttrProvider::GetRowHeaderRenderer()
 
988
 
 
989
    @since 2.9.1
 
990
 */
 
991
class wxGridRowHeaderRenderer : public wxGridHeaderLabelsRenderer
 
992
{
 
993
};
 
994
 
 
995
/**
 
996
    Base class for column headers renderer.
 
997
 
 
998
    This is the same as wxGridHeaderLabelsRenderer currently but we still use a
 
999
    separate class for it to distinguish it from wxGridRowHeaderRenderer.
 
1000
 
 
1001
    @see wxGridColumnHeaderRendererDefault
 
1002
 
 
1003
    @see wxGridCellAttrProvider::GetColumnHeaderRenderer()
 
1004
 
 
1005
    @since 2.9.1
 
1006
 */
 
1007
class wxGridColumnHeaderRenderer : public wxGridHeaderLabelsRenderer
 
1008
{
 
1009
};
 
1010
 
 
1011
/**
 
1012
    Default row header renderer.
 
1013
 
 
1014
    You may derive from this class if you need to only override one of its
 
1015
    methods (i.e. either DrawLabel() or DrawBorder()) but continue to use the
 
1016
    default implementation for the other one.
 
1017
 
 
1018
    @see wxGridColumnHeaderRendererDefault
 
1019
 
 
1020
    @since 2.9.1
 
1021
 */
 
1022
class wxGridRowHeaderRendererDefault : public wxGridRowHeaderRenderer
 
1023
{
 
1024
public:
 
1025
    /// Implement border drawing for the row labels.
 
1026
    virtual void DrawBorder(const wxGrid& grid,
 
1027
                            wxDC& dc,
 
1028
                            wxRect& rect) const;
 
1029
};
 
1030
 
 
1031
/**
 
1032
    Default column header renderer.
 
1033
 
 
1034
    @see wxGridRowHeaderRendererDefault
 
1035
 
 
1036
    @since 2.9.1
 
1037
 */
 
1038
class wxGridColumnHeaderRendererDefault : public wxGridColumnHeaderRenderer
 
1039
{
 
1040
public:
 
1041
    /// Implement border drawing for the column labels.
 
1042
    virtual void DrawBorder(const wxGrid& grid,
 
1043
                            wxDC& dc,
 
1044
                            wxRect& rect) const;
 
1045
};
 
1046
 
 
1047
/**
 
1048
    Default corner window renderer.
 
1049
 
 
1050
    @see wxGridColumnHeaderRendererDefault, wxGridRowHeaderRendererDefault
 
1051
 
 
1052
    @since 2.9.1
 
1053
 */
 
1054
class wxGridCornerHeaderRendererDefault : public wxGridCornerHeaderRenderer
 
1055
{
 
1056
public:
 
1057
    /// Implement border drawing for the corner window.
 
1058
    virtual void DrawBorder(const wxGrid& grid,
 
1059
                            wxDC& dc,
 
1060
                            wxRect& rect) const;
 
1061
};
 
1062
 
 
1063
/**
 
1064
    Class providing attributes to be used for the grid cells.
 
1065
 
 
1066
    This class both defines an interface which grid cell attributes providers
 
1067
    should implement -- and which can be implemented differently in derived
 
1068
    classes -- and a default implementation of this interface which is often
 
1069
    good enough to be used without modification, especially with not very large
 
1070
    grids for which the efficiency of attributes storage hardly matters (see
 
1071
    the discussion below).
 
1072
 
 
1073
    An object of this class can be associated with a wxGrid using
 
1074
    wxGridTableBase::SetAttrProvider() but it's not necessary to call it if you
 
1075
    intend to use the default provider as it is used by wxGridTableBase by
 
1076
    default anyhow.
 
1077
 
 
1078
    Notice that while attributes provided by this class can be set for
 
1079
    individual cells using SetAttr() or the entire rows or columns using
 
1080
    SetRowAttr() and SetColAttr() they are always retrieved using GetAttr()
 
1081
    function.
 
1082
 
 
1083
 
 
1084
    The default implementation of this class stores the attributes passed to
 
1085
    its SetAttr(), SetRowAttr() and SetColAttr() in a straightforward way. A
 
1086
    derived class may use its knowledge about how the attributes are used in
 
1087
    your program to implement it much more efficiently: for example, using a
 
1088
    special background colour for all even-numbered rows can be implemented by
 
1089
    simply returning the same attribute from GetAttr() if the row number is
 
1090
    even instead of having to store N/2 row attributes where N is the total
 
1091
    number of rows in the grid.
 
1092
 
 
1093
    Notice that objects of this class can't be copied.
 
1094
 */
 
1095
class wxGridCellAttrProvider : public wxClientDataContainer
 
1096
{
 
1097
public:
 
1098
    /// Trivial default constructor.
 
1099
    wxGridCellAttrProvider();
 
1100
 
 
1101
    /// Destructor releases any attributes held by this class.
 
1102
    virtual ~wxGridCellAttrProvider();
 
1103
 
 
1104
    /**
 
1105
        Get the attribute to use for the specified cell.
 
1106
 
 
1107
        If wxGridCellAttr::Any is used as @a kind value, this function combines
 
1108
        the attributes set for this cell using SetAttr() and those for its row
 
1109
        or column (set with SetRowAttr() or SetColAttr() respectively), with
 
1110
        the cell attribute having the highest precedence.
 
1111
 
 
1112
        Notice that the caller must call DecRef() on the returned pointer if it
 
1113
        is non-@NULL.
 
1114
 
 
1115
        @param row
 
1116
            The row of the cell.
 
1117
        @param col
 
1118
            The column of the cell.
 
1119
        @param kind
 
1120
            The kind of the attribute to return.
 
1121
        @return
 
1122
            The attribute to use which should be DecRef()'d by caller or @NULL
 
1123
            if no attributes are defined for this cell.
 
1124
     */
 
1125
    virtual wxGridCellAttr *GetAttr(int row, int col,
 
1126
                                    wxGridCellAttr::wxAttrKind kind) const;
 
1127
 
 
1128
    /**
 
1129
        Setting attributes.
 
1130
 
 
1131
        All these functions take ownership of the attribute passed to them,
 
1132
        i.e. will call DecRef() on it themselves later and so it should not be
 
1133
        destroyed by the caller. And the attribute can be @NULL to reset a
 
1134
        previously set value.
 
1135
     */
 
1136
    //@{
 
1137
 
 
1138
    /// Set attribute for the specified cell.
 
1139
    virtual void SetAttr(wxGridCellAttr *attr, int row, int col);
 
1140
 
 
1141
    /// Set attribute for the specified row.
 
1142
    virtual void SetRowAttr(wxGridCellAttr *attr, int row);
 
1143
 
 
1144
    /// Set attribute for the specified column.
 
1145
    virtual void SetColAttr(wxGridCellAttr *attr, int col);
 
1146
 
 
1147
    //@}
 
1148
 
 
1149
    /**
 
1150
        Getting header renderers.
 
1151
 
 
1152
        These functions return the renderers for the given row or column header
 
1153
        label and the corner window. Unlike cell attributes, these objects are
 
1154
        not reference counted and are never @NULL so they are returned by
 
1155
        reference and not pointer and DecRef() shouldn't (and can't) be called
 
1156
        for them.
 
1157
 
 
1158
        All these functions were added in wxWidgets 2.9.1.
 
1159
     */
 
1160
    //@{
 
1161
 
 
1162
    /**
 
1163
        Return the renderer used for drawing column headers.
 
1164
 
 
1165
        By default wxGridColumnHeaderRendererDefault is returned.
 
1166
 
 
1167
        @see wxGrid::SetUseNativeColLabels(), wxGrid::UseNativeColHeader()
 
1168
 
 
1169
        @since 2.9.1
 
1170
     */
 
1171
    virtual const wxGridColumnHeaderRenderer& GetColumnHeaderRenderer(int col);
 
1172
 
 
1173
    /**
 
1174
        Return the renderer used for drawing row headers.
 
1175
 
 
1176
        By default wxGridRowHeaderRendererDefault is returned.
 
1177
 
 
1178
        @since 2.9.1
 
1179
     */
 
1180
    virtual const wxGridRowHeaderRenderer& GetRowHeaderRenderer(int row);
 
1181
 
 
1182
    /**
 
1183
        Return the renderer used for drawing the corner window.
 
1184
 
 
1185
        By default wxGridCornerHeaderRendererDefault is returned.
 
1186
 
 
1187
        @since 2.9.1
 
1188
     */
 
1189
    virtual const wxGridCornerHeaderRenderer& GetCornerRenderer();
 
1190
 
 
1191
    //@}
 
1192
};
 
1193
 
 
1194
/**
 
1195
    Represents coordinates of a grid cell.
 
1196
 
 
1197
    An object of this class is simply a (row, column) pair.
 
1198
 */
 
1199
class wxGridCellCoords
 
1200
{
 
1201
public:
 
1202
    /**
 
1203
        Default constructor initializes the object to invalid state.
 
1204
 
 
1205
        Initially the row and column are both invalid (-1) and so operator!()
 
1206
        for an uninitialized wxGridCellCoords returns false.
 
1207
     */
 
1208
    wxGridCellCoords();
 
1209
 
 
1210
    /**
 
1211
        Constructor taking a row and a column.
 
1212
     */
 
1213
    wxGridCellCoords(int row, int col);
 
1214
 
 
1215
    /**
 
1216
        Return the row of the coordinate.
 
1217
     */
 
1218
    int GetRow() const;
 
1219
 
 
1220
    /**
 
1221
        Set the row of the coordinate.
 
1222
     */
 
1223
    void SetRow(int n);
 
1224
 
 
1225
    /**
 
1226
        Return the column of the coordinate.
 
1227
     */
 
1228
    int GetCol() const;
 
1229
 
 
1230
    /**
 
1231
        Set the column of the coordinate.
 
1232
     */
 
1233
    void SetCol(int n);
 
1234
 
 
1235
    /**
 
1236
        Set the row and column of the coordinate.
 
1237
     */
 
1238
    void Set(int row, int col);
 
1239
 
 
1240
    /**
 
1241
        Assignment operator for coordinate types.
 
1242
     */
 
1243
    wxGridCellCoords& operator=(const wxGridCellCoords& other);
 
1244
 
 
1245
    /**
 
1246
        Equality operator.
 
1247
     */
 
1248
    bool operator==(const wxGridCellCoords& other) const;
 
1249
 
 
1250
    /**
 
1251
        Inequality operator.
 
1252
     */
 
1253
     bool operator!=(const wxGridCellCoords& other) const;
 
1254
 
 
1255
    /**
 
1256
        Checks whether the coordinates are invalid.
 
1257
 
 
1258
        Returns false only if both row and column are -1. Notice that if either
 
1259
        row or column (but not both) are -1, this method returns true even if
 
1260
        the object is invalid. This is done because objects in such state
 
1261
        should actually never exist, i.e. either both coordinates should be -1
 
1262
        or none of them should be -1.
 
1263
     */
 
1264
    bool operator!() const;
 
1265
};
 
1266
 
 
1267
/**
 
1268
    @class wxGridTableBase
 
1269
 
 
1270
    The almost abstract base class for grid tables.
 
1271
 
 
1272
    A grid table is responsible for storing the grid data and, indirectly, grid
 
1273
    cell attributes. The data can be stored in the way most convenient for the
 
1274
    application but has to be provided in string form to wxGrid. It is also
 
1275
    possible to provide cells values in other formats if appropriate, e.g. as
 
1276
    numbers.
 
1277
 
 
1278
    This base class is not quite abstract as it implements a trivial strategy
 
1279
    for storing the attributes by forwarding it to wxGridCellAttrProvider and
 
1280
    also provides stubs for some other functions. However it does have a number
 
1281
    of pure virtual methods which must be implemented in the derived classes.
 
1282
 
 
1283
    @see wxGridStringTable
 
1284
 
 
1285
    @library{wxadv}
 
1286
    @category{grid}
 
1287
*/
 
1288
class wxGridTableBase : public wxObject
 
1289
{
 
1290
public:
 
1291
    /**
 
1292
        Default constructor.
 
1293
     */
 
1294
    wxGridTableBase();
 
1295
 
 
1296
    /**
 
1297
        Destructor frees the attribute provider if it was created.
 
1298
     */
 
1299
    virtual ~wxGridTableBase();
 
1300
 
 
1301
    /**
 
1302
        Must be overridden to return the number of rows in the table.
 
1303
 
 
1304
        For backwards compatibility reasons, this method is not const.
 
1305
        Use GetRowsCount() instead of it in const methods of derived table
 
1306
        classes.
 
1307
     */
 
1308
    virtual int GetNumberRows() = 0;
 
1309
 
 
1310
    /**
 
1311
        Must be overridden to return the number of columns in the table.
 
1312
 
 
1313
        For backwards compatibility reasons, this method is not const.
 
1314
        Use GetColsCount() instead of it in const methods of derived table
 
1315
        classes,
 
1316
     */
 
1317
    virtual int GetNumberCols() = 0;
 
1318
 
 
1319
    /**
 
1320
        Return the number of rows in the table.
 
1321
 
 
1322
        This method is not virtual and is only provided as a convenience for
 
1323
        the derived classes which can't call GetNumberRows() without a
 
1324
        @c const_cast from their const methods.
 
1325
     */
 
1326
    int GetRowsCount() const;
 
1327
 
 
1328
    /**
 
1329
        Return the number of columns in the table.
 
1330
 
 
1331
        This method is not virtual and is only provided as a convenience for
 
1332
        the derived classes which can't call GetNumberCols() without a
 
1333
        @c const_cast from their const methods.
 
1334
     */
 
1335
    int GetColsCount() const;
 
1336
 
 
1337
 
 
1338
    /**
 
1339
        @name Table Cell Accessors
 
1340
     */
 
1341
    //@{
 
1342
 
 
1343
    /**
 
1344
        May be overridden to implement testing for empty cells.
 
1345
 
 
1346
        This method is used by the grid to test if the given cell is not used
 
1347
        and so whether a neighbouring cell may overflow into it. By default it
 
1348
        only returns true if the value of the given cell, as returned by
 
1349
        GetValue(), is empty.
 
1350
     */
 
1351
    virtual bool IsEmptyCell(int row, int col);
 
1352
 
 
1353
    /**
 
1354
        Same as IsEmptyCell() but taking wxGridCellCoords.
 
1355
 
 
1356
        Notice that this method is not virtual, only IsEmptyCell() should be
 
1357
        overridden.
 
1358
     */
 
1359
    bool IsEmpty(const wxGridCellCoords& coords);
 
1360
 
 
1361
    /**
 
1362
        Must be overridden to implement accessing the table values as text.
 
1363
     */
 
1364
    virtual wxString GetValue(int row, int col) = 0;
 
1365
 
 
1366
    /**
 
1367
        Must be overridden to implement setting the table values as text.
 
1368
     */
 
1369
    virtual void SetValue(int row, int col, const wxString& value) = 0;
 
1370
 
 
1371
    /**
 
1372
        Returns the type of the value in the given cell.
 
1373
 
 
1374
        By default all cells are strings and this method returns
 
1375
        @c wxGRID_VALUE_STRING.
 
1376
     */
 
1377
    virtual wxString GetTypeName(int row, int col);
 
1378
 
 
1379
    /**
 
1380
        Returns true if the value of the given cell can be accessed as if it
 
1381
        were of the specified type.
 
1382
 
 
1383
        By default the cells can only be accessed as strings. Note that a cell
 
1384
        could be accessible in different ways, e.g. a numeric cell may return
 
1385
        @true for @c wxGRID_VALUE_NUMBER but also for @c wxGRID_VALUE_STRING
 
1386
        indicating that the value can be coerced to a string form.
 
1387
     */
 
1388
    virtual bool CanGetValueAs(int row, int col, const wxString& typeName);
 
1389
 
 
1390
    /**
 
1391
        Returns true if the value of the given cell can be set as if it were of
 
1392
        the specified type.
 
1393
 
 
1394
        @see CanGetValueAs()
 
1395
     */
 
1396
    virtual bool CanSetValueAs(int row, int col, const wxString& typeName);
 
1397
 
 
1398
    /**
 
1399
        Returns the value of the given cell as a long.
 
1400
 
 
1401
        This should only be called if CanGetValueAs() returns @true when called
 
1402
        with @c wxGRID_VALUE_NUMBER argument. Default implementation always
 
1403
        return 0.
 
1404
     */
 
1405
    virtual long GetValueAsLong(int row, int col);
 
1406
 
 
1407
    /**
 
1408
        Returns the value of the given cell as a double.
 
1409
 
 
1410
        This should only be called if CanGetValueAs() returns @true when called
 
1411
        with @c wxGRID_VALUE_FLOAT argument. Default implementation always
 
1412
        return 0.0.
 
1413
     */
 
1414
    virtual double GetValueAsDouble(int row, int col);
 
1415
 
 
1416
    /**
 
1417
        Returns the value of the given cell as a boolean.
 
1418
 
 
1419
        This should only be called if CanGetValueAs() returns @true when called
 
1420
        with @c wxGRID_VALUE_BOOL argument. Default implementation always
 
1421
        return false.
 
1422
     */
 
1423
    virtual bool GetValueAsBool(int row, int col);
 
1424
 
 
1425
    /**
 
1426
        Returns the value of the given cell as a user-defined type.
 
1427
 
 
1428
        This should only be called if CanGetValueAs() returns @true when called
 
1429
        with @a typeName. Default implementation always return @NULL.
 
1430
     */
 
1431
    virtual void *GetValueAsCustom(int row, int col, const wxString& typeName);
 
1432
 
 
1433
    /**
 
1434
        Sets the value of the given cell as a long.
 
1435
 
 
1436
        This should only be called if CanSetValueAs() returns @true when called
 
1437
        with @c wxGRID_VALUE_NUMBER argument. Default implementation doesn't do
 
1438
        anything.
 
1439
     */
 
1440
    virtual void SetValueAsLong(int row, int col, long value);
 
1441
 
 
1442
    /**
 
1443
        Sets the value of the given cell as a double.
 
1444
 
 
1445
        This should only be called if CanSetValueAs() returns @true when called
 
1446
        with @c wxGRID_VALUE_FLOAT argument. Default implementation doesn't do
 
1447
        anything.
 
1448
     */
 
1449
    virtual void SetValueAsDouble(int row, int col, double value);
 
1450
 
 
1451
    /**
 
1452
        Sets the value of the given cell as a boolean.
 
1453
 
 
1454
        This should only be called if CanSetValueAs() returns @true when called
 
1455
        with @c wxGRID_VALUE_BOOL argument. Default implementation doesn't do
 
1456
        anything.
 
1457
     */
 
1458
    virtual void SetValueAsBool( int row, int col, bool value );
 
1459
 
 
1460
    /**
 
1461
        Sets the value of the given cell as a user-defined type.
 
1462
 
 
1463
        This should only be called if CanSetValueAs() returns @true when called
 
1464
        with @a typeName. Default implementation doesn't do anything.
 
1465
     */
 
1466
    virtual void SetValueAsCustom(int row, int col, const wxString& typeName,
 
1467
                                  void *value);
 
1468
 
 
1469
    //@}
 
1470
 
 
1471
 
 
1472
    /**
 
1473
        Called by the grid when the table is associated with it.
 
1474
 
 
1475
        The default implementation stores the pointer and returns it from its
 
1476
        GetView() and so only makes sense if the table cannot be associated
 
1477
        with more than one grid at a time.
 
1478
     */
 
1479
    virtual void SetView(wxGrid *grid);
 
1480
 
 
1481
    /**
 
1482
        Returns the last grid passed to SetView().
 
1483
     */
 
1484
    virtual wxGrid *GetView() const;
 
1485
 
 
1486
 
 
1487
    /**
 
1488
        @name Table Structure Modifiers
 
1489
 
 
1490
        Notice that none of these functions are pure virtual as they don't have
 
1491
        to be implemented if the table structure is never modified after
 
1492
        creation, i.e. neither rows nor columns are never added or deleted but
 
1493
        that you do need to implement them if they are called, i.e. if your
 
1494
        code either calls them directly or uses the matching wxGrid methods, as
 
1495
        by default they simply do nothing which is definitely inappropriate.
 
1496
     */
 
1497
    //@{
 
1498
 
 
1499
    /**
 
1500
        Clear the table contents.
 
1501
 
 
1502
        This method is used by wxGrid::ClearGrid().
 
1503
     */
 
1504
    virtual void Clear();
 
1505
 
 
1506
    /**
 
1507
        Insert additional rows into the table.
 
1508
 
 
1509
        @param pos
 
1510
            The position of the first new row.
 
1511
        @param numRows
 
1512
            The number of rows to insert.
 
1513
     */
 
1514
    virtual bool InsertRows(size_t pos = 0, size_t numRows = 1);
 
1515
 
 
1516
    /**
 
1517
        Append additional rows at the end of the table.
 
1518
 
 
1519
        This method is provided in addition to InsertRows() as some data models
 
1520
        may only support appending rows to them but not inserting them at
 
1521
        arbitrary locations. In such case you may implement this method only
 
1522
        and leave InsertRows() unimplemented.
 
1523
 
 
1524
        @param numRows
 
1525
            The number of rows to add.
 
1526
     */
 
1527
    virtual bool AppendRows(size_t numRows = 1);
 
1528
 
 
1529
    /**
 
1530
        Delete rows from the table.
 
1531
 
 
1532
        Notice that currently deleting a row intersecting a multi-cell (see
 
1533
        SetCellSize()) is not supported and will result in a crash.
 
1534
 
 
1535
        @param pos
 
1536
            The first row to delete.
 
1537
        @param numRows
 
1538
            The number of rows to delete.
 
1539
     */
 
1540
    virtual bool DeleteRows(size_t pos = 0, size_t numRows = 1);
 
1541
 
 
1542
    /**
 
1543
        Exactly the same as InsertRows() but for columns.
 
1544
     */
 
1545
    virtual bool InsertCols(size_t pos = 0, size_t numCols = 1);
 
1546
 
 
1547
    /**
 
1548
        Exactly the same as AppendRows() but for columns.
 
1549
     */
 
1550
    virtual bool AppendCols(size_t numCols = 1);
 
1551
 
 
1552
    /**
 
1553
        Exactly the same as DeleteRows() but for columns.
 
1554
     */
 
1555
    virtual bool DeleteCols(size_t pos = 0, size_t numCols = 1);
 
1556
 
 
1557
    //@}
 
1558
 
 
1559
    /**
 
1560
        @name Table Row and Column Labels
 
1561
 
 
1562
        By default the numbers are used for labeling rows and Latin letters for
 
1563
        labeling columns. If the table has more than 26 columns, the pairs of
 
1564
        letters are used starting from the 27-th one and so on, i.e. the
 
1565
        sequence of labels is A, B, ..., Z, AA, AB, ..., AZ, BA, ..., ..., ZZ,
 
1566
        AAA, ...
 
1567
     */
 
1568
    //@{
 
1569
 
 
1570
    /**
 
1571
        Return the label of the specified row.
 
1572
     */
 
1573
    virtual wxString GetRowLabelValue(int row);
 
1574
 
 
1575
    /**
 
1576
        Return the label of the specified column.
 
1577
     */
 
1578
    virtual wxString GetColLabelValue(int col);
 
1579
 
 
1580
    /**
 
1581
        Set the given label for the specified row.
 
1582
 
 
1583
        The default version does nothing, i.e. the label is not stored. You
 
1584
        must override this method in your derived class if you wish
 
1585
        wxGrid::SetRowLabelValue() to work.
 
1586
     */
 
1587
    virtual void SetRowLabelValue(int row, const wxString& label);
 
1588
 
 
1589
    /**
 
1590
        Exactly the same as SetRowLabelValue() but for columns.
 
1591
     */
 
1592
    virtual void SetColLabelValue(int col, const wxString& label);
 
1593
 
 
1594
    //@}
 
1595
 
 
1596
 
 
1597
    /**
 
1598
        @name Attributes Management
 
1599
 
 
1600
        By default the attributes management is delegated to
 
1601
        wxGridCellAttrProvider class. You may override the methods in this
 
1602
        section to handle the attributes directly if, for example, they can be
 
1603
        computed from the cell values.
 
1604
     */
 
1605
    //@{
 
1606
 
 
1607
    /**
 
1608
        Associate this attributes provider with the table.
 
1609
 
 
1610
        The table takes ownership of @a attrProvider pointer and will delete it
 
1611
        when it doesn't need it any more. The pointer can be @NULL, however
 
1612
        this won't disable attributes management in the table but will just
 
1613
        result in a default attributes being recreated the next time any of the
 
1614
        other functions in this section is called. To completely disable the
 
1615
        attributes support, should this be needed, you need to override
 
1616
        CanHaveAttributes() to return @false.
 
1617
     */
 
1618
    void SetAttrProvider(wxGridCellAttrProvider *attrProvider);
 
1619
 
 
1620
    /**
 
1621
        Returns the attribute provider currently being used.
 
1622
 
 
1623
        This function may return @NULL if the attribute provider hasn't been
 
1624
        neither associated with this table by SetAttrProvider() nor created on
 
1625
        demand by any other methods.
 
1626
     */
 
1627
    wxGridCellAttrProvider *GetAttrProvider() const;
 
1628
 
 
1629
    /**
 
1630
        Return the attribute for the given cell.
 
1631
 
 
1632
        By default this function is simply forwarded to
 
1633
        wxGridCellAttrProvider::GetAttr() but it may be overridden to handle
 
1634
        attributes directly in the table.
 
1635
     */
 
1636
    virtual wxGridCellAttr *GetAttr(int row, int col,
 
1637
                                    wxGridCellAttr::wxAttrKind kind);
 
1638
 
 
1639
    /**
 
1640
        Set attribute of the specified cell.
 
1641
 
 
1642
        By default this function is simply forwarded to
 
1643
        wxGridCellAttrProvider::SetAttr().
 
1644
 
 
1645
        The table takes ownership of @a attr, i.e. will call DecRef() on it.
 
1646
     */
 
1647
    virtual void SetAttr(wxGridCellAttr* attr, int row, int col);
 
1648
 
 
1649
    /**
 
1650
        Set attribute of the specified row.
 
1651
 
 
1652
        By default this function is simply forwarded to
 
1653
        wxGridCellAttrProvider::SetRowAttr().
 
1654
 
 
1655
        The table takes ownership of @a attr, i.e. will call DecRef() on it.
 
1656
     */
 
1657
    virtual void SetRowAttr(wxGridCellAttr *attr, int row);
 
1658
 
 
1659
    /**
 
1660
        Set attribute of the specified column.
 
1661
 
 
1662
        By default this function is simply forwarded to
 
1663
        wxGridCellAttrProvider::SetColAttr().
 
1664
 
 
1665
        The table takes ownership of @a attr, i.e. will call DecRef() on it.
 
1666
     */
 
1667
    virtual void SetColAttr(wxGridCellAttr *attr, int col);
 
1668
 
 
1669
    //@}
 
1670
 
 
1671
    /**
 
1672
        Returns true if this table supports attributes or false otherwise.
 
1673
 
 
1674
        By default, the table automatically creates a wxGridCellAttrProvider
 
1675
        when this function is called if it had no attribute provider before and
 
1676
        returns @true.
 
1677
     */
 
1678
    virtual bool CanHaveAttributes();
 
1679
};
 
1680
 
 
1681
/**
 
1682
    @class wxGridSizesInfo
 
1683
 
 
1684
    wxGridSizesInfo stores information about sizes of all wxGrid rows or
 
1685
    columns.
 
1686
 
 
1687
    It assumes that most of the rows or columns (which are both called elements
 
1688
    here as the difference between them doesn't matter at this class level)
 
1689
    have the default size and so stores it separately. And it uses a wxHashMap
 
1690
    to store the sizes of all elements which have the non-default size.
 
1691
 
 
1692
    This structure is particularly useful for serializing the sizes of all
 
1693
    wxGrid elements at once.
 
1694
 
 
1695
    @library{wxadv}
 
1696
    @category{grid}
 
1697
 */
 
1698
struct wxGridSizesInfo
 
1699
{
 
1700
    /**
 
1701
        Default constructor.
 
1702
 
 
1703
        m_sizeDefault and m_customSizes must be initialized later.
 
1704
     */
 
1705
    wxGridSizesInfo();
 
1706
 
 
1707
    /**
 
1708
        Constructor.
 
1709
 
 
1710
        This constructor is used by wxGrid::GetRowSizes() and GetColSizes()
 
1711
        methods. User code will usually use the default constructor instead.
 
1712
 
 
1713
        @param defSize
 
1714
            The default element size.
 
1715
        @param allSizes
 
1716
            Array containing the sizes of @em all elements, including those
 
1717
            which have the default size.
 
1718
     */
 
1719
    wxGridSizesInfo(int defSize, const wxArrayInt& allSizes);
 
1720
 
 
1721
    /**
 
1722
        Get the element size.
 
1723
 
 
1724
        @param pos
 
1725
            The index of the element.
 
1726
        @return
 
1727
            The size for this element, using m_customSizes if @a pos is in it
 
1728
            or m_sizeDefault otherwise.
 
1729
     */
 
1730
    int GetSize(unsigned pos) const;
 
1731
 
 
1732
 
 
1733
    /// Default size
 
1734
    int m_sizeDefault;
 
1735
 
 
1736
    /**
 
1737
        Map with element indices as keys and their sizes as values.
 
1738
 
 
1739
        This map only contains the elements with non-default size.
 
1740
     */
 
1741
    wxUnsignedToIntHashMap m_customSizes;
 
1742
};
 
1743
 
 
1744
 
 
1745
/**
 
1746
    @class wxGrid
 
1747
 
 
1748
    wxGrid and its related classes are used for displaying and editing tabular
 
1749
    data. They provide a rich set of features for display, editing, and
 
1750
    interacting with a variety of data sources. For simple applications, and to
 
1751
    help you get started, wxGrid is the only class you need to refer to
 
1752
    directly. It will set up default instances of the other classes and manage
 
1753
    them for you. For more complex applications you can derive your own classes
 
1754
    for custom grid views, grid data tables, cell editors and renderers. The
 
1755
    @ref overview_grid has examples of simple and more complex applications,
 
1756
    explains the relationship between the various grid classes and has a
 
1757
    summary of the keyboard shortcuts and mouse functions provided by wxGrid.
 
1758
 
 
1759
    A wxGridTableBase class holds the actual data to be displayed by a wxGrid
 
1760
    class. One or more wxGrid classes may act as a view for one table class.
 
1761
    The default table class is called wxGridStringTable and holds an array of
 
1762
    strings. An instance of such a class is created by CreateGrid().
 
1763
 
 
1764
    wxGridCellRenderer is the abstract base class for rendering contents in a
 
1765
    cell. The following renderers are predefined:
 
1766
 
 
1767
    - wxGridCellBoolRenderer
 
1768
    - wxGridCellFloatRenderer
 
1769
    - wxGridCellNumberRenderer
 
1770
    - wxGridCellStringRenderer
 
1771
 
 
1772
    The look of a cell can be further defined using wxGridCellAttr. An object
 
1773
    of this type may be returned by wxGridTableBase::GetAttr().
 
1774
 
 
1775
    wxGridCellEditor is the abstract base class for editing the value of a
 
1776
    cell. The following editors are predefined:
 
1777
 
 
1778
    - wxGridCellBoolEditor
 
1779
    - wxGridCellChoiceEditor
 
1780
    - wxGridCellFloatEditor
 
1781
    - wxGridCellNumberEditor
 
1782
    - wxGridCellTextEditor
 
1783
 
 
1784
    Please see wxGridEvent, wxGridSizeEvent, wxGridRangeSelectEvent, and
 
1785
    wxGridEditorCreatedEvent for the documentation of all event types you can
 
1786
    use with wxGrid.
 
1787
 
 
1788
    @library{wxadv}
 
1789
    @category{grid}
 
1790
 
 
1791
    @see @ref overview_grid, wxGridUpdateLocker
 
1792
*/
 
1793
class wxGrid : public wxScrolledWindow
 
1794
{
 
1795
public:
 
1796
 
 
1797
    /**
 
1798
        Different selection modes supported by the grid.
 
1799
     */
 
1800
    enum wxGridSelectionModes
 
1801
    {
 
1802
        /**
 
1803
            The default selection mode allowing selection of the individual
 
1804
            cells as well as of the entire rows and columns.
 
1805
         */
 
1806
        wxGridSelectCells,
 
1807
 
 
1808
        /**
 
1809
            The selection mode allowing the selection of the entire rows only.
 
1810
 
 
1811
            The user won't be able to select any cells or columns in this mode.
 
1812
         */
 
1813
        wxGridSelectRows,
 
1814
 
 
1815
        /**
 
1816
            The selection mode allowing the selection of the entire columns only.
 
1817
 
 
1818
            The user won't be able to select any cells or rows in this mode.
 
1819
         */
 
1820
        wxGridSelectColumns,
 
1821
 
 
1822
        /**
 
1823
            The selection mode allowing the user to select either the entire
 
1824
            columns or the entire rows but not individual cells nor blocks.
 
1825
 
 
1826
            Notice that while this constant is defined as @code
 
1827
            wxGridSelectColumns | wxGridSelectRows @endcode this doesn't mean
 
1828
            that all the other combinations are valid -- at least currently
 
1829
            they are not.
 
1830
 
 
1831
            @since 2.9.1
 
1832
         */
 
1833
        wxGridSelectRowsOrColumns
 
1834
    };
 
1835
 
 
1836
    /**
 
1837
        Return values for GetCellSize().
 
1838
 
 
1839
        @since 2.9.1
 
1840
     */
 
1841
    enum CellSpan
 
1842
    {
 
1843
        /// This cell is inside a span covered by another cell.
 
1844
        CellSpan_Inside = -1,
 
1845
 
 
1846
        /// This is a normal, non-spanning cell.
 
1847
        CellSpan_None = 0,
 
1848
 
 
1849
        /// This cell spans several physical wxGrid cells.
 
1850
        CellSpan_Main
 
1851
    };
 
1852
 
 
1853
    /**
 
1854
        Rendering styles supported by wxGrid::Render() method.
 
1855
 
 
1856
        @since 2.9.4
 
1857
     */
 
1858
    enum wxGridRenderStyle
 
1859
    {
 
1860
        /// Draw grid row header labels.
 
1861
        wxGRID_DRAW_ROWS_HEADER = 0x001,
 
1862
 
 
1863
        /// Draw grid column header labels.
 
1864
        wxGRID_DRAW_COLS_HEADER = 0x002,
 
1865
 
 
1866
        /// Draw grid cell border lines.
 
1867
        wxGRID_DRAW_CELL_LINES = 0x004,
 
1868
 
 
1869
        /**
 
1870
            Draw a bounding rectangle around the rendered cell area.
 
1871
 
 
1872
            Useful where row or column headers are not drawn or where there is
 
1873
            multi row or column cell clipping and therefore no cell border at
 
1874
            the rendered outer boundary.
 
1875
        */
 
1876
        wxGRID_DRAW_BOX_RECT = 0x008,
 
1877
 
 
1878
        /**
 
1879
            Draw the grid cell selection highlight if a selection is present.
 
1880
 
 
1881
            At present the highlight colour drawn depends on whether the grid
 
1882
            window loses focus before drawing begins.
 
1883
        */
 
1884
        wxGRID_DRAW_SELECTION = 0x010,
 
1885
 
 
1886
        /**
 
1887
            The default render style.
 
1888
 
 
1889
            Includes all except wxGRID_DRAW_SELECTION.
 
1890
         */
 
1891
        wxGRID_DRAW_DEFAULT = wxGRID_DRAW_ROWS_HEADER |
 
1892
                              wxGRID_DRAW_COLS_HEADER |
 
1893
                              wxGRID_DRAW_CELL_LINES |
 
1894
                              wxGRID_DRAW_BOX_RECT
 
1895
    };
 
1896
 
 
1897
    /**
 
1898
        @name Constructors and Initialization
 
1899
     */
 
1900
    //@{
 
1901
 
 
1902
    /**
 
1903
        Default constructor.
 
1904
 
 
1905
        You must call Create() to really create the grid window and also call
 
1906
        CreateGrid() or SetTable() to initialize the grid contents.
 
1907
     */
 
1908
    wxGrid();
 
1909
    /**
 
1910
        Constructor creating the grid window.
 
1911
 
 
1912
        You must call either CreateGrid() or SetTable() to initialize the grid
 
1913
        contents before using it.
 
1914
    */
 
1915
    wxGrid(wxWindow* parent, wxWindowID id,
 
1916
           const wxPoint& pos = wxDefaultPosition,
 
1917
           const wxSize& size = wxDefaultSize,
 
1918
           long style = wxWANTS_CHARS,
 
1919
           const wxString& name = wxGridNameStr);
 
1920
 
 
1921
    /**
 
1922
        Destructor.
 
1923
 
 
1924
        This will also destroy the associated grid table unless you passed a
 
1925
        table object to the grid and specified that the grid should not take
 
1926
        ownership of the table (see SetTable()).
 
1927
    */
 
1928
    virtual ~wxGrid();
 
1929
 
 
1930
    /**
 
1931
        Creates the grid window for an object initialized using the default
 
1932
        constructor.
 
1933
 
 
1934
        You must call either CreateGrid() or SetTable() to initialize the grid
 
1935
        contents before using it.
 
1936
     */
 
1937
    bool Create(wxWindow* parent, wxWindowID id,
 
1938
                const wxPoint& pos = wxDefaultPosition,
 
1939
                const wxSize& size = wxDefaultSize,
 
1940
                long style = wxWANTS_CHARS,
 
1941
                const wxString& name = wxGridNameStr);
 
1942
 
 
1943
    /**
 
1944
        Creates a grid with the specified initial number of rows and columns.
 
1945
 
 
1946
        Call this directly after the grid constructor. When you use this
 
1947
        function wxGrid will create and manage a simple table of string values
 
1948
        for you. All of the grid data will be stored in memory.
 
1949
 
 
1950
        For applications with more complex data types or relationships, or for
 
1951
        dealing with very large datasets, you should derive your own grid table
 
1952
        class and pass a table object to the grid with SetTable().
 
1953
    */
 
1954
    bool CreateGrid(int numRows, int numCols,
 
1955
                    wxGridSelectionModes selmode = wxGridSelectCells);
 
1956
 
 
1957
    /**
 
1958
        Passes a pointer to a custom grid table to be used by the grid.
 
1959
 
 
1960
        This should be called after the grid constructor and before using the
 
1961
        grid object. If @a takeOwnership is set to @true then the table will be
 
1962
        deleted by the wxGrid destructor.
 
1963
 
 
1964
        Use this function instead of CreateGrid() when your application
 
1965
        involves complex or non-string data or data sets that are too large to
 
1966
        fit wholly in memory.
 
1967
    */
 
1968
    bool SetTable(wxGridTableBase* table, bool takeOwnership = false,
 
1969
                  wxGridSelectionModes selmode = wxGridSelectCells);
 
1970
 
 
1971
    //@}
 
1972
 
 
1973
 
 
1974
    /**
 
1975
        @name Grid Line Formatting
 
1976
     */
 
1977
    //@{
 
1978
 
 
1979
    /**
 
1980
        Turns the drawing of grid lines on or off.
 
1981
    */
 
1982
    void EnableGridLines(bool enable = true);
 
1983
 
 
1984
    /**
 
1985
        Returns the pen used for vertical grid lines.
 
1986
 
 
1987
        This virtual function may be overridden in derived classes in order to
 
1988
        change the appearance of individual grid lines for the given column
 
1989
        @a col.
 
1990
 
 
1991
        See GetRowGridLinePen() for an example.
 
1992
    */
 
1993
    virtual wxPen GetColGridLinePen(int col);
 
1994
 
 
1995
    /**
 
1996
        Returns the pen used for grid lines.
 
1997
 
 
1998
        This virtual function may be overridden in derived classes in order to
 
1999
        change the appearance of grid lines. Note that currently the pen width
 
2000
        must be 1.
 
2001
 
 
2002
        @see GetColGridLinePen(), GetRowGridLinePen()
 
2003
    */
 
2004
    virtual wxPen GetDefaultGridLinePen();
 
2005
 
 
2006
    /**
 
2007
        Returns the colour used for grid lines.
 
2008
 
 
2009
        @see GetDefaultGridLinePen()
 
2010
    */
 
2011
    wxColour GetGridLineColour() const;
 
2012
 
 
2013
    /**
 
2014
        Returns the pen used for horizontal grid lines.
 
2015
 
 
2016
        This virtual function may be overridden in derived classes in order to
 
2017
        change the appearance of individual grid line for the given @a row.
 
2018
 
 
2019
        Example:
 
2020
        @code
 
2021
        // in a grid displaying music notation, use a solid black pen between
 
2022
        // octaves (C0=row 127, C1=row 115 etc.)
 
2023
        wxPen MidiGrid::GetRowGridLinePen(int row)
 
2024
        {
 
2025
            if ( row % 12 == 7 )
 
2026
                return wxPen(*wxBLACK, 1, wxSOLID);
 
2027
            else
 
2028
                return GetDefaultGridLinePen();
 
2029
        }
 
2030
        @endcode
 
2031
    */
 
2032
    virtual wxPen GetRowGridLinePen(int row);
 
2033
 
 
2034
    /**
 
2035
        Returns @true if drawing of grid lines is turned on, @false otherwise.
 
2036
    */
 
2037
    bool GridLinesEnabled() const;
 
2038
 
 
2039
    /**
 
2040
        Sets the colour used to draw grid lines.
 
2041
    */
 
2042
    void SetGridLineColour(const wxColour& colour);
 
2043
 
 
2044
    //@}
 
2045
 
 
2046
 
 
2047
    /**
 
2048
        @name Label Values and Formatting
 
2049
     */
 
2050
    //@{
 
2051
 
 
2052
    /**
 
2053
        Sets the arguments to the current column label alignment values.
 
2054
 
 
2055
        Horizontal alignment will be one of @c wxALIGN_LEFT, @c wxALIGN_CENTRE
 
2056
        or @c wxALIGN_RIGHT.
 
2057
 
 
2058
        Vertical alignment will be one of @c wxALIGN_TOP, @c wxALIGN_CENTRE or
 
2059
        @c wxALIGN_BOTTOM.
 
2060
    */
 
2061
    void GetColLabelAlignment(int* horiz, int* vert) const;
 
2062
 
 
2063
    /**
 
2064
        Returns the orientation of the column labels (either @c wxHORIZONTAL or
 
2065
        @c wxVERTICAL).
 
2066
    */
 
2067
    int GetColLabelTextOrientation() const;
 
2068
 
 
2069
    /**
 
2070
        Returns the specified column label.
 
2071
 
 
2072
        The default grid table class provides column labels of the form
 
2073
        A,B...Z,AA,AB...ZZ,AAA... If you are using a custom grid table you can
 
2074
        override wxGridTableBase::GetColLabelValue() to provide your own
 
2075
        labels.
 
2076
    */
 
2077
    wxString GetColLabelValue(int col) const;
 
2078
 
 
2079
    /**
 
2080
        Returns the colour used for the background of row and column labels.
 
2081
    */
 
2082
    wxColour GetLabelBackgroundColour() const;
 
2083
 
 
2084
    /**
 
2085
        Returns the font used for row and column labels.
 
2086
    */
 
2087
    wxFont GetLabelFont() const;
 
2088
 
 
2089
    /**
 
2090
        Returns the colour used for row and column label text.
 
2091
    */
 
2092
    wxColour GetLabelTextColour() const;
 
2093
 
 
2094
    /**
 
2095
        Returns the alignment used for row labels.
 
2096
 
 
2097
        Horizontal alignment will be one of @c wxALIGN_LEFT, @c wxALIGN_CENTRE
 
2098
        or @c wxALIGN_RIGHT.
 
2099
 
 
2100
        Vertical alignment will be one of @c wxALIGN_TOP, @c wxALIGN_CENTRE or
 
2101
        @c wxALIGN_BOTTOM.
 
2102
    */
 
2103
    void GetRowLabelAlignment(int* horiz, int* vert) const;
 
2104
 
 
2105
    /**
 
2106
        Returns the specified row label.
 
2107
 
 
2108
        The default grid table class provides numeric row labels. If you are
 
2109
        using a custom grid table you can override
 
2110
        wxGridTableBase::GetRowLabelValue() to provide your own labels.
 
2111
    */
 
2112
    wxString GetRowLabelValue(int row) const;
 
2113
 
 
2114
    /**
 
2115
        Hides the column labels by calling SetColLabelSize() with a size of 0.
 
2116
        Show labels again by calling that method with a width greater than 0.
 
2117
    */
 
2118
    void HideColLabels();
 
2119
 
 
2120
    /**
 
2121
        Hides the row labels by calling SetRowLabelSize() with a size of 0.
 
2122
 
 
2123
        The labels can be shown again by calling SetRowLabelSize() with a width
 
2124
        greater than 0.
 
2125
    */
 
2126
    void HideRowLabels();
 
2127
 
 
2128
    /**
 
2129
        Sets the horizontal and vertical alignment of column label text.
 
2130
 
 
2131
        Horizontal alignment should be one of @c wxALIGN_LEFT,
 
2132
        @c wxALIGN_CENTRE or @c wxALIGN_RIGHT. Vertical alignment should be one
 
2133
        of @c wxALIGN_TOP, @c wxALIGN_CENTRE or @c wxALIGN_BOTTOM.
 
2134
    */
 
2135
    void SetColLabelAlignment(int horiz, int vert);
 
2136
 
 
2137
    /**
 
2138
        Sets the orientation of the column labels (either @c wxHORIZONTAL or
 
2139
        @c wxVERTICAL).
 
2140
    */
 
2141
    void SetColLabelTextOrientation(int textOrientation);
 
2142
 
 
2143
    /**
 
2144
        Set the value for the given column label.
 
2145
 
 
2146
        If you are using a custom grid table you must override
 
2147
        wxGridTableBase::SetColLabelValue() for this to have any effect.
 
2148
    */
 
2149
    void SetColLabelValue(int col, const wxString& value);
 
2150
 
 
2151
    /**
 
2152
        Sets the background colour for row and column labels.
 
2153
    */
 
2154
    void SetLabelBackgroundColour(const wxColour& colour);
 
2155
 
 
2156
    /**
 
2157
        Sets the font for row and column labels.
 
2158
    */
 
2159
    void SetLabelFont(const wxFont& font);
 
2160
 
 
2161
    /**
 
2162
        Sets the colour for row and column label text.
 
2163
    */
 
2164
    void SetLabelTextColour(const wxColour& colour);
 
2165
 
 
2166
    /**
 
2167
        Sets the horizontal and vertical alignment of row label text.
 
2168
 
 
2169
        Horizontal alignment should be one of @c wxALIGN_LEFT,
 
2170
        @c wxALIGN_CENTRE or @c wxALIGN_RIGHT. Vertical alignment should be one
 
2171
        of @c wxALIGN_TOP, @c wxALIGN_CENTRE or @c wxALIGN_BOTTOM.
 
2172
    */
 
2173
    void SetRowLabelAlignment(int horiz, int vert);
 
2174
 
 
2175
    /**
 
2176
        Sets the value for the given row label.
 
2177
 
 
2178
        If you are using a derived grid table you must override
 
2179
        wxGridTableBase::SetRowLabelValue() for this to have any effect.
 
2180
    */
 
2181
    void SetRowLabelValue(int row, const wxString& value);
 
2182
 
 
2183
    /**
 
2184
        Call this in order to make the column labels use a native look by using
 
2185
        wxRendererNative::DrawHeaderButton() internally.
 
2186
 
 
2187
        There is no equivalent method for drawing row columns as there is not
 
2188
        native look for that. This option is useful when using wxGrid for
 
2189
        displaying tables and not as a spread-sheet.
 
2190
 
 
2191
        @see UseNativeColHeader()
 
2192
    */
 
2193
    void SetUseNativeColLabels(bool native = true);
 
2194
 
 
2195
    /**
 
2196
        Enable the use of native header window for column labels.
 
2197
 
 
2198
        If this function is called with @true argument, a wxHeaderCtrl is used
 
2199
        instead to display the column labels instead of drawing them in wxGrid
 
2200
        code itself. This has the advantage of making the grid look and feel
 
2201
        perfectly the same as native applications (using SetUseNativeColLabels()
 
2202
        the grid can be made to look more natively but it still doesn't feel
 
2203
        natively, notably the column resizing and dragging still works slightly
 
2204
        differently as it is implemented in wxWidgets itself) but results in
 
2205
        different behaviour for column and row headers, for which there is no
 
2206
        equivalent function, and, most importantly, is unsuitable for grids
 
2207
        with huge numbers of columns as wxHeaderCtrl doesn't support virtual
 
2208
        mode. Because of this, by default the grid does not use the native
 
2209
        header control but you should call this function to enable it if you
 
2210
        are using the grid to display tabular data and don't have thousands of
 
2211
        columns in it.
 
2212
 
 
2213
        Another difference between the default behaviour and the native header
 
2214
        behaviour is that the latter provides the user with a context menu
 
2215
        (which appears on right clicking the header) allowing to rearrange the
 
2216
        grid columns if CanDragColMove() returns @true. If you want to prevent
 
2217
        this from happening for some reason, you need to define a handler for
 
2218
        @c wxEVT_GRID_LABEL_RIGHT_CLICK event which simply does nothing (in
 
2219
        particular doesn't skip the event) as this will prevent the default
 
2220
        right click handling from working.
 
2221
 
 
2222
        Also note that currently @c wxEVT_GRID_LABEL_RIGHT_DCLICK event is not
 
2223
        generated for the column labels if the native columns header is used
 
2224
        (but this limitation could possibly be lifted in the future).
 
2225
     */
 
2226
    void UseNativeColHeader(bool native = true);
 
2227
 
 
2228
    //@}
 
2229
 
 
2230
 
 
2231
    /**
 
2232
        @name Cell Formatting
 
2233
 
 
2234
        Note that wxGridCellAttr can be used alternatively to most of these
 
2235
        methods. See the "Attributes Management" of wxGridTableBase.
 
2236
     */
 
2237
    //@{
 
2238
 
 
2239
    /**
 
2240
        Sets the arguments to the horizontal and vertical text alignment values
 
2241
        for the grid cell at the specified location.
 
2242
 
 
2243
        Horizontal alignment will be one of @c wxALIGN_LEFT, @c wxALIGN_CENTRE
 
2244
        or @c wxALIGN_RIGHT.
 
2245
 
 
2246
        Vertical alignment will be one of @c wxALIGN_TOP, @c wxALIGN_CENTRE or
 
2247
        @c wxALIGN_BOTTOM.
 
2248
    */
 
2249
    void GetCellAlignment(int row, int col, int* horiz, int* vert) const;
 
2250
 
 
2251
    /**
 
2252
        Returns the background colour of the cell at the specified location.
 
2253
    */
 
2254
    wxColour GetCellBackgroundColour(int row, int col) const;
 
2255
 
 
2256
    /**
 
2257
        Returns the font for text in the grid cell at the specified location.
 
2258
    */
 
2259
    wxFont GetCellFont(int row, int col) const;
 
2260
 
 
2261
    /**
 
2262
        Returns the text colour for the grid cell at the specified location.
 
2263
    */
 
2264
    wxColour GetCellTextColour(int row, int col) const;
 
2265
 
 
2266
    /**
 
2267
        Returns the default cell alignment.
 
2268
 
 
2269
        Horizontal alignment will be one of @c wxALIGN_LEFT, @c wxALIGN_CENTRE
 
2270
        or @c wxALIGN_RIGHT.
 
2271
 
 
2272
        Vertical alignment will be one of @c wxALIGN_TOP, @c wxALIGN_CENTRE or
 
2273
        @c wxALIGN_BOTTOM.
 
2274
 
 
2275
        @see SetDefaultCellAlignment()
 
2276
    */
 
2277
    void GetDefaultCellAlignment(int* horiz, int* vert) const;
 
2278
 
 
2279
    /**
 
2280
        Returns the current default background colour for grid cells.
 
2281
    */
 
2282
    wxColour GetDefaultCellBackgroundColour() const;
 
2283
 
 
2284
    /**
 
2285
        Returns the current default font for grid cell text.
 
2286
    */
 
2287
    wxFont GetDefaultCellFont() const;
 
2288
 
 
2289
    /**
 
2290
        Returns the current default colour for grid cell text.
 
2291
    */
 
2292
    wxColour GetDefaultCellTextColour() const;
 
2293
 
 
2294
    /**
 
2295
        Sets the horizontal and vertical alignment for grid cell text at the
 
2296
        specified location.
 
2297
 
 
2298
        Horizontal alignment should be one of @c wxALIGN_LEFT,
 
2299
        @c wxALIGN_CENTRE or @c wxALIGN_RIGHT.
 
2300
 
 
2301
        Vertical alignment should be one of @c wxALIGN_TOP, @c wxALIGN_CENTRE
 
2302
        or @c wxALIGN_BOTTOM.
 
2303
    */
 
2304
    void SetCellAlignment(int row, int col, int horiz, int vert);
 
2305
    /**
 
2306
        Sets the horizontal and vertical alignment for grid cell text at the
 
2307
        specified location.
 
2308
 
 
2309
        Horizontal alignment should be one of @c wxALIGN_LEFT,
 
2310
        @c wxALIGN_CENTRE or @c wxALIGN_RIGHT.
 
2311
 
 
2312
        Vertical alignment should be one of @c wxALIGN_TOP, @c wxALIGN_CENTRE
 
2313
        or @c wxALIGN_BOTTOM.
 
2314
    */
 
2315
    void SetCellAlignment(int align, int row, int col);
 
2316
 
 
2317
    /**
 
2318
        Set the background colour for the given cell or all cells by default.
 
2319
    */
 
2320
    void SetCellBackgroundColour(int row, int col, const wxColour& colour);
 
2321
 
 
2322
    /**
 
2323
        Sets the font for text in the grid cell at the specified location.
 
2324
    */
 
2325
    void SetCellFont(int row, int col, const wxFont& font);
 
2326
 
 
2327
    /**
 
2328
        Sets the text colour for the given cell.
 
2329
    */
 
2330
    void SetCellTextColour(int row, int col, const wxColour& colour);
 
2331
    /**
 
2332
        Sets the text colour for the given cell.
 
2333
    */
 
2334
    void SetCellTextColour(const wxColour& val, int row, int col);
 
2335
    /**
 
2336
        Sets the text colour for all cells by default.
 
2337
    */
 
2338
    void SetCellTextColour(const wxColour& colour);
 
2339
 
 
2340
    /**
 
2341
        Sets the default horizontal and vertical alignment for grid cell text.
 
2342
 
 
2343
        Horizontal alignment should be one of @c wxALIGN_LEFT,
 
2344
        @c wxALIGN_CENTRE or @c wxALIGN_RIGHT. Vertical alignment should be one
 
2345
        of @c wxALIGN_TOP, @c wxALIGN_CENTRE or @c wxALIGN_BOTTOM.
 
2346
    */
 
2347
    void SetDefaultCellAlignment(int horiz, int vert);
 
2348
 
 
2349
    /**
 
2350
        Sets the default background colour for grid cells.
 
2351
    */
 
2352
    void SetDefaultCellBackgroundColour(const wxColour& colour);
 
2353
 
 
2354
    /**
 
2355
        Sets the default font to be used for grid cell text.
 
2356
    */
 
2357
    void SetDefaultCellFont(const wxFont& font);
 
2358
 
 
2359
    /**
 
2360
        Sets the current default colour for grid cell text.
 
2361
    */
 
2362
    void SetDefaultCellTextColour(const wxColour& colour);
 
2363
 
 
2364
    //@}
 
2365
 
 
2366
 
 
2367
    /**
 
2368
        @name Cell Values, Editors, and Renderers
 
2369
 
 
2370
        Note that wxGridCellAttr can be used alternatively to most of these
 
2371
        methods. See the "Attributes Management" of wxGridTableBase.
 
2372
     */
 
2373
    //@{
 
2374
 
 
2375
    /**
 
2376
        Returns @true if the in-place edit control for the current grid cell
 
2377
        can be used and @false otherwise.
 
2378
 
 
2379
        This function always returns @false for the read-only cells.
 
2380
    */
 
2381
    bool CanEnableCellControl() const;
 
2382
 
 
2383
    /**
 
2384
        Disables in-place editing of grid cells.
 
2385
 
 
2386
        Equivalent to calling EnableCellEditControl(@false).
 
2387
    */
 
2388
    void DisableCellEditControl();
 
2389
 
 
2390
    /**
 
2391
        Enables or disables in-place editing of grid cell data.
 
2392
 
 
2393
        The grid will issue either a @c wxEVT_GRID_EDITOR_SHOWN or
 
2394
        @c wxEVT_GRID_EDITOR_HIDDEN event.
 
2395
    */
 
2396
    void EnableCellEditControl(bool enable = true);
 
2397
 
 
2398
    /**
 
2399
        Makes the grid globally editable or read-only.
 
2400
 
 
2401
        If the edit argument is @false this function sets the whole grid as
 
2402
        read-only. If the argument is @true the grid is set to the default
 
2403
        state where cells may be editable. In the default state you can set
 
2404
        single grid cells and whole rows and columns to be editable or
 
2405
        read-only via wxGridCellAttr::SetReadOnly(). For single cells you
 
2406
        can also use the shortcut function SetReadOnly().
 
2407
 
 
2408
        For more information about controlling grid cell attributes see the
 
2409
        wxGridCellAttr class and the @ref overview_grid.
 
2410
    */
 
2411
    void EnableEditing(bool edit);
 
2412
 
 
2413
    /**
 
2414
        Returns a pointer to the editor for the cell at the specified location.
 
2415
 
 
2416
        See wxGridCellEditor and the @ref overview_grid for more information
 
2417
        about cell editors and renderers.
 
2418
 
 
2419
        The caller must call DecRef() on the returned pointer.
 
2420
    */
 
2421
    wxGridCellEditor* GetCellEditor(int row, int col) const;
 
2422
 
 
2423
    /**
 
2424
        Returns a pointer to the renderer for the grid cell at the specified
 
2425
        location.
 
2426
 
 
2427
        See wxGridCellRenderer and the @ref overview_grid for more information
 
2428
        about cell editors and renderers.
 
2429
 
 
2430
        The caller must call DecRef() on the returned pointer.
 
2431
    */
 
2432
    wxGridCellRenderer* GetCellRenderer(int row, int col) const;
 
2433
 
 
2434
    /**
 
2435
        Returns the string contained in the cell at the specified location.
 
2436
 
 
2437
        For simple applications where a grid object automatically uses a
 
2438
        default grid table of string values you use this function together with
 
2439
        SetCellValue() to access cell values. For more complex applications
 
2440
        where you have derived your own grid table class that contains various
 
2441
        data types (e.g. numeric, boolean or user-defined custom types) then
 
2442
        you only use this function for those cells that contain string values.
 
2443
 
 
2444
        See wxGridTableBase::CanGetValueAs() and the @ref overview_grid for
 
2445
        more information.
 
2446
    */
 
2447
    wxString GetCellValue(int row, int col) const;
 
2448
    /**
 
2449
        Returns the string contained in the cell at the specified location.
 
2450
 
 
2451
        For simple applications where a grid object automatically uses a
 
2452
        default grid table of string values you use this function together with
 
2453
        SetCellValue() to access cell values. For more complex applications
 
2454
        where you have derived your own grid table class that contains various
 
2455
        data types (e.g. numeric, boolean or user-defined custom types) then
 
2456
        you only use this function for those cells that contain string values.
 
2457
 
 
2458
        See wxGridTableBase::CanGetValueAs() and the @ref overview_grid for
 
2459
        more information.
 
2460
    */
 
2461
    wxString GetCellValue(const wxGridCellCoords& coords) const;
 
2462
 
 
2463
    /**
 
2464
        Returns a pointer to the current default grid cell editor.
 
2465
 
 
2466
        See wxGridCellEditor and the @ref overview_grid for more information
 
2467
        about cell editors and renderers.
 
2468
    */
 
2469
    wxGridCellEditor* GetDefaultEditor() const;
 
2470
 
 
2471
    /**
 
2472
        Returns the default editor for the specified cell.
 
2473
 
 
2474
        The base class version returns the editor appropriate for the current
 
2475
        cell type but this method may be overridden in the derived classes to
 
2476
        use custom editors for some cells by default.
 
2477
 
 
2478
        Notice that the same may be achieved in a usually simpler way by
 
2479
        associating a custom editor with the given cell or cells.
 
2480
 
 
2481
        The caller must call DecRef() on the returned pointer.
 
2482
    */
 
2483
    virtual wxGridCellEditor* GetDefaultEditorForCell(int row, int col) const;
 
2484
    /**
 
2485
        Returns the default editor for the specified cell.
 
2486
 
 
2487
        The base class version returns the editor appropriate for the current
 
2488
        cell type but this method may be overridden in the derived classes to
 
2489
        use custom editors for some cells by default.
 
2490
 
 
2491
        Notice that the same may be achieved in a usually simpler way by
 
2492
        associating a custom editor with the given cell or cells.
 
2493
 
 
2494
        The caller must call DecRef() on the returned pointer.
 
2495
    */
 
2496
    wxGridCellEditor* GetDefaultEditorForCell(const wxGridCellCoords& c) const;
 
2497
 
 
2498
    /**
 
2499
        Returns the default editor for the cells containing values of the given
 
2500
        type.
 
2501
 
 
2502
        The base class version returns the editor which was associated with the
 
2503
        specified @a typeName when it was registered RegisterDataType() but
 
2504
        this function may be overridden to return something different. This
 
2505
        allows to override an editor used for one of the standard types.
 
2506
 
 
2507
        The caller must call DecRef() on the returned pointer.
 
2508
    */
 
2509
    virtual wxGridCellEditor* GetDefaultEditorForType(const wxString& typeName) const;
 
2510
 
 
2511
    /**
 
2512
        Returns a pointer to the current default grid cell renderer.
 
2513
 
 
2514
        See wxGridCellRenderer and the @ref overview_grid for more information
 
2515
        about cell editors and renderers.
 
2516
 
 
2517
        The caller must call DecRef() on the returned pointer.
 
2518
    */
 
2519
    wxGridCellRenderer* GetDefaultRenderer() const;
 
2520
 
 
2521
    /**
 
2522
        Returns the default renderer for the given cell.
 
2523
 
 
2524
        The base class version returns the renderer appropriate for the current
 
2525
        cell type but this method may be overridden in the derived classes to
 
2526
        use custom renderers for some cells by default.
 
2527
 
 
2528
        The caller must call DecRef() on the returned pointer.
 
2529
    */
 
2530
    virtual wxGridCellRenderer* GetDefaultRendererForCell(int row, int col) const;
 
2531
 
 
2532
    /**
 
2533
        Returns the default renderer for the cell containing values of the
 
2534
        given type.
 
2535
 
 
2536
        @see GetDefaultEditorForType()
 
2537
    */
 
2538
    virtual wxGridCellRenderer* GetDefaultRendererForType(const wxString& typeName) const;
 
2539
 
 
2540
    /**
 
2541
        Hides the in-place cell edit control.
 
2542
    */
 
2543
    void HideCellEditControl();
 
2544
 
 
2545
    /**
 
2546
        Returns @true if the in-place edit control is currently enabled.
 
2547
    */
 
2548
    bool IsCellEditControlEnabled() const;
 
2549
 
 
2550
    /**
 
2551
        Returns @true if the current cell is read-only.
 
2552
 
 
2553
        @see SetReadOnly(), IsReadOnly()
 
2554
    */
 
2555
    bool IsCurrentCellReadOnly() const;
 
2556
 
 
2557
    /**
 
2558
        Returns @false if the whole grid has been set as read-only or @true
 
2559
        otherwise.
 
2560
 
 
2561
        See EnableEditing() for more information about controlling the editing
 
2562
        status of grid cells.
 
2563
    */
 
2564
    bool IsEditable() const;
 
2565
 
 
2566
    /**
 
2567
        Returns @true if the cell at the specified location can't be edited.
 
2568
 
 
2569
        @see SetReadOnly(), IsCurrentCellReadOnly()
 
2570
    */
 
2571
    bool IsReadOnly(int row, int col) const;
 
2572
 
 
2573
    /**
 
2574
        Register a new data type.
 
2575
 
 
2576
        The data types allow to naturally associate specific renderers and
 
2577
        editors to the cells containing values of the given type. For example,
 
2578
        the grid automatically registers a data type with the name
 
2579
        @c wxGRID_VALUE_STRING which uses wxGridCellStringRenderer and
 
2580
        wxGridCellTextEditor as its renderer and editor respectively -- this is
 
2581
        the data type used by all the cells of the default wxGridStringTable,
 
2582
        so this renderer and editor are used by default for all grid cells.
 
2583
 
 
2584
        However if a custom table returns @c wxGRID_VALUE_BOOL from its
 
2585
        wxGridTableBase::GetTypeName() method, then wxGridCellBoolRenderer and
 
2586
        wxGridCellBoolEditor are used for it because the grid also registers a
 
2587
        boolean data type with this name.
 
2588
 
 
2589
        And as this mechanism is completely generic, you may register your own
 
2590
        data types using your own custom renderers and editors. Just remember
 
2591
        that the table must identify a cell as being of the given type for them
 
2592
        to be used for this cell.
 
2593
 
 
2594
        @param typeName
 
2595
            Name of the new type. May be any string, but if the type name is
 
2596
            the same as the name of an already registered type, including one
 
2597
            of the standard ones (which are @c wxGRID_VALUE_STRING, @c
 
2598
            wxGRID_VALUE_BOOL, @c wxGRID_VALUE_NUMBER, @c wxGRID_VALUE_FLOAT
 
2599
            and @c wxGRID_VALUE_CHOICE), then the new registration information
 
2600
            replaces the previously used renderer and editor.
 
2601
        @param renderer
 
2602
            The renderer to use for the cells of this type. Its ownership is
 
2603
            taken by the grid, i.e. it will call DecRef() on this pointer when
 
2604
            it doesn't need it any longer.
 
2605
        @param editor
 
2606
            The editor to use for the cells of this type. Its ownership is also
 
2607
            taken by the grid.
 
2608
    */
 
2609
    void RegisterDataType(const wxString& typeName,
 
2610
                          wxGridCellRenderer* renderer,
 
2611
                          wxGridCellEditor* editor);
 
2612
 
 
2613
    /**
 
2614
        Sets the value of the current grid cell to the current in-place edit
 
2615
        control value.
 
2616
 
 
2617
        This is called automatically when the grid cursor moves from the
 
2618
        current cell to a new cell. It is also a good idea to call this
 
2619
        function when closing a grid since any edits to the final cell location
 
2620
        will not be saved otherwise.
 
2621
    */
 
2622
    void SaveEditControlValue();
 
2623
 
 
2624
    /**
 
2625
        Sets the editor for the grid cell at the specified location.
 
2626
 
 
2627
        The grid will take ownership of the pointer.
 
2628
 
 
2629
        See wxGridCellEditor and the @ref overview_grid for more information
 
2630
        about cell editors and renderers.
 
2631
    */
 
2632
    void SetCellEditor(int row, int col, wxGridCellEditor* editor);
 
2633
 
 
2634
    /**
 
2635
        Sets the renderer for the grid cell at the specified location.
 
2636
 
 
2637
        The grid will take ownership of the pointer.
 
2638
 
 
2639
        See wxGridCellRenderer and the @ref overview_grid for more information
 
2640
        about cell editors and renderers.
 
2641
    */
 
2642
    void SetCellRenderer(int row, int col, wxGridCellRenderer* renderer);
 
2643
 
 
2644
    /**
 
2645
        Sets the string value for the cell at the specified location.
 
2646
 
 
2647
        For simple applications where a grid object automatically uses a
 
2648
        default grid table of string values you use this function together with
 
2649
        GetCellValue() to access cell values. For more complex applications
 
2650
        where you have derived your own grid table class that contains various
 
2651
        data types (e.g. numeric, boolean or user-defined custom types) then
 
2652
        you only use this function for those cells that contain string values.
 
2653
 
 
2654
        See wxGridTableBase::CanSetValueAs() and the @ref overview_grid for
 
2655
        more information.
 
2656
    */
 
2657
    void SetCellValue(int row, int col, const wxString& s);
 
2658
    /**
 
2659
        Sets the string value for the cell at the specified location.
 
2660
 
 
2661
        For simple applications where a grid object automatically uses a
 
2662
        default grid table of string values you use this function together with
 
2663
        GetCellValue() to access cell values. For more complex applications
 
2664
        where you have derived your own grid table class that contains various
 
2665
        data types (e.g. numeric, boolean or user-defined custom types) then
 
2666
        you only use this function for those cells that contain string values.
 
2667
 
 
2668
        See wxGridTableBase::CanSetValueAs() and the @ref overview_grid for
 
2669
        more information.
 
2670
    */
 
2671
    void SetCellValue(const wxGridCellCoords& coords, const wxString& s);
 
2672
    /**
 
2673
        @deprecated Please use SetCellValue(int,int,const wxString&) or
 
2674
                    SetCellValue(const wxGridCellCoords&,const wxString&)
 
2675
                    instead.
 
2676
 
 
2677
        Sets the string value for the cell at the specified location.
 
2678
 
 
2679
        For simple applications where a grid object automatically uses a
 
2680
        default grid table of string values you use this function together with
 
2681
        GetCellValue() to access cell values. For more complex applications
 
2682
        where you have derived your own grid table class that contains various
 
2683
        data types (e.g. numeric, boolean or user-defined custom types) then
 
2684
        you only use this function for those cells that contain string values.
 
2685
 
 
2686
        See wxGridTableBase::CanSetValueAs() and the @ref overview_grid for
 
2687
        more information.
 
2688
    */
 
2689
    void SetCellValue(const wxString& val, int row, int col);
 
2690
 
 
2691
    /**
 
2692
        Sets the specified column to display boolean values.
 
2693
 
 
2694
        @see SetColFormatCustom()
 
2695
    */
 
2696
    void SetColFormatBool(int col);
 
2697
 
 
2698
    /**
 
2699
        Sets the specified column to display data in a custom format.
 
2700
 
 
2701
        This method provides an alternative to defining a custom grid table
 
2702
        which would return @a typeName from its GetTypeName() method for the
 
2703
        cells in this column: while it doesn't really change the type of the
 
2704
        cells in this column, it does associate the renderer and editor used
 
2705
        for the cells of the specified type with them.
 
2706
 
 
2707
        See the @ref overview_grid for more information on working with custom
 
2708
        data types.
 
2709
    */
 
2710
    void SetColFormatCustom(int col, const wxString& typeName);
 
2711
 
 
2712
    /**
 
2713
        Sets the specified column to display floating point values with the
 
2714
        given width and precision.
 
2715
 
 
2716
        @see SetColFormatCustom()
 
2717
    */
 
2718
    void SetColFormatFloat(int col, int width = -1, int precision = -1);
 
2719
 
 
2720
    /**
 
2721
        Sets the specified column to display integer values.
 
2722
 
 
2723
        @see SetColFormatCustom()
 
2724
    */
 
2725
    void SetColFormatNumber(int col);
 
2726
 
 
2727
    /**
 
2728
        Sets the default editor for grid cells.
 
2729
 
 
2730
        The grid will take ownership of the pointer.
 
2731
 
 
2732
        See wxGridCellEditor and the @ref overview_grid for more information
 
2733
        about cell editors and renderers.
 
2734
    */
 
2735
    void SetDefaultEditor(wxGridCellEditor* editor);
 
2736
 
 
2737
    /**
 
2738
        Sets the default renderer for grid cells.
 
2739
 
 
2740
        The grid will take ownership of the pointer.
 
2741
 
 
2742
        See wxGridCellRenderer and the @ref overview_grid for more information
 
2743
        about cell editors and renderers.
 
2744
    */
 
2745
    void SetDefaultRenderer(wxGridCellRenderer* renderer);
 
2746
 
 
2747
    /**
 
2748
        Makes the cell at the specified location read-only or editable.
 
2749
 
 
2750
        @see IsReadOnly()
 
2751
    */
 
2752
    void SetReadOnly(int row, int col, bool isReadOnly = true);
 
2753
 
 
2754
    /**
 
2755
        Displays the in-place cell edit control for the current cell.
 
2756
    */
 
2757
    void ShowCellEditControl();
 
2758
 
 
2759
    //@}
 
2760
 
 
2761
 
 
2762
    /**
 
2763
        @name Column and Row Sizes
 
2764
 
 
2765
        @see @ref overview_grid_resizing
 
2766
     */
 
2767
    //@{
 
2768
 
 
2769
    /**
 
2770
        Automatically sets the height and width of all rows and columns to fit
 
2771
        their contents.
 
2772
    */
 
2773
    void AutoSize();
 
2774
 
 
2775
    /**
 
2776
        Automatically adjusts width of the column to fit its label.
 
2777
    */
 
2778
    void AutoSizeColLabelSize(int col);
 
2779
 
 
2780
    /**
 
2781
        Automatically sizes the column to fit its contents. If @a setAsMin is
 
2782
        @true the calculated width will also be set as the minimal width for
 
2783
        the column.
 
2784
    */
 
2785
    void AutoSizeColumn(int col, bool setAsMin = true);
 
2786
 
 
2787
    /**
 
2788
        Automatically sizes all columns to fit their contents. If @a setAsMin
 
2789
        is @true the calculated widths will also be set as the minimal widths
 
2790
        for the columns.
 
2791
    */
 
2792
    void AutoSizeColumns(bool setAsMin = true);
 
2793
 
 
2794
    /**
 
2795
        Automatically sizes the row to fit its contents. If @a setAsMin is
 
2796
        @true the calculated height will also be set as the minimal height for
 
2797
        the row.
 
2798
    */
 
2799
    void AutoSizeRow(int row, bool setAsMin = true);
 
2800
 
 
2801
    /**
 
2802
        Automatically adjusts height of the row to fit its label.
 
2803
    */
 
2804
    void AutoSizeRowLabelSize(int col);
 
2805
 
 
2806
    /**
 
2807
        Automatically sizes all rows to fit their contents. If @a setAsMin is
 
2808
        @true the calculated heights will also be set as the minimal heights
 
2809
        for the rows.
 
2810
    */
 
2811
    void AutoSizeRows(bool setAsMin = true);
 
2812
 
 
2813
    /**
 
2814
        Returns the current height of the column labels.
 
2815
    */
 
2816
    int GetColLabelSize() const;
 
2817
 
 
2818
    /**
 
2819
        Returns the minimal width to which a column may be resized.
 
2820
 
 
2821
        Use SetColMinimalAcceptableWidth() to change this value globally or
 
2822
        SetColMinimalWidth() to do it for individual columns.
 
2823
 
 
2824
        @see GetRowMinimalAcceptableHeight()
 
2825
    */
 
2826
    int GetColMinimalAcceptableWidth() const;
 
2827
 
 
2828
    /**
 
2829
        Returns the width of the specified column.
 
2830
    */
 
2831
    int GetColSize(int col) const;
 
2832
 
 
2833
    /**
 
2834
        Returns @true if the specified column is not currently hidden.
 
2835
     */
 
2836
    bool IsColShown(int col) const;
 
2837
 
 
2838
    /**
 
2839
        Returns the default height for column labels.
 
2840
    */
 
2841
    int GetDefaultColLabelSize() const;
 
2842
 
 
2843
    /**
 
2844
        Returns the current default width for grid columns.
 
2845
    */
 
2846
    int GetDefaultColSize() const;
 
2847
 
 
2848
    /**
 
2849
        Returns the default width for the row labels.
 
2850
    */
 
2851
    int GetDefaultRowLabelSize() const;
 
2852
 
 
2853
    /**
 
2854
        Returns the current default height for grid rows.
 
2855
    */
 
2856
    int GetDefaultRowSize() const;
 
2857
 
 
2858
    /**
 
2859
        Returns the minimal size to which rows can be resized.
 
2860
 
 
2861
        Use SetRowMinimalAcceptableHeight() to change this value globally or
 
2862
        SetRowMinimalHeight() to do it for individual cells.
 
2863
 
 
2864
        @see GetColMinimalAcceptableWidth()
 
2865
    */
 
2866
    int GetRowMinimalAcceptableHeight() const;
 
2867
 
 
2868
    /**
 
2869
        Returns the current width of the row labels.
 
2870
    */
 
2871
    int GetRowLabelSize() const;
 
2872
 
 
2873
    /**
 
2874
        Returns the height of the specified row.
 
2875
    */
 
2876
    int GetRowSize(int row) const;
 
2877
 
 
2878
    /**
 
2879
        Returns @true if the specified row is not currently hidden.
 
2880
     */
 
2881
    bool IsRowShown(int row) const;
 
2882
 
 
2883
    /**
 
2884
        Sets the height of the column labels.
 
2885
 
 
2886
        If @a height equals to @c wxGRID_AUTOSIZE then height is calculated
 
2887
        automatically so that no label is truncated. Note that this could be
 
2888
        slow for a large table.
 
2889
    */
 
2890
    void SetColLabelSize(int height);
 
2891
 
 
2892
    /**
 
2893
        Sets the minimal @a width to which the user can resize columns.
 
2894
 
 
2895
        @see GetColMinimalAcceptableWidth()
 
2896
    */
 
2897
    void SetColMinimalAcceptableWidth(int width);
 
2898
 
 
2899
    /**
 
2900
        Sets the minimal @a width for the specified column @a col.
 
2901
 
 
2902
        It is usually best to call this method during grid creation as calling
 
2903
        it later will not resize the column to the given minimal width even if
 
2904
        it is currently narrower than it.
 
2905
 
 
2906
        @a width must be greater than the minimal acceptable column width as
 
2907
        returned by GetColMinimalAcceptableWidth().
 
2908
    */
 
2909
    void SetColMinimalWidth(int col, int width);
 
2910
 
 
2911
    /**
 
2912
        Sets the width of the specified column.
 
2913
 
 
2914
        @param col
 
2915
            The column index.
 
2916
        @param width
 
2917
            The new column width in pixels, 0 to hide the column or -1 to fit
 
2918
            the column width to its label width.
 
2919
    */
 
2920
    void SetColSize(int col, int width);
 
2921
 
 
2922
    /**
 
2923
        Hides the specified column.
 
2924
 
 
2925
        To show the column later you need to call SetColSize() with non-0
 
2926
        width or ShowCol().
 
2927
 
 
2928
        @param col
 
2929
            The column index.
 
2930
     */
 
2931
    void HideCol(int col);
 
2932
 
 
2933
    /**
 
2934
        Shows the previously hidden column by resizing it to non-0 size.
 
2935
 
 
2936
        @see HideCol(), SetColSize()
 
2937
     */
 
2938
    void ShowCol(int col);
 
2939
 
 
2940
 
 
2941
    /**
 
2942
        Sets the default width for columns in the grid.
 
2943
 
 
2944
        This will only affect columns subsequently added to the grid unless
 
2945
        @a resizeExistingCols is @true.
 
2946
 
 
2947
        If @a width is less than GetColMinimalAcceptableWidth(), then the
 
2948
        minimal acceptable width is used instead of it.
 
2949
    */
 
2950
    void SetDefaultColSize(int width, bool resizeExistingCols = false);
 
2951
 
 
2952
    /**
 
2953
        Sets the default height for rows in the grid.
 
2954
 
 
2955
        This will only affect rows subsequently added to the grid unless
 
2956
        @a resizeExistingRows is @true.
 
2957
 
 
2958
        If @a height is less than GetRowMinimalAcceptableHeight(), then the
 
2959
        minimal acceptable height is used instead of it.
 
2960
    */
 
2961
    void SetDefaultRowSize(int height, bool resizeExistingRows = false);
 
2962
 
 
2963
    /**
 
2964
        Sets the width of the row labels.
 
2965
 
 
2966
        If @a width equals @c wxGRID_AUTOSIZE then width is calculated
 
2967
        automatically so that no label is truncated. Note that this could be
 
2968
        slow for a large table.
 
2969
    */
 
2970
    void SetRowLabelSize(int width);
 
2971
 
 
2972
    /**
 
2973
        Sets the minimal row @a height used by default.
 
2974
 
 
2975
        See SetColMinimalAcceptableWidth() for more information.
 
2976
    */
 
2977
    void SetRowMinimalAcceptableHeight(int height);
 
2978
 
 
2979
    /**
 
2980
        Sets the minimal @a height for the specified @a row.
 
2981
 
 
2982
        See SetColMinimalWidth() for more information.
 
2983
    */
 
2984
    void SetRowMinimalHeight(int row, int height);
 
2985
 
 
2986
    /**
 
2987
        Sets the height of the specified row.
 
2988
 
 
2989
        See SetColSize() for more information.
 
2990
    */
 
2991
    void SetRowSize(int row, int height);
 
2992
 
 
2993
    /**
 
2994
        Hides the specified row.
 
2995
 
 
2996
        To show the row later you need to call SetRowSize() with non-0
 
2997
        width or ShowRow().
 
2998
 
 
2999
        @param col
 
3000
            The row index.
 
3001
     */
 
3002
    void HideRow(int col);
 
3003
 
 
3004
    /**
 
3005
        Shows the previously hidden row by resizing it to non-0 size.
 
3006
 
 
3007
        @see HideRow(), SetRowSize()
 
3008
     */
 
3009
    void ShowRow(int col);
 
3010
 
 
3011
    /**
 
3012
        Get size information for all columns at once.
 
3013
 
 
3014
        This method is useful when the information about all column widths
 
3015
        needs to be saved. The widths can be later restored using
 
3016
        SetColSizes().
 
3017
 
 
3018
        @sa wxGridSizesInfo, GetRowSizes()
 
3019
     */
 
3020
    wxGridSizesInfo GetColSizes() const;
 
3021
 
 
3022
    /**
 
3023
        Get size information for all row at once.
 
3024
 
 
3025
        @sa wxGridSizesInfo, GetColSizes()
 
3026
     */
 
3027
    wxGridSizesInfo GetRowSizes() const;
 
3028
 
 
3029
    /**
 
3030
        Restore all columns sizes.
 
3031
 
 
3032
        This is usually called with wxGridSizesInfo object previously returned
 
3033
        by GetColSizes().
 
3034
 
 
3035
        @sa SetRowSizes()
 
3036
     */
 
3037
    void SetColSizes(const wxGridSizesInfo& sizeInfo);
 
3038
 
 
3039
    /**
 
3040
        Restore all rows sizes.
 
3041
 
 
3042
        @sa SetColSizes()
 
3043
     */
 
3044
    void SetRowSizes(const wxGridSizesInfo& sizeInfo);
 
3045
 
 
3046
    /**
 
3047
        Set the size of the cell.
 
3048
 
 
3049
        Specifying a value of more than 1 in @a num_rows or @a num_cols will
 
3050
        make the cell at (@a row, @a col) span the block of the specified size,
 
3051
        covering the other cells which would be normally shown in it. Passing 1
 
3052
        for both arguments resets the cell to normal appearance.
 
3053
 
 
3054
        @see GetCellSize()
 
3055
 
 
3056
        @param row
 
3057
            The row of the cell.
 
3058
        @param col
 
3059
            The column of the cell.
 
3060
        @param num_rows
 
3061
            Number of rows to be occupied by this cell, must be >= 1.
 
3062
        @param num_cols
 
3063
            Number of columns to be occupied by this cell, must be >= 1.
 
3064
     */
 
3065
    void SetCellSize(int row, int col, int num_rows, int num_cols);
 
3066
 
 
3067
    /**
 
3068
        Get the size of the cell in number of cells covered by it.
 
3069
 
 
3070
        For normal cells, the function fills both @a num_rows and @a num_cols
 
3071
        with 1 and returns CellSpan_None. For cells which span multiple cells, i.e.
 
3072
        for which SetCellSize() had been called, the returned values are the
 
3073
        same ones as were passed to SetCellSize() call and the function return
 
3074
        value is CellSpan_Main.
 
3075
 
 
3076
        More unexpectedly, perhaps, the returned values may be @em negative for
 
3077
        the cells which are inside a span covered by a cell occupying multiple
 
3078
        rows or columns. They correspond to the offset of the main cell of the
 
3079
        span from the cell passed to this functions and the function returns
 
3080
        CellSpan_Inside value to indicate this.
 
3081
 
 
3082
        As an example, consider a 3*3 grid with the cell (1, 1) (the one in the
 
3083
        middle) having a span of 2 rows and 2 columns, i.e. the grid looks like
 
3084
        @code
 
3085
            +----+----+----+
 
3086
            |    |    |    |
 
3087
            +----+----+----+
 
3088
            |    |         |
 
3089
            +----+         |
 
3090
            |    |         |
 
3091
            +----+----+----+
 
3092
        @endcode
 
3093
        Then the function returns 2 and 2 in @a num_rows and @a num_cols for
 
3094
        the cell (1, 1) itself and -1 and -1 for the cell (2, 2) as well as -1
 
3095
        and 0 for the cell (2, 1).
 
3096
 
 
3097
        @param row
 
3098
            The row of the cell.
 
3099
        @param col
 
3100
            The column of the cell.
 
3101
        @param num_rows
 
3102
            Pointer to variable receiving the number of rows, must not be @NULL.
 
3103
        @param num_cols
 
3104
            Pointer to variable receiving the number of columns, must not be
 
3105
            @NULL.
 
3106
        @return
 
3107
            The kind of this cell span (the return value is new in wxWidgets
 
3108
            2.9.1, this function was void in previous wxWidgets versions).
 
3109
     */
 
3110
    CellSpan GetCellSize( int row, int col, int *num_rows, int *num_cols ) const;
 
3111
 
 
3112
    /**
 
3113
        Get the number of rows and columns allocated for this cell.
 
3114
 
 
3115
        This overload doesn't return a CellSpan value but the values returned
 
3116
        may still be negative, see GetCellSize(int, int, int *, int *) for
 
3117
        details.
 
3118
     */
 
3119
    wxSize GetCellSize(const wxGridCellCoords& coords);
 
3120
 
 
3121
    //@}
 
3122
 
 
3123
 
 
3124
    /**
 
3125
        @name User-Resizing and Dragging
 
3126
 
 
3127
        Functions controlling various interactive mouse operations.
 
3128
 
 
3129
        By default, columns and rows can be resized by dragging the edges of
 
3130
        their labels (this can be disabled using DisableDragColSize() and
 
3131
        DisableDragRowSize() methods). And if grid line dragging is enabled with
 
3132
        EnableDragGridSize() they can also be resized by dragging the right or
 
3133
        bottom edge of the grid cells.
 
3134
 
 
3135
        Columns can also be moved to interactively change their order but this
 
3136
        needs to be explicitly enabled with EnableDragColMove().
 
3137
     */
 
3138
    //@{
 
3139
 
 
3140
    /**
 
3141
        Return @true if the dragging of cells is enabled or @false otherwise.
 
3142
    */
 
3143
    bool CanDragCell() const;
 
3144
 
 
3145
    /**
 
3146
        Returns @true if columns can be moved by dragging with the mouse.
 
3147
 
 
3148
        Columns can be moved by dragging on their labels.
 
3149
    */
 
3150
    bool CanDragColMove() const;
 
3151
 
 
3152
    /**
 
3153
        Returns @true if the given column can be resized by dragging with the
 
3154
        mouse.
 
3155
 
 
3156
        This function returns @true if resizing the columns interactively is
 
3157
        globally enabled, i.e. if DisableDragColSize() hadn't been called, and
 
3158
        if this column wasn't explicitly marked as non-resizable with
 
3159
        DisableColResize().
 
3160
    */
 
3161
    bool CanDragColSize(int col) const;
 
3162
 
 
3163
    /**
 
3164
        Return @true if the dragging of grid lines to resize rows and columns
 
3165
        is enabled or @false otherwise.
 
3166
    */
 
3167
    bool CanDragGridSize() const;
 
3168
 
 
3169
    /**
 
3170
        Returns @true if the given row can be resized by dragging with the
 
3171
        mouse.
 
3172
 
 
3173
        This is the same as CanDragColSize() but for rows.
 
3174
    */
 
3175
    bool CanDragRowSize(int row) const;
 
3176
 
 
3177
    /**
 
3178
        Disable interactive resizing of the specified column.
 
3179
 
 
3180
        This method allows to disable resizing of an individual column in a
 
3181
        grid where the columns are otherwise resizable (which is the case by
 
3182
        default).
 
3183
 
 
3184
        Notice that currently there is no way to make some columns resizable in
 
3185
        a grid where columns can't be resized by default as there doesn't seem
 
3186
        to be any need for this in practice. There is also no way to make the
 
3187
        column marked as fixed using this method resizable again because it is
 
3188
        supposed that fixed columns are used for static parts of the grid and
 
3189
        so should remain fixed during the entire grid lifetime.
 
3190
 
 
3191
        Also notice that disabling interactive column resizing will not prevent
 
3192
        the program from changing the column size.
 
3193
 
 
3194
        @see EnableDragColSize()
 
3195
     */
 
3196
    void DisableColResize(int col);
 
3197
 
 
3198
    /**
 
3199
        Disable interactive resizing of the specified row.
 
3200
 
 
3201
        This is the same as DisableColResize() but for rows.
 
3202
 
 
3203
        @see EnableDragRowSize()
 
3204
     */
 
3205
    void DisableRowResize(int row);
 
3206
 
 
3207
    /**
 
3208
        Disables column moving by dragging with the mouse.
 
3209
 
 
3210
        Equivalent to passing @false to EnableDragColMove().
 
3211
    */
 
3212
    void DisableDragColMove();
 
3213
 
 
3214
    /**
 
3215
        Disables column sizing by dragging with the mouse.
 
3216
 
 
3217
        Equivalent to passing @false to EnableDragColSize().
 
3218
    */
 
3219
    void DisableDragColSize();
 
3220
 
 
3221
    /**
 
3222
        Disable mouse dragging of grid lines to resize rows and columns.
 
3223
 
 
3224
        Equivalent to passing @false to EnableDragGridSize()
 
3225
    */
 
3226
    void DisableDragGridSize();
 
3227
 
 
3228
    /**
 
3229
        Disables row sizing by dragging with the mouse.
 
3230
 
 
3231
        Equivalent to passing @false to EnableDragRowSize().
 
3232
    */
 
3233
    void DisableDragRowSize();
 
3234
 
 
3235
    /**
 
3236
        Enables or disables cell dragging with the mouse.
 
3237
    */
 
3238
    void EnableDragCell(bool enable = true);
 
3239
 
 
3240
    /**
 
3241
        Enables or disables column moving by dragging with the mouse.
 
3242
    */
 
3243
    void EnableDragColMove(bool enable = true);
 
3244
 
 
3245
    /**
 
3246
        Enables or disables column sizing by dragging with the mouse.
 
3247
 
 
3248
        @see DisableColResize()
 
3249
    */
 
3250
    void EnableDragColSize(bool enable = true);
 
3251
 
 
3252
    /**
 
3253
        Enables or disables row and column resizing by dragging gridlines with
 
3254
        the mouse.
 
3255
    */
 
3256
    void EnableDragGridSize(bool enable = true);
 
3257
 
 
3258
    /**
 
3259
        Enables or disables row sizing by dragging with the mouse.
 
3260
 
 
3261
        @see DisableRowResize()
 
3262
    */
 
3263
    void EnableDragRowSize(bool enable = true);
 
3264
 
 
3265
    /**
 
3266
        Returns the column ID of the specified column position.
 
3267
    */
 
3268
    int GetColAt(int colPos) const;
 
3269
 
 
3270
    /**
 
3271
        Returns the position of the specified column.
 
3272
    */
 
3273
    int GetColPos(int colID) const;
 
3274
 
 
3275
    /**
 
3276
        Sets the position of the specified column.
 
3277
    */
 
3278
    void SetColPos(int colID, int newPos);
 
3279
 
 
3280
    /**
 
3281
        Sets the positions of all columns at once.
 
3282
 
 
3283
        This method takes an array containing the indices of the columns in
 
3284
        their display order, i.e. uses the same convention as
 
3285
        wxHeaderCtrl::SetColumnsOrder().
 
3286
    */
 
3287
    void SetColumnsOrder(const wxArrayInt& order);
 
3288
 
 
3289
    /**
 
3290
        Resets the position of the columns to the default.
 
3291
    */
 
3292
    void ResetColPos();
 
3293
 
 
3294
    //@}
 
3295
 
 
3296
 
 
3297
    /**
 
3298
        @name Cursor Movement
 
3299
    */
 
3300
    //@{
 
3301
 
 
3302
    /**
 
3303
        Returns the current grid cell column position.
 
3304
    */
 
3305
    int GetGridCursorCol() const;
 
3306
 
 
3307
    /**
 
3308
        Returns the current grid cell row position.
 
3309
    */
 
3310
    int GetGridCursorRow() const;
 
3311
 
 
3312
    /**
 
3313
        Make the given cell current and ensure it is visible.
 
3314
 
 
3315
        This method is equivalent to calling MakeCellVisible() and
 
3316
        SetGridCursor() and so, as with the latter, a @c wxEVT_GRID_SELECT_CELL
 
3317
        event is generated by it and the selected cell doesn't change if the
 
3318
        event is vetoed.
 
3319
     */
 
3320
    void GoToCell(int row, int col);
 
3321
    /**
 
3322
        Make the given cell current and ensure it is visible.
 
3323
 
 
3324
        This method is equivalent to calling MakeCellVisible() and
 
3325
        SetGridCursor() and so, as with the latter, a @c wxEVT_GRID_SELECT_CELL
 
3326
        event is generated by it and the selected cell doesn't change if the
 
3327
        event is vetoed.
 
3328
     */
 
3329
    void GoToCell(const wxGridCellCoords& coords);
 
3330
 
 
3331
    /**
 
3332
        Moves the grid cursor down by one row.
 
3333
 
 
3334
        If a block of cells was previously selected it will expand if the
 
3335
        argument is @true or be cleared if the argument is @false.
 
3336
    */
 
3337
    bool MoveCursorDown(bool expandSelection);
 
3338
 
 
3339
    /**
 
3340
        Moves the grid cursor down in the current column such that it skips to
 
3341
        the beginning or end of a block of non-empty cells.
 
3342
 
 
3343
        If a block of cells was previously selected it will expand if the
 
3344
        argument is @true or be cleared if the argument is @false.
 
3345
    */
 
3346
    bool MoveCursorDownBlock(bool expandSelection);
 
3347
 
 
3348
    /**
 
3349
        Moves the grid cursor left by one column.
 
3350
 
 
3351
        If a block of cells was previously selected it will expand if the
 
3352
        argument is @true or be cleared if the argument is @false.
 
3353
    */
 
3354
    bool MoveCursorLeft(bool expandSelection);
 
3355
 
 
3356
    /**
 
3357
        Moves the grid cursor left in the current row such that it skips to the
 
3358
        beginning or end of a block of non-empty cells.
 
3359
 
 
3360
        If a block of cells was previously selected it will expand if the
 
3361
        argument is @true or be cleared if the argument is @false.
 
3362
    */
 
3363
    bool MoveCursorLeftBlock(bool expandSelection);
 
3364
 
 
3365
    /**
 
3366
        Moves the grid cursor right by one column.
 
3367
 
 
3368
        If a block of cells was previously selected it will expand if the
 
3369
        argument is @true or be cleared if the argument is @false.
 
3370
    */
 
3371
    bool MoveCursorRight(bool expandSelection);
 
3372
 
 
3373
    /**
 
3374
        Moves the grid cursor right in the current row such that it skips to
 
3375
        the beginning or end of a block of non-empty cells.
 
3376
 
 
3377
        If a block of cells was previously selected it will expand if the
 
3378
        argument is @true or be cleared if the argument is @false.
 
3379
    */
 
3380
    bool MoveCursorRightBlock(bool expandSelection);
 
3381
 
 
3382
    /**
 
3383
        Moves the grid cursor up by one row.
 
3384
 
 
3385
        If a block of cells was previously selected it will expand if the
 
3386
        argument is @true or be cleared if the argument is @false.
 
3387
    */
 
3388
    bool MoveCursorUp(bool expandSelection);
 
3389
 
 
3390
    /**
 
3391
        Moves the grid cursor up in the current column such that it skips to
 
3392
        the beginning or end of a block of non-empty cells.
 
3393
 
 
3394
        If a block of cells was previously selected it will expand if the
 
3395
        argument is @true or be cleared if the argument is @false.
 
3396
    */
 
3397
    bool MoveCursorUpBlock(bool expandSelection);
 
3398
 
 
3399
    /**
 
3400
        Moves the grid cursor down by some number of rows so that the previous
 
3401
        bottom visible row becomes the top visible row.
 
3402
    */
 
3403
    bool MovePageDown();
 
3404
 
 
3405
    /**
 
3406
        Moves the grid cursor up by some number of rows so that the previous
 
3407
        top visible row becomes the bottom visible row.
 
3408
    */
 
3409
    bool MovePageUp();
 
3410
 
 
3411
    /**
 
3412
        Set the grid cursor to the specified cell.
 
3413
 
 
3414
        The grid cursor indicates the current cell and can be moved by the user
 
3415
        using the arrow keys or the mouse.
 
3416
 
 
3417
        Calling this function generates a @c wxEVT_GRID_SELECT_CELL event and
 
3418
        if the event handler vetoes this event, the cursor is not moved.
 
3419
 
 
3420
        This function doesn't make the target call visible, use GoToCell() to
 
3421
        do this.
 
3422
    */
 
3423
    void SetGridCursor(int row, int col);
 
3424
    /**
 
3425
        Set the grid cursor to the specified cell.
 
3426
 
 
3427
        The grid cursor indicates the current cell and can be moved by the user
 
3428
        using the arrow keys or the mouse.
 
3429
 
 
3430
        Calling this function generates a @c wxEVT_GRID_SELECT_CELL event and
 
3431
        if the event handler vetoes this event, the cursor is not moved.
 
3432
 
 
3433
        This function doesn't make the target call visible, use GoToCell() to
 
3434
        do this.
 
3435
    */
 
3436
    void SetGridCursor(const wxGridCellCoords& coords);
 
3437
 
 
3438
    //@}
 
3439
 
 
3440
 
 
3441
    /**
 
3442
        @name User Selection
 
3443
     */
 
3444
    //@{
 
3445
 
 
3446
    /**
 
3447
        Deselects all cells that are currently selected.
 
3448
    */
 
3449
    void ClearSelection();
 
3450
 
 
3451
    /**
 
3452
        Returns an array of individually selected cells.
 
3453
 
 
3454
        Notice that this array does @em not contain all the selected cells in
 
3455
        general as it doesn't include the cells selected as part of column, row
 
3456
        or block selection. You must use this method, GetSelectedCols(),
 
3457
        GetSelectedRows() and GetSelectionBlockTopLeft() and
 
3458
        GetSelectionBlockBottomRight() methods to obtain the entire selection
 
3459
        in general.
 
3460
 
 
3461
        Please notice this behaviour is by design and is needed in order to
 
3462
        support grids of arbitrary size (when an entire column is selected in
 
3463
        a grid with a million of columns, we don't want to create an array with
 
3464
        a million of entries in this function, instead it returns an empty
 
3465
        array and GetSelectedCols() returns an array containing one element).
 
3466
    */
 
3467
    wxGridCellCoordsArray GetSelectedCells() const;
 
3468
 
 
3469
    /**
 
3470
        Returns an array of selected columns.
 
3471
 
 
3472
        Please notice that this method alone is not sufficient to find all the
 
3473
        selected columns as it contains only the columns which were
 
3474
        individually selected but not those being part of the block selection
 
3475
        or being selected in virtue of all of their cells being selected
 
3476
        individually, please see GetSelectedCells() for more details.
 
3477
    */
 
3478
    wxArrayInt GetSelectedCols() const;
 
3479
 
 
3480
    /**
 
3481
        Returns an array of selected rows.
 
3482
 
 
3483
        Please notice that this method alone is not sufficient to find all the
 
3484
        selected rows as it contains only the rows which were individually
 
3485
        selected but not those being part of the block selection or being
 
3486
        selected in virtue of all of their cells being selected individually,
 
3487
        please see GetSelectedCells() for more details.
 
3488
    */
 
3489
    wxArrayInt GetSelectedRows() const;
 
3490
 
 
3491
    /**
 
3492
        Returns the colour used for drawing the selection background.
 
3493
    */
 
3494
    wxColour GetSelectionBackground() const;
 
3495
 
 
3496
    /**
 
3497
        Returns an array of the bottom right corners of blocks of selected
 
3498
        cells.
 
3499
 
 
3500
        Please see GetSelectedCells() for more information about the selection
 
3501
        representation in wxGrid.
 
3502
 
 
3503
        @see GetSelectionBlockTopLeft()
 
3504
    */
 
3505
    wxGridCellCoordsArray GetSelectionBlockBottomRight() const;
 
3506
 
 
3507
    /**
 
3508
        Returns an array of the top left corners of blocks of selected cells.
 
3509
 
 
3510
        Please see GetSelectedCells() for more information about the selection
 
3511
        representation in wxGrid.
 
3512
 
 
3513
        @see GetSelectionBlockBottomRight()
 
3514
    */
 
3515
    wxGridCellCoordsArray GetSelectionBlockTopLeft() const;
 
3516
 
 
3517
    /**
 
3518
        Returns the colour used for drawing the selection foreground.
 
3519
    */
 
3520
    wxColour GetSelectionForeground() const;
 
3521
 
 
3522
    /**
 
3523
        Returns the current selection mode.
 
3524
 
 
3525
        @see SetSelectionMode().
 
3526
    */
 
3527
    wxGridSelectionModes GetSelectionMode() const;
 
3528
 
 
3529
    /**
 
3530
        Returns @true if the given cell is selected.
 
3531
    */
 
3532
    bool IsInSelection(int row, int col) const;
 
3533
    /**
 
3534
        Returns @true if the given cell is selected.
 
3535
    */
 
3536
    bool IsInSelection(const wxGridCellCoords& coords) const;
 
3537
 
 
3538
    /**
 
3539
        Returns @true if there are currently any selected cells, rows, columns
 
3540
        or blocks.
 
3541
    */
 
3542
    bool IsSelection() const;
 
3543
 
 
3544
    /**
 
3545
        Selects all cells in the grid.
 
3546
    */
 
3547
    void SelectAll();
 
3548
 
 
3549
    /**
 
3550
        Selects a rectangular block of cells.
 
3551
 
 
3552
        If @a addToSelected is @false then any existing selection will be
 
3553
        deselected; if @true the column will be added to the existing
 
3554
        selection.
 
3555
    */
 
3556
    void SelectBlock(int topRow, int leftCol, int bottomRow, int rightCol,
 
3557
                     bool addToSelected = false);
 
3558
    /**
 
3559
        Selects a rectangular block of cells.
 
3560
 
 
3561
        If @a addToSelected is @false then any existing selection will be
 
3562
        deselected; if @true the column will be added to the existing
 
3563
        selection.
 
3564
    */
 
3565
    void SelectBlock(const wxGridCellCoords& topLeft,
 
3566
                     const wxGridCellCoords& bottomRight,
 
3567
                     bool addToSelected = false);
 
3568
 
 
3569
    /**
 
3570
        Selects the specified column.
 
3571
 
 
3572
        If @a addToSelected is @false then any existing selection will be
 
3573
        deselected; if @true the column will be added to the existing
 
3574
        selection.
 
3575
 
 
3576
        This method won't select anything if the current selection mode is
 
3577
        wxGridSelectRows.
 
3578
    */
 
3579
    void SelectCol(int col, bool addToSelected = false);
 
3580
 
 
3581
    /**
 
3582
        Selects the specified row.
 
3583
 
 
3584
        If @a addToSelected is @false then any existing selection will be
 
3585
        deselected; if @true the row will be added to the existing selection.
 
3586
 
 
3587
        This method won't select anything if the current selection mode is
 
3588
        wxGridSelectColumns.
 
3589
    */
 
3590
    void SelectRow(int row, bool addToSelected = false);
 
3591
 
 
3592
    /**
 
3593
        Set the colour to be used for drawing the selection background.
 
3594
    */
 
3595
    void SetSelectionBackground(const wxColour& c);
 
3596
 
 
3597
    /**
 
3598
        Set the colour to be used for drawing the selection foreground.
 
3599
    */
 
3600
    void SetSelectionForeground(const wxColour& c);
 
3601
 
 
3602
    /**
 
3603
        Set the selection behaviour of the grid.
 
3604
 
 
3605
        The existing selection is converted to conform to the new mode if
 
3606
        possible and discarded otherwise (e.g. any individual selected cells
 
3607
        are deselected if the new mode allows only the selection of the entire
 
3608
        rows or columns).
 
3609
    */
 
3610
    void SetSelectionMode(wxGridSelectionModes selmode);
 
3611
 
 
3612
    //@}
 
3613
 
 
3614
 
 
3615
    /**
 
3616
        @name Scrolling
 
3617
     */
 
3618
    //@{
 
3619
 
 
3620
    /**
 
3621
        Returns the number of pixels per horizontal scroll increment.
 
3622
 
 
3623
        The default is 15.
 
3624
 
 
3625
        @see GetScrollLineY(), SetScrollLineX(), SetScrollLineY()
 
3626
    */
 
3627
    int GetScrollLineX() const;
 
3628
 
 
3629
    /**
 
3630
        Returns the number of pixels per vertical scroll increment.
 
3631
 
 
3632
        The default is 15.
 
3633
 
 
3634
        @see GetScrollLineX(), SetScrollLineX(), SetScrollLineY()
 
3635
    */
 
3636
    int GetScrollLineY() const;
 
3637
 
 
3638
    /**
 
3639
        Returns @true if a cell is either entirely or at least partially
 
3640
        visible in the grid window.
 
3641
 
 
3642
        By default, the cell must be entirely visible for this function to
 
3643
        return @true but if @a wholeCellVisible is @false, the function returns
 
3644
        @true even if the cell is only partially visible.
 
3645
    */
 
3646
    bool IsVisible(int row, int col, bool wholeCellVisible = true) const;
 
3647
    /**
 
3648
        Returns @true if a cell is either entirely or at least partially
 
3649
        visible in the grid window.
 
3650
 
 
3651
        By default, the cell must be entirely visible for this function to
 
3652
        return @true but if @a wholeCellVisible is @false, the function returns
 
3653
        @true even if the cell is only partially visible.
 
3654
    */
 
3655
    bool IsVisible(const wxGridCellCoords& coords,
 
3656
                   bool wholeCellVisible = true) const;
 
3657
 
 
3658
    /**
 
3659
        Brings the specified cell into the visible grid cell area with minimal
 
3660
        scrolling.
 
3661
 
 
3662
        Does nothing if the cell is already visible.
 
3663
    */
 
3664
    void MakeCellVisible(int row, int col);
 
3665
    /**
 
3666
        Brings the specified cell into the visible grid cell area with minimal
 
3667
        scrolling.
 
3668
 
 
3669
        Does nothing if the cell is already visible.
 
3670
    */
 
3671
    void MakeCellVisible(const wxGridCellCoords& coords);
 
3672
 
 
3673
    /**
 
3674
        Sets the number of pixels per horizontal scroll increment.
 
3675
 
 
3676
        The default is 15.
 
3677
 
 
3678
        @see GetScrollLineX(), GetScrollLineY(), SetScrollLineY()
 
3679
    */
 
3680
    void SetScrollLineX(int x);
 
3681
 
 
3682
    /**
 
3683
        Sets the number of pixels per vertical scroll increment.
 
3684
 
 
3685
        The default is 15.
 
3686
 
 
3687
        @see GetScrollLineX(), GetScrollLineY(), SetScrollLineX()
 
3688
    */
 
3689
    void SetScrollLineY(int y);
 
3690
 
 
3691
    //@}
 
3692
 
 
3693
 
 
3694
    /**
 
3695
        @name Cell and Device Coordinate Translation
 
3696
     */
 
3697
    //@{
 
3698
 
 
3699
    /**
 
3700
        Convert grid cell coordinates to grid window pixel coordinates.
 
3701
 
 
3702
        This function returns the rectangle that encloses the block of cells
 
3703
        limited by @a topLeft and @a bottomRight cell in device coords and
 
3704
        clipped to the client size of the grid window.
 
3705
 
 
3706
        @see CellToRect()
 
3707
    */
 
3708
    wxRect BlockToDeviceRect(const wxGridCellCoords& topLeft,
 
3709
                             const wxGridCellCoords& bottomRight) const;
 
3710
 
 
3711
    /**
 
3712
        Return the rectangle corresponding to the grid cell's size and position
 
3713
        in logical coordinates.
 
3714
 
 
3715
        @see BlockToDeviceRect()
 
3716
    */
 
3717
    wxRect CellToRect(int row, int col) const;
 
3718
    /**
 
3719
        Return the rectangle corresponding to the grid cell's size and position
 
3720
        in logical coordinates.
 
3721
 
 
3722
        @see BlockToDeviceRect()
 
3723
    */
 
3724
    wxRect CellToRect(const wxGridCellCoords& coords) const;
 
3725
 
 
3726
    /**
 
3727
        Returns the column at the given pixel position.
 
3728
 
 
3729
        @param x
 
3730
            The x position to evaluate.
 
3731
        @param clipToMinMax
 
3732
            If @true, rather than returning @c wxNOT_FOUND, it returns either
 
3733
            the first or last column depending on whether @a x is too far to
 
3734
            the left or right respectively.
 
3735
        @return
 
3736
            The column index or @c wxNOT_FOUND.
 
3737
    */
 
3738
    int XToCol(int x, bool clipToMinMax = false) const;
 
3739
 
 
3740
    /**
 
3741
        Returns the column whose right hand edge is close to the given logical
 
3742
        @a x position.
 
3743
 
 
3744
        If no column edge is near to this position @c wxNOT_FOUND is returned.
 
3745
    */
 
3746
    int XToEdgeOfCol(int x) const;
 
3747
 
 
3748
    /**
 
3749
        Translates logical pixel coordinates to the grid cell coordinates.
 
3750
 
 
3751
        Notice that this function expects logical coordinates on input so if
 
3752
        you use this function in a mouse event handler you need to translate
 
3753
        the mouse position, which is expressed in device coordinates, to
 
3754
        logical ones.
 
3755
 
 
3756
        @see XToCol(), YToRow()
 
3757
     */
 
3758
    wxGridCellCoords XYToCell(int x, int y) const;
 
3759
    /**
 
3760
        Translates logical pixel coordinates to the grid cell coordinates.
 
3761
 
 
3762
        Notice that this function expects logical coordinates on input so if
 
3763
        you use this function in a mouse event handler you need to translate
 
3764
        the mouse position, which is expressed in device coordinates, to
 
3765
        logical ones.
 
3766
 
 
3767
        @see XToCol(), YToRow()
 
3768
     */
 
3769
    wxGridCellCoords XYToCell(const wxPoint& pos) const;
 
3770
    // XYToCell(int, int, wxGridCellCoords&) overload is intentionally
 
3771
    // undocumented, using it is ugly and non-const reference parameters are
 
3772
    // not used in wxWidgets API
 
3773
 
 
3774
    /**
 
3775
        Returns the row whose bottom edge is close to the given logical @a y
 
3776
        position.
 
3777
 
 
3778
        If no row edge is near to this position @c wxNOT_FOUND is returned.
 
3779
    */
 
3780
    int YToEdgeOfRow(int y) const;
 
3781
 
 
3782
    /**
 
3783
        Returns the grid row that corresponds to the logical @a y coordinate.
 
3784
 
 
3785
        Returns @c wxNOT_FOUND if there is no row at the @a y position.
 
3786
    */
 
3787
    int YToRow(int y, bool clipToMinMax = false) const;
 
3788
 
 
3789
    //@}
 
3790
 
 
3791
 
 
3792
    /**
 
3793
        @name Miscellaneous Functions
 
3794
     */
 
3795
    //@{
 
3796
 
 
3797
    /**
 
3798
        Appends one or more new columns to the right of the grid.
 
3799
 
 
3800
        The @a updateLabels argument is not used at present. If you are using a
 
3801
        derived grid table class you will need to override
 
3802
        wxGridTableBase::AppendCols(). See InsertCols() for further
 
3803
        information.
 
3804
 
 
3805
        @return @true on success or @false if appending columns failed.
 
3806
    */
 
3807
    bool AppendCols(int numCols = 1, bool updateLabels = true);
 
3808
 
 
3809
    /**
 
3810
        Appends one or more new rows to the bottom of the grid.
 
3811
 
 
3812
        The @a updateLabels argument is not used at present. If you are using a
 
3813
        derived grid table class you will need to override
 
3814
        wxGridTableBase::AppendRows(). See InsertRows() for further
 
3815
        information.
 
3816
 
 
3817
        @return @true on success or @false if appending rows failed.
 
3818
    */
 
3819
    bool AppendRows(int numRows = 1, bool updateLabels = true);
 
3820
 
 
3821
    /**
 
3822
        Return @true if the horizontal grid lines stop at the last column
 
3823
        boundary or @false if they continue to the end of the window.
 
3824
 
 
3825
        The default is to clip grid lines.
 
3826
 
 
3827
        @see ClipHorzGridLines(), AreVertGridLinesClipped()
 
3828
     */
 
3829
    bool AreHorzGridLinesClipped() const;
 
3830
 
 
3831
    /**
 
3832
        Return @true if the vertical grid lines stop at the last row
 
3833
        boundary or @false if they continue to the end of the window.
 
3834
 
 
3835
        The default is to clip grid lines.
 
3836
 
 
3837
        @see ClipVertGridLines(), AreHorzGridLinesClipped()
 
3838
     */
 
3839
    bool AreVertGridLinesClipped() const;
 
3840
 
 
3841
    /**
 
3842
        Increments the grid's batch count.
 
3843
 
 
3844
        When the count is greater than zero repainting of the grid is
 
3845
        suppressed. Each call to BeginBatch must be matched by a later call to
 
3846
        EndBatch(). Code that does a lot of grid modification can be enclosed
 
3847
        between BeginBatch() and EndBatch() calls to avoid screen flicker. The
 
3848
        final EndBatch() call will cause the grid to be repainted.
 
3849
 
 
3850
        Notice that you should use wxGridUpdateLocker which ensures that there
 
3851
        is always a matching EndBatch() call for this BeginBatch() if possible
 
3852
        instead of calling this method directly.
 
3853
    */
 
3854
    void BeginBatch();
 
3855
 
 
3856
    /**
 
3857
        Clears all data in the underlying grid table and repaints the grid.
 
3858
 
 
3859
        The table is not deleted by this function. If you are using a derived
 
3860
        table class then you need to override wxGridTableBase::Clear() for this
 
3861
        function to have any effect.
 
3862
    */
 
3863
    void ClearGrid();
 
3864
 
 
3865
    /**
 
3866
        Change whether the horizontal grid lines are clipped by the end of the
 
3867
        last column.
 
3868
 
 
3869
        By default the grid lines are not drawn beyond the end of the last
 
3870
        column but after calling this function with @a clip set to @false they
 
3871
        will be drawn across the entire grid window.
 
3872
 
 
3873
        @see AreHorzGridLinesClipped(), ClipVertGridLines()
 
3874
     */
 
3875
    void ClipHorzGridLines(bool clip);
 
3876
 
 
3877
    /**
 
3878
        Change whether the vertical grid lines are clipped by the end of the
 
3879
        last row.
 
3880
 
 
3881
        By default the grid lines are not drawn beyond the end of the last
 
3882
        row but after calling this function with @a clip set to @false they
 
3883
        will be drawn across the entire grid window.
 
3884
 
 
3885
        @see AreVertGridLinesClipped(), ClipHorzGridLines()
 
3886
     */
 
3887
    void ClipVertGridLines(bool clip);
 
3888
 
 
3889
    /**
 
3890
        Deletes one or more columns from a grid starting at the specified
 
3891
        position.
 
3892
 
 
3893
        The @a updateLabels argument is not used at present. If you are using a
 
3894
        derived grid table class you will need to override
 
3895
        wxGridTableBase::DeleteCols(). See InsertCols() for further
 
3896
        information.
 
3897
 
 
3898
        @return @true on success or @false if deleting columns failed.
 
3899
    */
 
3900
    bool DeleteCols(int pos = 0, int numCols = 1, bool updateLabels = true);
 
3901
 
 
3902
    /**
 
3903
        Deletes one or more rows from a grid starting at the specified
 
3904
        position.
 
3905
 
 
3906
        The @a updateLabels argument is not used at present. If you are using a
 
3907
        derived grid table class you will need to override
 
3908
        wxGridTableBase::DeleteRows(). See InsertRows() for further
 
3909
        information.
 
3910
 
 
3911
        @return @true on success or @false if appending rows failed.
 
3912
    */
 
3913
    bool DeleteRows(int pos = 0, int numRows = 1, bool updateLabels = true);
 
3914
 
 
3915
    /**
 
3916
        Decrements the grid's batch count.
 
3917
 
 
3918
        When the count is greater than zero repainting of the grid is
 
3919
        suppressed. Each previous call to BeginBatch() must be matched by a
 
3920
        later call to EndBatch(). Code that does a lot of grid modification can
 
3921
        be enclosed between BeginBatch() and EndBatch() calls to avoid screen
 
3922
        flicker. The final EndBatch() will cause the grid to be repainted.
 
3923
 
 
3924
        @see wxGridUpdateLocker
 
3925
    */
 
3926
    void EndBatch();
 
3927
 
 
3928
    /**
 
3929
        Overridden wxWindow method.
 
3930
    */
 
3931
    virtual void Fit();
 
3932
 
 
3933
    /**
 
3934
        Causes immediate repainting of the grid.
 
3935
 
 
3936
        Use this instead of the usual wxWindow::Refresh().
 
3937
    */
 
3938
    void ForceRefresh();
 
3939
 
 
3940
    /**
 
3941
        Returns the number of times that BeginBatch() has been called without
 
3942
        (yet) matching calls to EndBatch(). While the grid's batch count is
 
3943
        greater than zero the display will not be updated.
 
3944
    */
 
3945
    int GetBatchCount();
 
3946
 
 
3947
    /**
 
3948
        Returns the total number of grid columns.
 
3949
 
 
3950
        This is the same as the number of columns in the underlying grid table.
 
3951
    */
 
3952
    int GetNumberCols() const;
 
3953
 
 
3954
    /**
 
3955
        Returns the total number of grid rows.
 
3956
 
 
3957
        This is the same as the number of rows in the underlying grid table.
 
3958
    */
 
3959
    int GetNumberRows() const;
 
3960
 
 
3961
    /**
 
3962
        Returns the attribute for the given cell creating one if necessary.
 
3963
 
 
3964
        If the cell already has an attribute, it is returned. Otherwise a new
 
3965
        attribute is created, associated with the cell and returned. In any
 
3966
        case the caller must call DecRef() on the returned pointer.
 
3967
 
 
3968
        This function may only be called if CanHaveAttributes() returns @true.
 
3969
    */
 
3970
    wxGridCellAttr *GetOrCreateCellAttr(int row, int col) const;
 
3971
 
 
3972
    /**
 
3973
        Returns a base pointer to the current table object.
 
3974
 
 
3975
        The returned pointer is still owned by the grid.
 
3976
    */
 
3977
    wxGridTableBase *GetTable() const;
 
3978
 
 
3979
    /**
 
3980
        Inserts one or more new columns into a grid with the first new column
 
3981
        at the specified position.
 
3982
 
 
3983
        Notice that inserting the columns in the grid requires grid table
 
3984
        cooperation: when this method is called, grid object begins by
 
3985
        requesting the underlying grid table to insert new columns. If this is
 
3986
        successful the table notifies the grid and the grid updates the
 
3987
        display. For a default grid (one where you have called CreateGrid())
 
3988
        this process is automatic. If you are using a custom grid table
 
3989
        (specified with SetTable()) then you must override
 
3990
        wxGridTableBase::InsertCols() in your derived table class.
 
3991
 
 
3992
        @param pos
 
3993
            The position which the first newly inserted column will have.
 
3994
        @param numCols
 
3995
            The number of columns to insert.
 
3996
        @param updateLabels
 
3997
            Currently not used.
 
3998
        @return
 
3999
            @true if the columns were successfully inserted, @false if an error
 
4000
            occurred (most likely the table couldn't be updated).
 
4001
    */
 
4002
    bool InsertCols(int pos = 0, int numCols = 1, bool updateLabels = true);
 
4003
 
 
4004
    /**
 
4005
        Inserts one or more new rows into a grid with the first new row at the
 
4006
        specified position.
 
4007
 
 
4008
        Notice that you must implement wxGridTableBase::InsertRows() if you use
 
4009
        a grid with a custom table, please see InsertCols() for more
 
4010
        information.
 
4011
 
 
4012
        @param pos
 
4013
            The position which the first newly inserted row will have.
 
4014
        @param numRows
 
4015
            The number of rows to insert.
 
4016
        @param updateLabels
 
4017
            Currently not used.
 
4018
        @return
 
4019
            @true if the rows were successfully inserted, @false if an error
 
4020
            occurred (most likely the table couldn't be updated).
 
4021
    */
 
4022
    bool InsertRows(int pos = 0, int numRows = 1, bool updateLabels = true);
 
4023
 
 
4024
    /**
 
4025
        Invalidates the cached attribute for the given cell.
 
4026
 
 
4027
        For efficiency reasons, wxGrid may cache the recently used attributes
 
4028
        (currently it caches only the single most recently used one, in fact)
 
4029
        which can result in the cell appearance not being refreshed even when
 
4030
        the attribute returned by your custom wxGridCellAttrProvider-derived
 
4031
        class has changed. To force the grid to refresh the cell attribute,
 
4032
        this function may be used. Notice that calling it will not result in
 
4033
        actually redrawing the cell, you still need to call
 
4034
        wxWindow::RefreshRect() to invalidate the area occupied by the cell in
 
4035
        the window to do this. Also note that you don't need to call this
 
4036
        function if you store the attributes in wxGrid itself, i.e. use its
 
4037
        SetAttr() and similar methods, it is only useful when using a separate
 
4038
        custom attributes provider.
 
4039
 
 
4040
        @param row
 
4041
            The row of the cell whose attribute needs to be queried again.
 
4042
        @param col
 
4043
            The column of the cell whose attribute needs to be queried again.
 
4044
 
 
4045
        @since 2.9.2
 
4046
     */
 
4047
    void RefreshAttr(int row, int col);
 
4048
 
 
4049
    /**
 
4050
        Draws part or all of a wxGrid on a wxDC for printing or display.
 
4051
 
 
4052
        Pagination can be accomplished by using sequential Render() calls
 
4053
        with appropriate values in wxGridCellCoords topLeft and bottomRight.
 
4054
 
 
4055
        @param dc
 
4056
            The wxDC to be drawn on.
 
4057
        @param pos
 
4058
            The position on the wxDC where rendering should begin. If not
 
4059
            specified drawing will begin at the wxDC MaxX() and MaxY().
 
4060
        @param size
 
4061
            The size of the area on the wxDC that the rendered wxGrid should
 
4062
            occupy. If not specified the drawing will be scaled to fit the
 
4063
            available dc width or height. The wxGrid's aspect ratio is
 
4064
            maintained whether or not size is specified.
 
4065
        @param topLeft
 
4066
            The top left cell of the block to be drawn. Defaults to ( 0, 0 ).
 
4067
        @param bottomRight
 
4068
            The bottom right cell of the block to be drawn. Defaults to row and
 
4069
            column counts.
 
4070
        @param style
 
4071
            A combination of values from wxGridRenderStyle.
 
4072
 
 
4073
        @since 2.9.4
 
4074
     */
 
4075
    void Render( wxDC& dc,
 
4076
                 const wxPoint& pos = wxDefaultPosition,
 
4077
                 const wxSize& size = wxDefaultSize,
 
4078
                 const wxGridCellCoords& topLeft = wxGridCellCoords( -1, -1 ),
 
4079
                 const wxGridCellCoords& bottomRight = wxGridCellCoords( -1, -1 ),
 
4080
                 int style = wxGRID_DRAW_DEFAULT );
 
4081
 
 
4082
    /**
 
4083
        Sets the cell attributes for all cells in the specified column.
 
4084
 
 
4085
        For more information about controlling grid cell attributes see the
 
4086
        wxGridCellAttr cell attribute class and the @ref overview_grid.
 
4087
    */
 
4088
    void SetColAttr(int col, wxGridCellAttr* attr);
 
4089
 
 
4090
    /**
 
4091
        Sets the extra margins used around the grid area.
 
4092
 
 
4093
        A grid may occupy more space than needed for its data display and
 
4094
        this function allows to set how big this extra space is
 
4095
    */
 
4096
    void SetMargins(int extraWidth, int extraHeight);
 
4097
 
 
4098
    /**
 
4099
        Sets the cell attributes for all cells in the specified row.
 
4100
 
 
4101
        The grid takes ownership of the attribute pointer.
 
4102
 
 
4103
        See the wxGridCellAttr class for more information about controlling
 
4104
        cell attributes.
 
4105
    */
 
4106
    void SetRowAttr(int row, wxGridCellAttr* attr);
 
4107
 
 
4108
    //@}
 
4109
 
 
4110
 
 
4111
    /**
 
4112
        @name Sorting support.
 
4113
 
 
4114
        wxGrid doesn't provide any support for sorting the data but it does
 
4115
        generate events allowing the user code to sort it and supports
 
4116
        displaying the sort indicator in the column used for sorting.
 
4117
 
 
4118
        To use wxGrid sorting support you need to handle wxEVT_GRID_COL_SORT
 
4119
        event (and not veto it) and resort the data displayed in the grid. The
 
4120
        grid will automatically update the sorting indicator on the column
 
4121
        which was clicked.
 
4122
 
 
4123
        You can also call the functions in this section directly to update the
 
4124
        sorting indicator. Once again, they don't do anything with the grid
 
4125
        data, it remains your responsibility to actually sort it appropriately.
 
4126
     */
 
4127
    //@{
 
4128
 
 
4129
    /**
 
4130
        Return the column in which the sorting indicator is currently
 
4131
        displayed.
 
4132
 
 
4133
        Returns @c wxNOT_FOUND if sorting indicator is not currently displayed
 
4134
        at all.
 
4135
 
 
4136
        @see SetSortingColumn()
 
4137
     */
 
4138
    int GetSortingColumn() const;
 
4139
 
 
4140
    /**
 
4141
        Return @true if this column is currently used for sorting.
 
4142
 
 
4143
        @see GetSortingColumn()
 
4144
     */
 
4145
    bool IsSortingBy(int col) const;
 
4146
 
 
4147
    /**
 
4148
        Return @true if the current sorting order is ascending or @false if it
 
4149
        is descending.
 
4150
 
 
4151
        It only makes sense to call this function if GetSortingColumn() returns
 
4152
        a valid column index and not @c wxNOT_FOUND.
 
4153
 
 
4154
        @see SetSortingColumn()
 
4155
     */
 
4156
    bool IsSortOrderAscending() const;
 
4157
 
 
4158
    /**
 
4159
        Set the column to display the sorting indicator in and its direction.
 
4160
 
 
4161
        @param col
 
4162
            The column to display the sorting indicator in or @c wxNOT_FOUND to
 
4163
            remove any currently displayed sorting indicator.
 
4164
        @param ascending
 
4165
            If @true, display the ascending sort indicator, otherwise display
 
4166
            the descending sort indicator.
 
4167
 
 
4168
        @see GetSortingColumn(), IsSortOrderAscending()
 
4169
     */
 
4170
    void SetSortingColumn(int col, bool ascending = true);
 
4171
 
 
4172
    /**
 
4173
        Remove any currently shown sorting indicator.
 
4174
 
 
4175
        This is equivalent to calling SetSortingColumn() with @c wxNOT_FOUND
 
4176
        first argument.
 
4177
     */
 
4178
    void UnsetSortingColumn();
 
4179
    //@}
 
4180
 
 
4181
 
 
4182
    /**
 
4183
        @name Accessors for component windows.
 
4184
 
 
4185
        Return the various child windows of wxGrid.
 
4186
 
 
4187
        wxGrid is an empty parent window for 4 children representing the column
 
4188
        labels window (top), the row labels window (left), the corner window
 
4189
        (top left) and the main grid window. It may be necessary to use these
 
4190
        individual windows and not the wxGrid window itself if you need to
 
4191
        handle events for them (this can be done using wxEvtHandler::Connect()
 
4192
        or wxWindow::PushEventHandler()) or do something else requiring the use
 
4193
        of the correct window pointer. Notice that you should not, however,
 
4194
        change these windows (e.g. reposition them or draw over them) because
 
4195
        they are managed by wxGrid itself.
 
4196
     */
 
4197
    //@{
 
4198
 
 
4199
    /**
 
4200
        Return the main grid window containing the grid cells.
 
4201
 
 
4202
        This window is always shown.
 
4203
     */
 
4204
    wxWindow *GetGridWindow() const;
 
4205
 
 
4206
    /**
 
4207
        Return the row labels window.
 
4208
 
 
4209
        This window is not shown if the row labels were hidden using
 
4210
        HideRowLabels().
 
4211
     */
 
4212
    wxWindow *GetGridRowLabelWindow() const;
 
4213
 
 
4214
    /**
 
4215
        Return the column labels window.
 
4216
 
 
4217
        This window is not shown if the columns labels were hidden using
 
4218
        HideColLabels().
 
4219
 
 
4220
        Depending on whether UseNativeColHeader() was called or not this can be
 
4221
        either a wxHeaderCtrl or a plain wxWindow.  This function returns a valid
 
4222
        window pointer in either case but in the former case you can also use
 
4223
        GetGridColHeader() to access it if you need wxHeaderCtrl-specific
 
4224
        functionality.
 
4225
     */
 
4226
    wxWindow *GetGridColLabelWindow() const;
 
4227
 
 
4228
    /**
 
4229
        Return the window in the top left grid corner.
 
4230
 
 
4231
        This window is shown only of both columns and row labels are shown and
 
4232
        normally doesn't contain anything. Clicking on it is handled by wxGrid
 
4233
        however and can be used to select the entire grid.
 
4234
     */
 
4235
    wxWindow *GetGridCornerLabelWindow() const;
 
4236
 
 
4237
    /**
 
4238
        Return the header control used for column labels display.
 
4239
 
 
4240
        This function can only be called if UseNativeColHeader() had been
 
4241
        called.
 
4242
     */
 
4243
    wxHeaderCtrl *GetGridColHeader() const;
 
4244
 
 
4245
    //@}
 
4246
 
 
4247
protected:
 
4248
    /**
 
4249
        Returns @true if this grid has support for cell attributes.
 
4250
 
 
4251
        The grid supports attributes if it has the associated table which, in
 
4252
        turn, has attributes support, i.e. wxGridTableBase::CanHaveAttributes()
 
4253
        returns @true.
 
4254
    */
 
4255
    bool CanHaveAttributes() const;
 
4256
 
 
4257
    /**
 
4258
        Get the minimal width of the given column/row.
 
4259
 
 
4260
        The value returned by this function may be different than that returned
 
4261
        by GetColMinimalAcceptableWidth() if SetColMinimalWidth() had been
 
4262
        called for this column.
 
4263
    */
 
4264
    int GetColMinimalWidth(int col) const;
 
4265
 
 
4266
    /**
 
4267
        Returns the coordinate of the right border specified column.
 
4268
    */
 
4269
    int GetColRight(int col) const;
 
4270
 
 
4271
    /**
 
4272
        Returns the coordinate of the left border specified column.
 
4273
    */
 
4274
    int GetColLeft(int col) const;
 
4275
 
 
4276
    /**
 
4277
        Returns the minimal size for the given column.
 
4278
 
 
4279
        The value returned by this function may be different than that returned
 
4280
        by GetRowMinimalAcceptableHeight() if SetRowMinimalHeight() had been
 
4281
        called for this row.
 
4282
    */
 
4283
    int GetRowMinimalHeight(int col) const;
 
4284
};
 
4285
 
 
4286
 
 
4287
 
 
4288
/**
 
4289
    @class wxGridUpdateLocker
 
4290
 
 
4291
    This small class can be used to prevent wxGrid from redrawing during its
 
4292
    lifetime by calling wxGrid::BeginBatch() in its constructor and
 
4293
    wxGrid::EndBatch() in its destructor. It is typically used in a function
 
4294
    performing several operations with a grid which would otherwise result in
 
4295
    flicker. For example:
 
4296
 
 
4297
    @code
 
4298
    void MyFrame::Foo()
 
4299
    {
 
4300
        m_grid = new wxGrid(this, ...);
 
4301
 
 
4302
        wxGridUpdateLocker noUpdates(m_grid);
 
4303
        m_grid-AppendColumn();
 
4304
        // ... many other operations with m_grid ...
 
4305
        m_grid-AppendRow();
 
4306
 
 
4307
        // destructor called, grid refreshed
 
4308
    }
 
4309
    @endcode
 
4310
 
 
4311
    Using this class is easier and safer than calling wxGrid::BeginBatch() and
 
4312
    wxGrid::EndBatch() because you don't risk missing the call the latter (due
 
4313
    to an exception for example).
 
4314
 
 
4315
    @library{wxadv}
 
4316
    @category{grid}
 
4317
*/
 
4318
class wxGridUpdateLocker
 
4319
{
 
4320
public:
 
4321
    /**
 
4322
        Creates an object preventing the updates of the specified @a grid. The
 
4323
        parameter could be @NULL in which case nothing is done. If @a grid is
 
4324
        non-@NULL then the grid must exist for longer than this
 
4325
        wxGridUpdateLocker object itself.
 
4326
 
 
4327
        The default constructor could be followed by a call to Create() to set
 
4328
        the grid object later.
 
4329
    */
 
4330
    wxGridUpdateLocker(wxGrid* grid = NULL);
 
4331
 
 
4332
    /**
 
4333
        Destructor reenables updates for the grid this object is associated
 
4334
        with.
 
4335
    */
 
4336
    ~wxGridUpdateLocker();
 
4337
 
 
4338
    /**
 
4339
        This method can be called if the object had been constructed using the
 
4340
        default constructor. It must not be called more than once.
 
4341
    */
 
4342
    void Create(wxGrid* grid);
 
4343
};
 
4344
 
 
4345
 
 
4346
 
 
4347
/**
 
4348
    @class wxGridEvent
 
4349
 
 
4350
    This event class contains information about various grid events.
 
4351
 
 
4352
    Notice that all grid event table macros are available in two versions:
 
4353
    @c EVT_GRID_XXX and @c EVT_GRID_CMD_XXX. The only difference between the
 
4354
    two is that the former doesn't allow to specify the grid window identifier
 
4355
    and so takes a single parameter, the event handler, but is not suitable if
 
4356
    there is more than one grid control in the window where the event table is
 
4357
    used (as it would catch the events from all the grids). The version with @c
 
4358
    CMD takes the id as first argument and the event handler as the second one
 
4359
    and so can be used with multiple grids as well. Otherwise there are no
 
4360
    difference between the two and only the versions without the id are
 
4361
    documented below for brevity.
 
4362
 
 
4363
    @beginEventTable{wxGridEvent}
 
4364
    @event{EVT_GRID_CELL_CHANGING(func)}
 
4365
        The user is about to change the data in a cell. The new cell value as
 
4366
        string is available from GetString() event object method. This event
 
4367
        can be vetoed if the change is not allowed.
 
4368
        Processes a @c wxEVT_GRID_CELL_CHANGING event type.
 
4369
    @event{EVT_GRID_CELL_CHANGED(func)}
 
4370
        The user changed the data in a cell. The old cell value as string is
 
4371
        available from GetString() event object method. Notice that vetoing
 
4372
        this event still works for backwards compatibility reasons but any new
 
4373
        code should only veto EVT_GRID_CELL_CHANGING event and not this one.
 
4374
        Processes a @c wxEVT_GRID_CELL_CHANGED event type.
 
4375
    @event{EVT_GRID_CELL_LEFT_CLICK(func)}
 
4376
        The user clicked a cell with the left mouse button. Processes a
 
4377
        @c wxEVT_GRID_CELL_LEFT_CLICK event type.
 
4378
    @event{EVT_GRID_CELL_LEFT_DCLICK(func)}
 
4379
        The user double-clicked a cell with the left mouse button. Processes a
 
4380
        @c wxEVT_GRID_CELL_LEFT_DCLICK event type.
 
4381
    @event{EVT_GRID_CELL_RIGHT_CLICK(func)}
 
4382
        The user clicked a cell with the right mouse button. Processes a
 
4383
        @c wxEVT_GRID_CELL_RIGHT_CLICK event type.
 
4384
    @event{EVT_GRID_CELL_RIGHT_DCLICK(func)}
 
4385
        The user double-clicked a cell with the right mouse button. Processes a
 
4386
        @c wxEVT_GRID_CELL_RIGHT_DCLICK event type.
 
4387
    @event{EVT_GRID_EDITOR_HIDDEN(func)}
 
4388
        The editor for a cell was hidden. Processes a
 
4389
        @c wxEVT_GRID_EDITOR_HIDDEN event type.
 
4390
    @event{EVT_GRID_EDITOR_SHOWN(func)}
 
4391
        The editor for a cell was shown. Processes a
 
4392
        @c wxEVT_GRID_EDITOR_SHOWN event type.
 
4393
    @event{EVT_GRID_LABEL_LEFT_CLICK(func)}
 
4394
        The user clicked a label with the left mouse button. Processes a
 
4395
        @c wxEVT_GRID_LABEL_LEFT_CLICK event type.
 
4396
    @event{EVT_GRID_LABEL_LEFT_DCLICK(func)}
 
4397
        The user double-clicked a label with the left mouse button. Processes a
 
4398
        @c wxEVT_GRID_LABEL_LEFT_DCLICK event type.
 
4399
    @event{EVT_GRID_LABEL_RIGHT_CLICK(func)}
 
4400
        The user clicked a label with the right mouse button. Processes a
 
4401
        @c wxEVT_GRID_LABEL_RIGHT_CLICK event type.
 
4402
    @event{EVT_GRID_LABEL_RIGHT_DCLICK(func)}
 
4403
        The user double-clicked a label with the right mouse button. Processes
 
4404
        a @c wxEVT_GRID_LABEL_RIGHT_DCLICK event type.
 
4405
    @event{EVT_GRID_SELECT_CELL(func)}
 
4406
        The given cell was made current, either by user or by the program via a
 
4407
        call to SetGridCursor() or GoToCell(). Processes a
 
4408
        @c wxEVT_GRID_SELECT_CELL event type.
 
4409
    @event{EVT_GRID_COL_MOVE(func)}
 
4410
        The user tries to change the order of the columns in the grid by
 
4411
        dragging the column specified by GetCol(). This event can be vetoed to
 
4412
        either prevent the user from reordering the column change completely
 
4413
        (but notice that if you don't want to allow it at all, you simply
 
4414
        shouldn't call wxGrid::EnableDragColMove() in the first place), vetoed
 
4415
        but handled in some way in the handler, e.g. by really moving the
 
4416
        column to the new position at the associated table level, or allowed to
 
4417
        proceed in which case wxGrid::SetColPos() is used to reorder the
 
4418
        columns display order without affecting the use of the column indices
 
4419
        otherwise.
 
4420
        This event macro corresponds to @c wxEVT_GRID_COL_MOVE event type.
 
4421
    @event{EVT_GRID_COL_SORT(func)}
 
4422
        This event is generated when a column is clicked by the user and its
 
4423
        name is explained by the fact that the custom reaction to a click on a
 
4424
        column is to sort the grid contents by this column. However the grid
 
4425
        itself has no special support for sorting and it's up to the handler of
 
4426
        this event to update the associated table. But if the event is handled
 
4427
        (and not vetoed) the grid supposes that the table was indeed resorted
 
4428
        and updates the column to indicate the new sort order and refreshes
 
4429
        itself.
 
4430
        This event macro corresponds to @c wxEVT_GRID_COL_SORT event type.
 
4431
    @endEventTable
 
4432
 
 
4433
    @library{wxadv}
 
4434
    @category{grid,events}
 
4435
*/
 
4436
class wxGridEvent : public wxNotifyEvent
 
4437
{
 
4438
public:
 
4439
    /**
 
4440
        Default constructor.
 
4441
    */
 
4442
    wxGridEvent();
 
4443
    /**
 
4444
        Constructor for initializing all event attributes.
 
4445
    */
 
4446
    wxGridEvent(int id, wxEventType type, wxObject* obj,
 
4447
                int row = -1, int col = -1, int x = -1, int y = -1,
 
4448
                bool sel = true, const wxKeyboardState& kbd = wxKeyboardState());
 
4449
 
 
4450
    /**
 
4451
        Returns @true if the Alt key was down at the time of the event.
 
4452
    */
 
4453
    bool AltDown() const;
 
4454
 
 
4455
    /**
 
4456
        Returns @true if the Control key was down at the time of the event.
 
4457
    */
 
4458
    bool ControlDown() const;
 
4459
 
 
4460
    /**
 
4461
        Column at which the event occurred.
 
4462
 
 
4463
        Notice that for a @c wxEVT_GRID_SELECT_CELL event this column is the
 
4464
        column of the newly selected cell while the previously selected cell
 
4465
        can be retrieved using wxGrid::GetGridCursorCol().
 
4466
    */
 
4467
    virtual int GetCol();
 
4468
 
 
4469
    /**
 
4470
        Position in pixels at which the event occurred.
 
4471
    */
 
4472
    wxPoint GetPosition();
 
4473
 
 
4474
    /**
 
4475
        Row at which the event occurred.
 
4476
 
 
4477
        Notice that for a @c wxEVT_GRID_SELECT_CELL event this row is the row
 
4478
        of the newly selected cell while the previously selected cell can be
 
4479
        retrieved using wxGrid::GetGridCursorRow().
 
4480
    */
 
4481
    virtual int GetRow();
 
4482
 
 
4483
    /**
 
4484
        Returns @true if the Meta key was down at the time of the event.
 
4485
    */
 
4486
    bool MetaDown() const;
 
4487
 
 
4488
    /**
 
4489
        Returns @true if the user is selecting grid cells, or @false if
 
4490
        deselecting.
 
4491
    */
 
4492
    bool Selecting();
 
4493
 
 
4494
    /**
 
4495
        Returns @true if the Shift key was down at the time of the event.
 
4496
    */
 
4497
    bool ShiftDown() const;
 
4498
};
 
4499
 
 
4500
 
 
4501
 
 
4502
/**
 
4503
    @class wxGridSizeEvent
 
4504
 
 
4505
    This event class contains information about a row/column resize event.
 
4506
 
 
4507
    @beginEventTable{wxGridSizeEvent}
 
4508
    @event{EVT_GRID_CMD_COL_SIZE(id, func)}
 
4509
        The user resized a column, corresponds to @c wxEVT_GRID_COL_SIZE event
 
4510
        type.
 
4511
    @event{EVT_GRID_CMD_ROW_SIZE(id, func)}
 
4512
        The user resized a row, corresponds to @c wxEVT_GRID_ROW_SIZE event
 
4513
        type.
 
4514
    @event{EVT_GRID_COL_SIZE(func)}
 
4515
        Same as EVT_GRID_CMD_COL_SIZE() but uses `wxID_ANY` id.
 
4516
    @event{EVT_GRID_ROW_SIZE(func)}
 
4517
        Same as EVT_GRID_CMD_ROW_SIZE() but uses `wxID_ANY` id.
 
4518
    @endEventTable
 
4519
 
 
4520
    @library{wxadv}
 
4521
    @category{grid,events}
 
4522
*/
 
4523
class wxGridSizeEvent : public wxNotifyEvent
 
4524
{
 
4525
public:
 
4526
    /**
 
4527
        Default constructor.
 
4528
    */
 
4529
    wxGridSizeEvent();
 
4530
    /**
 
4531
        Constructor for initializing all event attributes.
 
4532
    */
 
4533
    wxGridSizeEvent(int id, wxEventType type, wxObject* obj,
 
4534
                    int rowOrCol = -1, int x = -1, int y = -1,
 
4535
                    const wxKeyboardState& kbd = wxKeyboardState());
 
4536
 
 
4537
    /**
 
4538
        Returns @true if the Alt key was down at the time of the event.
 
4539
    */
 
4540
    bool AltDown() const;
 
4541
 
 
4542
    /**
 
4543
        Returns @true if the Control key was down at the time of the event.
 
4544
    */
 
4545
    bool ControlDown() const;
 
4546
 
 
4547
    /**
 
4548
        Position in pixels at which the event occurred.
 
4549
    */
 
4550
    wxPoint GetPosition();
 
4551
 
 
4552
    /**
 
4553
        Row or column at that was resized.
 
4554
    */
 
4555
    int GetRowOrCol();
 
4556
 
 
4557
    /**
 
4558
        Returns @true if the Meta key was down at the time of the event.
 
4559
    */
 
4560
    bool MetaDown() const;
 
4561
 
 
4562
    /**
 
4563
        Returns @true if the Shift key was down at the time of the event.
 
4564
    */
 
4565
    bool ShiftDown() const;
 
4566
};
 
4567
 
 
4568
 
 
4569
 
 
4570
/**
 
4571
    @class wxGridRangeSelectEvent
 
4572
 
 
4573
    @beginEventTable{wxGridRangeSelectEvent}
 
4574
    @event{EVT_GRID_RANGE_SELECT(func)}
 
4575
        The user selected a group of contiguous cells. Processes a
 
4576
        @c wxEVT_GRID_RANGE_SELECT event type.
 
4577
    @event{EVT_GRID_CMD_RANGE_SELECT(id, func)}
 
4578
        The user selected a group of contiguous cells; variant taking a window
 
4579
        identifier. Processes a @c wxEVT_GRID_RANGE_SELECT event type.
 
4580
    @endEventTable
 
4581
 
 
4582
    @library{wxadv}
 
4583
    @category{grid,events}
 
4584
*/
 
4585
class wxGridRangeSelectEvent : public wxNotifyEvent
 
4586
{
 
4587
public:
 
4588
    /**
 
4589
        Default constructor.
 
4590
    */
 
4591
    wxGridRangeSelectEvent();
 
4592
    /**
 
4593
        Constructor for initializing all event attributes.
 
4594
    */
 
4595
    wxGridRangeSelectEvent(int id, wxEventType type,
 
4596
                           wxObject* obj,
 
4597
                           const wxGridCellCoords& topLeft,
 
4598
                           const wxGridCellCoords& bottomRight,
 
4599
                           bool sel = true, const wxKeyboardState& kbd = wxKeyboardState());
 
4600
 
 
4601
    /**
 
4602
        Returns @true if the Alt key was down at the time of the event.
 
4603
    */
 
4604
    bool AltDown() const;
 
4605
 
 
4606
    /**
 
4607
        Returns @true if the Control key was down at the time of the event.
 
4608
    */
 
4609
    bool ControlDown() const;
 
4610
 
 
4611
    /**
 
4612
        Top left corner of the rectangular area that was (de)selected.
 
4613
    */
 
4614
    wxGridCellCoords GetBottomRightCoords();
 
4615
 
 
4616
    /**
 
4617
        Bottom row of the rectangular area that was (de)selected.
 
4618
    */
 
4619
    int GetBottomRow();
 
4620
 
 
4621
    /**
 
4622
        Left column of the rectangular area that was (de)selected.
 
4623
    */
 
4624
    int GetLeftCol();
 
4625
 
 
4626
    /**
 
4627
        Right column of the rectangular area that was (de)selected.
 
4628
    */
 
4629
    int GetRightCol();
 
4630
 
 
4631
    /**
 
4632
        Top left corner of the rectangular area that was (de)selected.
 
4633
    */
 
4634
    wxGridCellCoords GetTopLeftCoords();
 
4635
 
 
4636
    /**
 
4637
        Top row of the rectangular area that was (de)selected.
 
4638
    */
 
4639
    int GetTopRow();
 
4640
 
 
4641
    /**
 
4642
        Returns @true if the Meta key was down at the time of the event.
 
4643
    */
 
4644
    bool MetaDown() const;
 
4645
 
 
4646
    /**
 
4647
        Returns @true if the area was selected, @false otherwise.
 
4648
    */
 
4649
    bool Selecting();
 
4650
 
 
4651
    /**
 
4652
        Returns @true if the Shift key was down at the time of the event.
 
4653
    */
 
4654
    bool ShiftDown() const;
 
4655
};
 
4656
 
 
4657
 
 
4658
 
 
4659
/**
 
4660
    @class wxGridEditorCreatedEvent
 
4661
 
 
4662
    @beginEventTable{wxGridEditorCreatedEvent}
 
4663
    @event{EVT_GRID_EDITOR_CREATED(func)}
 
4664
        The editor for a cell was created. Processes a
 
4665
        @c wxEVT_GRID_EDITOR_CREATED event type.
 
4666
    @event{EVT_GRID_CMD_EDITOR_CREATED(id, func)}
 
4667
        The editor for a cell was created; variant taking a window identifier.
 
4668
        Processes a @c wxEVT_GRID_EDITOR_CREATED event type.
 
4669
    @endEventTable
 
4670
 
 
4671
    @library{wxadv}
 
4672
    @category{grid,events}
 
4673
*/
 
4674
class wxGridEditorCreatedEvent : public wxCommandEvent
 
4675
{
 
4676
public:
 
4677
    /**
 
4678
        Default constructor.
 
4679
    */
 
4680
    wxGridEditorCreatedEvent();
 
4681
    /**
 
4682
        Constructor for initializing all event attributes.
 
4683
    */
 
4684
    wxGridEditorCreatedEvent(int id, wxEventType type, wxObject* obj,
 
4685
                             int row, int col, wxControl* ctrl);
 
4686
 
 
4687
    /**
 
4688
        Returns the column at which the event occurred.
 
4689
    */
 
4690
    int GetCol();
 
4691
 
 
4692
    /**
 
4693
        Returns the edit control.
 
4694
    */
 
4695
    wxControl* GetControl();
 
4696
 
 
4697
    /**
 
4698
        Returns the row at which the event occurred.
 
4699
    */
 
4700
    int GetRow();
 
4701
 
 
4702
    /**
 
4703
        Sets the column at which the event occurred.
 
4704
    */
 
4705
    void SetCol(int col);
 
4706
 
 
4707
    /**
 
4708
        Sets the edit control.
 
4709
    */
 
4710
    void SetControl(wxControl* ctrl);
 
4711
 
 
4712
    /**
 
4713
        Sets the row at which the event occurred.
 
4714
    */
 
4715
    void SetRow(int row);
 
4716
};
 
4717