File: vscroll.h

package info (click to toggle)
wxwidgets3.0 3.0.5.1%2Bdfsg-2
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 120,464 kB
  • sloc: cpp: 896,633; makefile: 52,303; ansic: 21,971; sh: 5,713; python: 2,940; xml: 1,534; perl: 264; javascript: 33
file content (881 lines) | stat: -rw-r--r-- 33,248 bytes parent folder | download | duplicates (10)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
/////////////////////////////////////////////////////////////////////////////
// Name:        vscroll.h
// Purpose:     interface of wxVarHScrollHelper
// Author:      wxWidgets team
// Licence:     wxWindows licence
/////////////////////////////////////////////////////////////////////////////

/**
    @class wxVarScrollHelperBase

    This class provides all common base functionality for scroll calculations
    shared among all variable scrolled window implementations as well as
    automatic scrollbar functionality, saved scroll positions, controlling
    target windows to be scrolled, as well as defining all required virtual
    functions that need to be implemented for any orientation specific work.

    Documentation of this class is provided specifically for referencing use
    of the functions provided by this class for use with the variable scrolled
    windows that derive from here. You will likely want to derive your window
    from one of the already implemented variable scrolled windows rather than
    from wxVarScrollHelperBase directly.

    @library{wxcore}
    @category{miscwnd}

    @see wxHScrolledWindow, wxHVScrolledWindow, wxVScrolledWindow
*/
class wxVarScrollHelperBase
{
public:
    /**
        Constructor taking the target window to be scrolled by this helper
        class. This will attach scroll event handlers to the target window to
        catch and handle scroll events appropriately.
    */
    wxVarScrollHelperBase(wxWindow* winToScroll);

    /**
        Virtual destructor for detaching scroll event handlers attached with
        this helper class.
    */
    virtual ~wxVarScrollHelperBase();

    /**
        Translates the logical coordinate given to the current device
        coordinate. For example, if the window is scrolled 10 units and each
        scroll unit represents 10 device units (which may not be the case since
        this class allows for variable scroll unit sizes), a call to this
        function with a coordinate of 15 will return -85.

        @see CalcUnscrolledPosition()
    */
    int CalcScrolledPosition(int coord) const;

    /**
        Translates the device coordinate given to the corresponding logical
        coordinate. For example, if the window is scrolled 10 units and each
        scroll unit represents 10 device units (which may not be the case since
        this class allows for variable scroll unit sizes), a call to this
        function with a coordinate of 15 will return 115.

        @see CalcScrolledPosition()
    */
    int CalcUnscrolledPosition(int coord) const;

    /**
        With physical scrolling on (when this is @true), the device origin is
        changed properly when a wxPaintDC is prepared, children are actually
        moved and laid out properly, and the contents of the window (pixels)
        are actually moved. When this is @false, you are responsible for
        repainting any invalidated areas of the window yourself to account for
        the new scroll position.
    */
    void EnablePhysicalScrolling(bool scrolling = true);

    /**
        This function needs to be overridden in the in the derived class to
        return the window size with respect to the opposing orientation. If
        this is a vertical scrolled window, it should return the height.

        @see GetOrientationTargetSize()
    */
    virtual int GetNonOrientationTargetSize() const = 0;

    /**
        This function need to be overridden to return the orientation that this
        helper is working with, either @c wxHORIZONTAL or @c wxVERTICAL.
    */
    virtual wxOrientation GetOrientation() const = 0;

    /**
        This function needs to be overridden in the in the derived class to
        return the window size with respect to the orientation this helper is
        working with. If this is a vertical scrolled window, it should return
        the width.

        @see GetNonOrientationTargetSize()
    */
    virtual int GetOrientationTargetSize() const = 0;

    /**
        This function will return the target window this helper class is
        currently scrolling.

        @see SetTargetWindow()
    */
    virtual wxWindow* GetTargetWindow() const;

    /**
        Returns the index of the first visible unit based on the scroll
        position.
    */
    size_t GetVisibleBegin() const;

    /**
        Returns the index of the last visible unit based on the scroll
        position. This includes the last unit even if it is only partially
        visible.
    */
    size_t GetVisibleEnd() const;

    /**
        Returns @true if the given scroll unit is currently visible (even if
        only partially visible) or @false otherwise.
    */
    bool IsVisible(size_t unit) const;

    /**
        Recalculate all parameters and repaint all units.
    */
    virtual void RefreshAll();

    /**
        Normally the window will scroll itself, but in some rare occasions you
        might want it to scroll (part of) another window (e.g. a child of it in
        order to scroll only a portion the area between the scrollbars like a
        spreadsheet where only the cell area will move).

        @see GetTargetWindow()
    */
    virtual void SetTargetWindow(wxWindow* target);

    /**
        Update the thumb size shown by the scrollbar.
    */
    virtual void UpdateScrollbar();

    /**
        Returns the virtual scroll unit under the device unit given accounting
        for scroll position or @c wxNOT_FOUND if none (i.e. if it is below the
        last item).
    */
    int VirtualHitTest(wxCoord coord) const;


protected:

    /**
        This function doesn't have to be overridden but it may be useful to do
        so if calculating the units' sizes is a relatively expensive operation
        as it gives your code a chance to calculate several of them at once and
        cache the result if necessary.

        OnGetUnitsSizeHint() is normally called just before OnGetUnitSize() but
        you shouldn't rely on the latter being called for all units in the
        interval specified here. It is also possible that OnGetUnitSize() will
        be called for units outside of this interval, so this is really just a
        hint, not a promise.

        Finally, note that @a unitMin is inclusive, while @a unitMax is
        exclusive.
    */
    virtual void OnGetUnitsSizeHint(size_t unitMin, size_t unitMax) const;

    /**
        When the number of scroll units change, we try to estimate the total
        size of all units when the full window size is needed (i.e. to
        calculate the scrollbar thumb size). This is a rather expensive
        operation in terms of unit access, so if the user code may estimate the
        average size better or faster than we do, it should override this
        function to implement its own logic. This function should return the
        best guess for the total virtual window size.

        @note Although returning a totally wrong value would still work, it
              risks resulting in very strange scrollbar behaviour so this
              function should really try to make the best guess possible.
    */
    virtual wxCoord EstimateTotalSize() const;

    /**
        This function must be overridden in the derived class, and should
        return the size of the given unit in pixels.
    */
    virtual wxCoord OnGetUnitSize(size_t unit) const = 0;
};



/**
    @class wxVarVScrollHelper

    This class provides functions wrapping the wxVarScrollHelperBase class,
    targeted for vertical-specific scrolling.

    Like wxVarScrollHelperBase, this class is mostly only useful to those
    classes built into wxWidgets deriving from here, and this documentation is
    mostly only provided for referencing the functions provided by this class.
    You will likely want to derive your window from wxVScrolledWindow rather
    than from here directly.

    @library{wxcore}
    @category{miscwnd}

    @see wxHScrolledWindow, wxHVScrolledWindow, wxVScrolledWindow
*/
class wxVarVScrollHelper : public wxVarScrollHelperBase
{
public:
    /**
        Constructor taking the target window to be scrolled by this helper
        class. This will attach scroll event handlers to the target window to
        catch and handle scroll events appropriately.
    */
    wxVarVScrollHelper(wxWindow* winToScroll);

    /**
        Returns the number of rows the target window contains.

        @see SetRowCount()
    */
    size_t GetRowCount() const;

    /**
        Returns the index of the first visible row based on the scroll
        position.
    */
    size_t GetVisibleRowsBegin() const;

    /**
        Returns the index of the last visible row based on the scroll position.
        This includes the last row even if it is only partially visible.
    */
    size_t GetVisibleRowsEnd() const;

    /**
        Returns @true if the given row is currently visible (even if only
        partially visible) or @false otherwise.
    */
    bool IsRowVisible(size_t row) const;

    /**
        Triggers a refresh for just the given row's area of the window if it's
        visible.
    */
    virtual void RefreshRow(size_t row);

    /**
        Triggers a refresh for the area between the specified range of rows
        given (inclusively).
    */
    virtual void RefreshRows(size_t from, size_t to);

    /**
        Scroll by the specified number of pages which may be positive (to
        scroll down) or negative (to scroll up).
    */
    virtual bool ScrollRowPages(int pages);

    /**
        Scroll by the specified number of rows which may be positive (to scroll
        down) or negative (to scroll up).

        @return @true if the window was scrolled, @false otherwise (for
                example, if we're trying to scroll down but we are already
                showing the last row).
    */
    virtual bool ScrollRows(int rows);

    /**
        Scroll to the specified row. It will become the first visible row in
        the window.

        @return @true if we scrolled the window, @false if nothing was done.
    */
    bool ScrollToRow(size_t row);

    /**
        Set the number of rows the window contains. The derived class must
        provide the heights for all rows with indices up to the one given here
        in it's OnGetRowHeight() implementation.

        @see GetRowCount()
    */
    void SetRowCount(size_t rowCount);

protected:

    /**
        This function doesn't have to be overridden but it may be useful to do
        so if calculating the rows' sizes is a relatively expensive operation
        as it gives your code a chance to calculate several of them at once and
        cache the result if necessary.

        OnGetRowsHeightHint() is normally called just before OnGetRowHeight()
        but you shouldn't rely on the latter being called for all rows in the
        interval specified here. It is also possible that OnGetRowHeight() will
        be called for units outside of this interval, so this is really just a
        hint, not a promise.

        Finally, note that @a rowMin is inclusive, while @a rowMax is
        exclusive.
    */
    virtual void OnGetRowsHeightHint(size_t rowMin, size_t rowMax) const;

    /**
        This class forwards calls from EstimateTotalSize() to this function so
        derived classes can override either just the height or the width
        estimation, or just estimate both differently if desired in any
        wxHVScrolledWindow derived class.

        @note This function will not be called if EstimateTotalSize() is
              overridden in your derived class.
    */
    virtual wxCoord EstimateTotalHeight() const;

    /**
        This function must be overridden in the derived class, and should
        return the height of the given row in pixels.
    */
    virtual wxCoord OnGetRowHeight(size_t row) const = 0;
};



/**
    @class wxVarHScrollHelper

    This class provides functions wrapping the wxVarScrollHelperBase class,
    targeted for horizontal-specific scrolling.

    Like wxVarScrollHelperBase, this class is mostly only useful to those
    classes built into wxWidgets deriving from here, and this documentation is
    mostly only provided for referencing the functions provided by this class.
    You will likely want to derive your window from wxHScrolledWindow rather
    than from here directly.

    @library{wxcore}
    @category{miscwnd}

    @see wxHScrolledWindow, wxHVScrolledWindow, wxVScrolledWindow
*/
class wxVarHScrollHelper : public wxVarScrollHelperBase
{
public:
    /**
        Constructor taking the target window to be scrolled by this helper
        class. This will attach scroll event handlers to the target window to
        catch and handle scroll events appropriately.
    */
    wxVarHScrollHelper(wxWindow* winToScroll);

    /**
        Returns the number of columns the target window contains.

        @see SetColumnCount()
    */
    size_t GetColumnCount() const;

    /**
        Returns the index of the first visible column based on the scroll
        position.
    */
    size_t GetVisibleColumnsBegin() const;

    /**
        Returns the index of the last visible column based on the scroll
        position. This includes the last column even if it is only partially
        visible.
    */
    size_t GetVisibleColumnsEnd() const;

    /**
        Returns @true if the given column is currently visible (even if only
        partially visible) or @false otherwise.
    */
    bool IsColumnVisible(size_t column) const;

    /**
        Triggers a refresh for just the given column's area of the window if
        it's visible.
    */
    virtual void RefreshColumn(size_t column);

    /**
        Triggers a refresh for the area between the specified range of columns
        given (inclusively).
    */
    virtual void RefreshColumns(size_t from, size_t to);

    /**
        Scroll by the specified number of pages which may be positive (to
        scroll right) or negative (to scroll left).
    */
    virtual bool ScrollColumnPages(int pages);

    /**
        Scroll by the specified number of columns which may be positive (to
        scroll right) or negative (to scroll left).

        @return @true if the window was scrolled, @false otherwise (for
                example, if we're trying to scroll right but we are already
                showing the last column).
    */
    virtual bool ScrollColumns(int columns);

    /**
        Scroll to the specified column. It will become the first visible column
        in the window.

        @return @true if we scrolled the window, @false if nothing was done.
    */
    bool ScrollToColumn(size_t column);

    /**
        Set the number of columns the window contains. The derived class must
        provide the widths for all columns with indices up to the one given
        here in it's OnGetColumnWidth() implementation.

        @see GetColumnCount()
    */
    void SetColumnCount(size_t columnCount);

protected:

    /**
        This class forwards calls from EstimateTotalSize() to this function so
        derived classes can override either just the height or the width
        estimation, or just estimate both differently if desired in any
        wxHVScrolledWindow derived class.

        @note This function will not be called if EstimateTotalSize() is
              overridden in your derived class.
    */
    virtual wxCoord EstimateTotalWidth() const;

    /**
        This function doesn't have to be overridden but it may be useful to do
        so if calculating the columns' sizes is a relatively expensive
        operation as it gives your code a chance to calculate several of them
        at once and cache the result if necessary.

        OnGetColumnsWidthHint() is normally called just before
        OnGetColumnWidth() but you shouldn't rely on the latter being called
        for all columns in the interval specified here. It is also possible
        that OnGetColumnWidth() will be called for units outside of this
        interval, so this is really just a hint, not a promise.

        Finally, note that @a columnMin is inclusive, while @a columnMax is
        exclusive.
    */
    virtual void OnGetColumnsWidthHint(size_t columnMin,
                                       size_t columnMax) const;

    /**
        This function must be overridden in the derived class, and should
        return the width of the given column in pixels.
    */
    virtual wxCoord OnGetColumnWidth(size_t column) const = 0;
};



/**
    @class wxVarHVScrollHelper

    This class provides functions wrapping the wxVarHScrollHelper and
    wxVarVScrollHelper classes, targeted for scrolling a window in both axis.
    Since this class is also the join class of the horizontal and vertical
    scrolling functionality, it also addresses some wrappers that help avoid
    the need to specify class scope in your wxHVScrolledWindow derived class
    when using wxVarScrollHelperBase functionality.

    Like all three of it's scroll helper base classes, this class is mostly
    only useful to those classes built into wxWidgets deriving from here, and
    this documentation is mostly only provided for referencing the functions
    provided by this class. You will likely want to derive your window from
    wxHVScrolledWindow rather than from here directly.

    @library{wxcore}
    @category{miscwnd}

    @see wxHScrolledWindow, wxHVScrolledWindow, wxVScrolledWindow
*/
class wxVarHVScrollHelper : public wxVarVScrollHelper,
                             public wxVarHScrollHelper
{
public:
    /**
        Constructor taking the target window to be scrolled by this helper
        class. This will attach scroll event handlers to the target window to
        catch and handle scroll events appropriately.
    */
    wxVarHVScrollHelper(wxWindow* winToScroll);

    /**
        With physical scrolling on (when this is @true), the device origin is
        changed properly when a wxPaintDC is prepared, children are actually
        moved and laid out properly, and the contents of the window (pixels)
        are actually moved. When this is @false, you are responsible for
        repainting any invalidated areas of the window yourself to account for
        the new scroll position.

        @param vscrolling
            Specifies if physical scrolling should be turned on when scrolling
            vertically.
        @param hscrolling
            Specifies if physical scrolling should be turned on when scrolling
            horizontally.
    */
    void EnablePhysicalScrolling(bool vscrolling = true,
                                 bool hscrolling = true);

    /**
        Returns the number of columns and rows the target window contains.

        @see SetRowColumnCount()
    */
    wxSize GetRowColumnCount() const;

    /**
        Returns the index of the first visible column and row based on the
        current scroll position.
    */
    wxPosition GetVisibleBegin() const;

    /**
        Returns the index of the last visible column and row based on the
        scroll position. This includes any partially visible columns or rows.
    */
    wxPosition GetVisibleEnd() const;

    //@{
    /**
        Returns @true if both the given row and column are currently visible
        (even if only partially visible) or @false otherwise.
    */
    bool IsVisible(size_t row, size_t column) const;
    bool IsVisible(const wxPosition& pos) const;
    //@}

    //@{
    /**
        Triggers a refresh for just the area shared between the given row and
        column of the window if it is visible.
    */
    virtual void RefreshRowColumn(size_t row, size_t column);
    virtual void RefreshRowColumn(const wxPosition& pos);
    //@}

    //@{
    /**
        Triggers a refresh for the visible area shared between all given rows
        and columns (inclusive) of the window. If the target window for both
        orientations is the same, the rectangle of cells is refreshed; if the
        target windows differ, the entire client size opposite the orientation
        direction is refreshed between the specified limits.
    */
    virtual void RefreshRowsColumns(size_t fromRow, size_t toRow,
                                    size_t fromColumn, size_t toColumn);
    virtual void RefreshRowsColumns(const wxPosition& from,
                                    const wxPosition& to);
    //@}

    //@{
    /**
        Scroll to the specified row and column. It will become the first
        visible row and column in the window. Returns @true if we scrolled the
        window, @false if nothing was done.
    */
    bool ScrollToRowColumn(size_t row, size_t column);
    bool ScrollToRowColumn(const wxPosition& pos);
    //@}

    /**
        Set the number of rows and columns the target window will contain. The
        derived class must provide the sizes for all rows and columns with
        indices up to the ones given here in it's OnGetRowHeight() and
        OnGetColumnWidth() implementations, respectively.

        @see GetRowColumnCount()
    */
    void SetRowColumnCount(size_t rowCount, size_t columnCount);

    //@{
    /**
        Returns the virtual scroll unit under the device unit given accounting
        for scroll position or @c wxNOT_FOUND (for the row, column, or possibly
        both values) if none.
    */
    wxPosition VirtualHitTest(wxCoord x, wxCoord y) const;
    wxPosition VirtualHitTest(const wxPoint& pos) const;
    //@}
};



/**
    @class wxVScrolledWindow

    In the name of this class, "V" may stand for "variable" because it can be
    used for scrolling rows of variable heights; "virtual", because it is not
    necessary to know the heights of all rows in advance -- only those which
    are shown on the screen need to be measured; or even "vertical", because
    this class only supports scrolling vertically.

    In any case, this is a generalization of wxScrolled which can be only used
    when all rows have the same heights. It lacks some other wxScrolled
    features however, notably it can't scroll specific pixel sizes of the
    window or its exact client area size.

    To use this class, you need to derive from it and implement the
    OnGetRowHeight() pure virtual method. You also must call SetRowCount() to
    let the base class know how many rows it should display, but from that
    moment on the scrolling is handled entirely by wxVScrolledWindow. You only
    need to draw the visible part of contents in your @c OnPaint() method as
    usual. You should use GetVisibleRowsBegin() and GetVisibleRowsEnd() to
    select the lines to display. Note that the device context origin is not
    shifted so the first visible row always appears at the point (0, 0) in
    physical as well as logical coordinates.

    @section vscrolledwindow_compat wxWidgets 2.8 Compatibility Functions

    The following functions provide backwards compatibility for applications
    originally built using wxVScrolledWindow in 2.6 or 2.8. Originally,
    wxVScrolledWindow referred to scrolling "lines". We now use "units" in
    wxVarScrollHelperBase to avoid implying any orientation (since the
    functions are used for both horizontal and vertical scrolling in derived
    classes). And in the new wxVScrolledWindow and wxHScrolledWindow classes,
    we refer to them as "rows" and "columns", respectively. This is to help
    clear some confusion in not only those classes, but also in
    wxHVScrolledWindow where functions are inherited from both.

    You are encouraged to update any existing code using these function to use
    the new replacements mentioned below, and avoid using these functions for
    any new code as they are deprecated.

    @beginTable
    @row2col{ <tt>size_t %GetFirstVisibleLine() const</tt>,
        Deprecated for GetVisibleRowsBegin(). }
    @row2col{ <tt>size_t %GetLastVisibleLine() const</tt>,
        Deprecated for GetVisibleRowsEnd(). This function originally had a
        slight design flaw in that it was possible to return
        <tt>(size_t)-1</tt> (ie: a large positive number) if the scroll
        position was 0 and the first line wasn't completely visible. }
    @row2col{ <tt>size_t %GetLineCount() const</tt>,
        Deprecated for GetRowCount(). }
    @row2col{ <tt>int %HitTest(wxCoord x\, wxCoord y) const
              @n  int %HitTest(const wxPoint& pt) const</tt>,
        Deprecated for VirtualHitTest(). }
    @row2col{ <tt>virtual wxCoord %OnGetLineHeight(size_t line) const</tt>,
        Deprecated for OnGetRowHeight(). }
    @row2col{ <tt>virtual void %OnGetLinesHint(size_t lineMin\, size_t lineMax) const</tt>,
        Deprecated for OnGetRowsHeightHint(). }
    @row2col{ <tt>virtual void %RefreshLine(size_t line)</tt>,
        Deprecated for RefreshRow(). }
    @row2col{ <tt>virtual void %RefreshLines(size_t from\, size_t to)</tt>,
        Deprecated for RefreshRows(). }
    @row2col{ <tt>virtual bool %ScrollLines(int lines)</tt>,
        Deprecated for ScrollRows(). }
    @row2col{ <tt>virtual bool %ScrollPages(int pages)</tt>,
        Deprecated for ScrollRowPages(). }
    @row2col{ <tt>bool %ScrollToLine(size_t line)</tt>,
        Deprecated for ScrollToRow(). }
    @row2col{ <tt>void %SetLineCount(size_t count)</tt>,
        Deprecated for SetRowCount(). }
    @endTable

    @library{wxcore}
    @category{miscwnd}

    @see wxHScrolledWindow, wxHVScrolledWindow
*/
class wxVScrolledWindow : public wxPanel, public wxVarVScrollHelper
{
public:
    /**
        Default constructor, you must call Create() later.
    */
    wxVScrolledWindow();
    /**
        This is the normal constructor, no need to call Create() after using
        this constructor.

        @note @c wxVSCROLL is always automatically added to the style, there is
              no need to specify it explicitly.

        @param parent
            The parent window, must not be @NULL.
        @param id
            The identifier of this window, wxID_ANY by default.
        @param pos
            The initial window position.
        @param size
            The initial window size.
        @param style
            The window style. There are no special style bits defined for this
            class.
        @param name
            The name for this window; usually not used.
    */
    wxVScrolledWindow(wxWindow* parent, wxWindowID id = wxID_ANY,
                      const wxPoint& pos = wxDefaultPosition,
                      const wxSize& size = wxDefaultSize, long style = 0,
                      const wxString& name = wxPanelNameStr);

    /**
        Same as the non-default constructor, but returns a status code: @true if
        ok, @false if the window couldn't be created.

        Just as with the constructor, the @c wxVSCROLL style is always used,
        there is no need to specify it explicitly.
    */
    bool Create(wxWindow* parent, wxWindowID id = wxID_ANY,
                const wxPoint& pos = wxDefaultPosition,
                const wxSize& size = wxDefaultSize, long style = 0,
                const wxString& name = wxPanelNameStr);
};



/**
    @class wxHScrolledWindow

    In the name of this class, "H" stands for "horizontal" because it can be
    used for scrolling columns of variable widths. It is not necessary to know
    the widths of all columns in advance -- only those which are shown on the
    screen need to be measured.

    In any case, this is a generalization of wxScrolled which can be only used
    when all columns have the same widths. It lacks some other wxScrolled
    features however, notably it can't scroll specific pixel sizes of the
    window or its exact client area size.

    To use this class, you need to derive from it and implement the
    OnGetColumnWidth() pure virtual method. You also must call SetColumnCount()
    to let the base class know how many columns it should display, but from
    that moment on the scrolling is handled entirely by wxHScrolledWindow. You
    only need to draw the visible part of contents in your @c OnPaint() method
    as usual. You should use GetVisibleColumnsBegin() and
    GetVisibleColumnsEnd() to select the lines to display. Note that the device
    context origin is not shifted so the first visible column always appears at
    the point (0, 0) in physical as well as logical coordinates.

    @library{wxcore}
    @category{miscwnd}

    @see wxHVScrolledWindow, wxVScrolledWindow
*/
class wxHScrolledWindow : public wxPanel, public wxVarHScrollHelper
{
public:
    /**
        Default constructor, you must call Create() later.
    */
    wxHScrolledWindow();
    /**
        This is the normal constructor, no need to call Create() after using
        this constructor.

        @note @c wxHSCROLL is always automatically added to the style, there is
              no need to specify it explicitly.

        @param parent
            The parent window, must not be @NULL.
        @param id
            The identifier of this window, wxID_ANY by default.
        @param pos
            The initial window position.
        @param size
            The initial window size.
        @param style
            The window style. There are no special style bits defined for this
            class.
        @param name
            The name for this window; usually not used.
    */
    wxHScrolledWindow(wxWindow* parent, wxWindowID id = wxID_ANY,
                      const wxPoint& pos = wxDefaultPosition,
                      const wxSize& size = wxDefaultSize, long style = 0,
                      const wxString& name = wxPanelNameStr);

    /**
        Same as the non-default constructor, but returns a status code: @true if
        ok, @false if the window couldn't be created.

        Just as with the constructor, the @c wxHSCROLL style is always used,
        there is no need to specify it explicitly.
    */
    bool Create(wxWindow* parent, wxWindowID id = wxID_ANY,
                const wxPoint& pos = wxDefaultPosition,
                const wxSize& size = wxDefaultSize, long style = 0,
                const wxString& name = wxPanelNameStr);
};



/**
    @class wxHVScrolledWindow

    This window inherits all functionality of both vertical and horizontal,
    variable scrolled windows. It automatically handles everything needed to
    scroll both axis simultaneously with both variable row heights and variable
    column widths.

    In any case, this is a generalization of wxScrolled which can be only used
    when all rows and columns are the same size. It lacks some other wxScrolled
    features however, notably it can't scroll specific pixel sizes of the
    window or its exact client area size.

    To use this class, you must derive from it and implement both the
    OnGetRowHeight() and OnGetColumnWidth() pure virtual methods to let the
    base class know how many rows and columns it should display. You also need
    to set the total rows and columns the window contains, but from that moment
    on the scrolling is handled entirely by wxHVScrolledWindow. You only need
    to draw the visible part of contents in your @c OnPaint() method as usual.
    You should use GetVisibleBegin() and GetVisibleEnd() to select the lines to
    display. Note that the device context origin is not shifted so the first
    visible row and column always appear at the point (0, 0) in physical as
    well as logical coordinates.

    @library{wxcore}
    @category{miscwnd}

    @see wxHScrolledWindow, wxVScrolledWindow
*/
class wxHVScrolledWindow : public wxPanel, public wxVarHVScrollHelper
{
public:
    /**
        Default constructor, you must call Create() later.
    */
    wxHVScrolledWindow();
    /**
        This is the normal constructor, no need to call Create() after using
        this constructor.

        @note @c wxHSCROLL and @c wxVSCROLL are always automatically added to
              the style, there is no need to specify it explicitly.

        @param parent
            The parent window, must not be @NULL.
        @param id
            The identifier of this window, wxID_ANY by default.
        @param pos
            The initial window position.
        @param size
            The initial window size.
        @param style
            The window style. There are no special style bits defined for this
            class.
        @param name
            The name for this window; usually not used.
    */
    wxHVScrolledWindow(wxWindow* parent, wxWindowID id = wxID_ANY,
                       const wxPoint& pos = wxDefaultPosition,
                       const wxSize& size = wxDefaultSize, long style = 0,
                       const wxString& name = wxPanelNameStr);

    /**
        Same as the non-default constructor, but returns a status code: @true if
        ok, @false if the window couldn't be created.

        Just as with the constructor, the @c wxHSCROLL and @c wxVSCROLL styles
        are always used, there is no need to specify them explicitly.
    */
    bool Create(wxWindow* parent, wxWindowID id = wxID_ANY,
                const wxPoint& pos = wxDefaultPosition,
                const wxSize& size = wxDefaultSize, long style = 0,
                const wxString& name = wxPanelNameStr);
};