]>
Commit | Line | Data |
---|---|---|
23324ae1 FM |
1 | ///////////////////////////////////////////////////////////////////////////// |
2 | // Name: vscroll.h | |
e54c96f1 | 3 | // Purpose: interface of wxVarHScrollHelper |
23324ae1 FM |
4 | // Author: wxWidgets team |
5 | // RCS-ID: $Id$ | |
6 | // Licence: wxWindows license | |
7 | ///////////////////////////////////////////////////////////////////////////// | |
8 | ||
9 | /** | |
10 | @class wxVarHScrollHelper | |
11 | @wxheader{vscroll.h} | |
7c913512 FM |
12 | |
13 | This class provides functions wrapping the | |
23324ae1 FM |
14 | wxVarScrollHelperBase class, targeted for |
15 | horizontal-specific scrolling using wxHScrolledWindow. | |
7c913512 | 16 | |
23324ae1 FM |
17 | Like wxVarScrollHelperBase, this class is mostly only useful to those classes |
18 | built into wxWidgets deriving from here, and this documentation is mostly | |
19 | only provided for referencing those functions provided. You will likely want | |
20 | to derive your window from wxHScrolledWindow rather than from here directly. | |
7c913512 | 21 | |
23324ae1 FM |
22 | @library{wxcore} |
23 | @category{FIXME} | |
7c913512 | 24 | |
e54c96f1 | 25 | @see wxHScrolledWindow, wxHVScrolledWindow, wxVScrolledWindow |
23324ae1 FM |
26 | */ |
27 | class wxVarHScrollHelper : public wxVarScrollHelperBase | |
28 | { | |
29 | public: | |
30 | /** | |
31 | Constructor taking the target window to be scrolled by this helper class. | |
32 | This will attach scroll event handlers to the target window to catch and | |
33 | handle scroll events appropriately. | |
34 | */ | |
35 | wxVarHScrollHelper(wxWindow* winToScroll); | |
36 | ||
37 | /** | |
38 | This class forwards calls from | |
39 | wxVarScrollHelperBase::EstimateTotalSize | |
40 | to this function so derived classes can override either just the height or | |
41 | the width estimation, or just estimate both differently if desired in any | |
42 | wxHVScrolledWindow derived class. | |
23324ae1 FM |
43 | Please note that this function will not be called if @c EstimateTotalSize() |
44 | is overridden in your derived class. | |
45 | */ | |
328f5751 | 46 | virtual wxCoord EstimateTotalWidth() const; |
23324ae1 FM |
47 | |
48 | /** | |
49 | Returns the number of columns the target window contains. | |
3c4f71cc | 50 | |
4cc4bfaf | 51 | @see SetColumnCount() |
23324ae1 | 52 | */ |
328f5751 | 53 | size_t GetColumnCount() const; |
23324ae1 FM |
54 | |
55 | /** | |
56 | Returns the index of the first visible column based on the scroll position. | |
57 | */ | |
328f5751 | 58 | size_t GetVisibleColumnsBegin() const; |
23324ae1 FM |
59 | |
60 | /** | |
61 | Returns the index of the last visible column based on the scroll position. This | |
62 | includes the last column even if it is only partially visible. | |
63 | */ | |
328f5751 | 64 | size_t GetVisibleColumnsEnd() const; |
23324ae1 FM |
65 | |
66 | /** | |
67 | Returns @true if the given column is currently visible (even if only | |
68 | partially visible) or @false otherwise. | |
69 | */ | |
328f5751 | 70 | bool IsColumnVisible(size_t column) const; |
23324ae1 FM |
71 | |
72 | /** | |
73 | This function must be overridden in the derived class, and should return the | |
74 | width of the given column in pixels. | |
75 | */ | |
328f5751 | 76 | virtual wxCoord OnGetColumnWidth(size_t column) const; |
23324ae1 FM |
77 | |
78 | /** | |
79 | This function doesn't have to be overridden but it may be useful to do so if | |
80 | calculating the columns' sizes is a relatively expensive operation as it gives | |
81 | your code a chance to calculate several of them at once and cache the result | |
82 | if necessary. | |
23324ae1 FM |
83 | @c OnGetColumnsWidthHint() is normally called just before |
84 | OnGetColumnWidth() but you | |
85 | shouldn't rely on the latter being called for all columns in the interval | |
86 | specified here. It is also possible that OnGetColumnWidth() will be called for | |
87 | units outside of this interval, so this is really just a hint, not a promise. | |
23324ae1 FM |
88 | Finally, note that columnMin is inclusive, while columnMax is exclusive. |
89 | */ | |
90 | virtual void OnGetColumnsWidthHint(size_t columnMin, | |
328f5751 | 91 | size_t columnMax) const; |
23324ae1 FM |
92 | |
93 | /** | |
94 | Triggers a refresh for just the given column's area of the window if it's | |
95 | visible. | |
96 | */ | |
97 | virtual void RefreshColumn(size_t column); | |
98 | ||
99 | /** | |
100 | Triggers a refresh for the area between the specified range of columns given | |
101 | (inclusively). | |
102 | */ | |
103 | virtual void RefreshColumns(size_t from, size_t to); | |
104 | ||
105 | /** | |
106 | Scroll by the specified number of pages which may be positive (to scroll right) | |
107 | or negative (to scroll left). | |
108 | */ | |
109 | virtual bool ScrollColumnPages(int pages); | |
110 | ||
111 | /** | |
112 | Scroll by the specified number of columns which may be positive (to scroll | |
113 | right) | |
114 | or negative (to scroll left). | |
23324ae1 FM |
115 | Returns @true if the window was scrolled, @false otherwise (for |
116 | example, if we're trying to scroll right but we are already showing the last | |
117 | column). | |
118 | */ | |
119 | virtual bool ScrollColumns(int columns); | |
120 | ||
121 | /** | |
122 | Scroll to the specified column. It will become the first visible column in the | |
123 | window. | |
23324ae1 FM |
124 | Returns @true if we scrolled the window, @false if nothing was done. |
125 | */ | |
126 | bool ScrollToColumn(size_t column); | |
127 | ||
128 | /** | |
129 | Set the number of columns the window contains. The derived class must provide | |
130 | the widths for all columns with indices up to the one given here in it's | |
131 | OnGetColumnWidth() implementation. | |
132 | */ | |
133 | void SetColumnCount(size_t columnCount); | |
134 | }; | |
135 | ||
136 | ||
e54c96f1 | 137 | |
23324ae1 FM |
138 | /** |
139 | @class wxVarVScrollHelper | |
140 | @wxheader{vscroll.h} | |
7c913512 FM |
141 | |
142 | This class provides functions wrapping the | |
23324ae1 FM |
143 | wxVarScrollHelperBase class, targeted for |
144 | vertical-specific scrolling using wxVScrolledWindow. | |
7c913512 | 145 | |
23324ae1 FM |
146 | Like wxVarScrollHelperBase, this class is mostly only useful to those classes |
147 | built into wxWidgets deriving from here, and this documentation is mostly | |
148 | only provided for referencing those functions provided. You will likely want | |
149 | to derive your window from wxVScrolledWindow rather than from here directly. | |
7c913512 | 150 | |
23324ae1 FM |
151 | @library{wxcore} |
152 | @category{FIXME} | |
7c913512 | 153 | |
e54c96f1 | 154 | @see wxHScrolledWindow, wxHVScrolledWindow, wxVScrolledWindow |
23324ae1 FM |
155 | */ |
156 | class wxVarVScrollHelper : public wxVarScrollHelperBase | |
157 | { | |
158 | public: | |
159 | /** | |
160 | Constructor taking the target window to be scrolled by this helper class. | |
161 | This will attach scroll event handlers to the target window to catch and | |
162 | handle scroll events appropriately. | |
163 | */ | |
164 | wxVarVScrollHelper(wxWindow* winToScroll); | |
165 | ||
166 | /** | |
167 | This class forwards calls from | |
168 | wxVarScrollHelperBase::EstimateTotalSize | |
169 | to this function so derived classes can override either just the height or | |
170 | the width estimation, or just estimate both differently if desired in any | |
171 | wxHVScrolledWindow derived class. | |
23324ae1 FM |
172 | Please note that this function will not be called if @c EstimateTotalSize() |
173 | is overridden in your derived class. | |
174 | */ | |
328f5751 | 175 | virtual wxCoord EstimateTotalHeight() const; |
23324ae1 FM |
176 | |
177 | /** | |
178 | Returns the number of rows the target window contains. | |
3c4f71cc | 179 | |
4cc4bfaf | 180 | @see SetRowCount() |
23324ae1 | 181 | */ |
328f5751 | 182 | size_t GetRowCount() const; |
23324ae1 FM |
183 | |
184 | /** | |
185 | Returns the index of the first visible row based on the scroll position. | |
186 | */ | |
328f5751 | 187 | size_t GetVisibleRowsBegin() const; |
23324ae1 FM |
188 | |
189 | /** | |
190 | Returns the index of the last visible row based on the scroll position. This | |
191 | includes the last row even if it is only partially visible. | |
192 | */ | |
328f5751 | 193 | size_t GetVisibleRowsEnd() const; |
23324ae1 FM |
194 | |
195 | /** | |
196 | Returns @true if the given row is currently visible (even if only | |
197 | partially visible) or @false otherwise. | |
198 | */ | |
328f5751 | 199 | bool IsRowVisible(size_t row) const; |
23324ae1 FM |
200 | |
201 | /** | |
202 | This function must be overridden in the derived class, and should return the | |
203 | height of the given row in pixels. | |
204 | */ | |
328f5751 | 205 | virtual wxCoord OnGetRowHeight(size_t row) const; |
23324ae1 FM |
206 | |
207 | /** | |
208 | This function doesn't have to be overridden but it may be useful to do so if | |
209 | calculating the rows' sizes is a relatively expensive operation as it gives | |
210 | your code a chance to calculate several of them at once and cache the result | |
211 | if necessary. | |
23324ae1 FM |
212 | @c OnGetRowsHeightHint() is normally called just before |
213 | OnGetRowHeight() but you | |
214 | shouldn't rely on the latter being called for all rows in the interval | |
215 | specified here. It is also possible that OnGetRowHeight() will be called for | |
216 | units outside of this interval, so this is really just a hint, not a promise. | |
23324ae1 FM |
217 | Finally, note that rowMin is inclusive, while rowMax is exclusive. |
218 | */ | |
328f5751 | 219 | virtual void OnGetRowsHeightHint(size_t rowMin, size_t rowMax) const; |
23324ae1 FM |
220 | |
221 | /** | |
222 | Triggers a refresh for just the given row's area of the window if it's visible. | |
223 | */ | |
224 | virtual void RefreshRow(size_t row); | |
225 | ||
226 | /** | |
227 | Triggers a refresh for the area between the specified range of rows given | |
228 | (inclusively). | |
229 | */ | |
230 | virtual void RefreshRows(size_t from, size_t to); | |
231 | ||
232 | /** | |
233 | Scroll by the specified number of pages which may be positive (to scroll down) | |
234 | or negative (to scroll up). | |
235 | */ | |
236 | virtual bool ScrollRowPages(int pages); | |
237 | ||
238 | /** | |
239 | Scroll by the specified number of rows which may be positive (to scroll down) | |
240 | or negative (to scroll up). | |
23324ae1 FM |
241 | Returns @true if the window was scrolled, @false otherwise (for |
242 | example, if we're trying to scroll down but we are already showing the last | |
243 | row). | |
244 | */ | |
245 | virtual bool ScrollRows(int rows); | |
246 | ||
247 | /** | |
248 | Scroll to the specified row. It will become the first visible row in the window. | |
23324ae1 FM |
249 | Returns @true if we scrolled the window, @false if nothing was done. |
250 | */ | |
251 | bool ScrollToRow(size_t row); | |
252 | ||
253 | /** | |
254 | Set the number of rows the window contains. The derived class must provide the | |
255 | heights for all rows with indices up to the one given here in it's | |
256 | OnGetRowHeight() implementation. | |
257 | */ | |
258 | void SetRowCount(size_t rowCount); | |
259 | }; | |
260 | ||
261 | ||
e54c96f1 | 262 | |
23324ae1 FM |
263 | /** |
264 | @class wxVarScrollHelperBase | |
265 | @wxheader{vscroll.h} | |
7c913512 | 266 | |
23324ae1 FM |
267 | This class provides all common base functionality for scroll calculations |
268 | shared among all variable scrolled window implementations as well as | |
269 | automatic scrollbar functionality, saved scroll positions, controlling | |
270 | target windows to be scrolled, as well as defining all required virtual | |
271 | functions that need to be implemented for any orientation specific work. | |
7c913512 | 272 | |
23324ae1 FM |
273 | Documentation of this class is provided specifically for referencing use |
274 | of the functions provided by this class for use with the variable scrolled | |
275 | windows that derive from here. You will likely want to derive your window | |
276 | from one of the already implemented variable scrolled windows rather than | |
277 | from wxVarScrollHelperBase directly. | |
7c913512 | 278 | |
23324ae1 FM |
279 | @library{wxcore} |
280 | @category{FIXME} | |
7c913512 | 281 | |
e54c96f1 | 282 | @see wxHScrolledWindow, wxHVScrolledWindow, wxVScrolledWindow |
23324ae1 | 283 | */ |
7c913512 | 284 | class wxVarScrollHelperBase |
23324ae1 FM |
285 | { |
286 | public: | |
287 | /** | |
288 | Constructor taking the target window to be scrolled by this helper class. | |
289 | This will attach scroll event handlers to the target window to catch and | |
290 | handle scroll events appropriately. | |
291 | */ | |
292 | wxVarScrollHelperBase(wxWindow* winToScroll); | |
293 | ||
294 | /** | |
295 | Virtual destructor for detaching scroll event handlers attached with this | |
296 | helper class. | |
297 | */ | |
298 | ~wxVarScrollHelperBase(); | |
299 | ||
300 | /** | |
301 | Translates the logical coordinate given to the current device coordinate. | |
302 | For example, if the window is scrolled 10 units and each scroll unit | |
303 | represents 10 device units (which may not be the case since this class allows | |
304 | for variable scroll unit sizes), a call to this function with a coordinate of | |
305 | 15 will return -85. | |
3c4f71cc | 306 | |
4cc4bfaf | 307 | @see CalcUnscrolledPosition() |
23324ae1 | 308 | */ |
328f5751 | 309 | int CalcScrolledPosition(int coord) const; |
23324ae1 FM |
310 | |
311 | /** | |
312 | Translates the device coordinate given to the corresponding logical | |
313 | coordinate. For example, if the window is scrolled 10 units and each scroll | |
314 | unit represents 10 device units (which may not be the case since this class | |
315 | allows for variable scroll unit sizes), a call to this function with a | |
316 | coordinate of 15 will return 115. | |
3c4f71cc | 317 | |
4cc4bfaf | 318 | @see CalcScrolledPosition() |
23324ae1 | 319 | */ |
328f5751 | 320 | int CalcUnscrolledPosition(int coord) const; |
23324ae1 FM |
321 | |
322 | /** | |
323 | With physical scrolling on (when this is @true), the device origin is | |
324 | changed properly when a wxPaintDC is prepared, | |
325 | children are actually moved and laid out properly, and the contents of the | |
326 | window (pixels) are actually moved. When this is @false, you are | |
327 | responsible for repainting any invalidated areas of the window yourself to | |
328 | account for the new scroll position. | |
329 | */ | |
4cc4bfaf | 330 | void EnablePhysicalScrolling(bool scrolling = true); |
23324ae1 FM |
331 | |
332 | /** | |
333 | When the number of scroll units change, we try to estimate the total size of | |
334 | all units when the full window size is needed (i.e. to calculate the scrollbar | |
335 | thumb size). This is a rather expensive operation in terms of unit access, so | |
336 | if the user code may estimate the average size better or faster than we do, it | |
337 | should override this function to implement its own logic. This function should | |
338 | return the best guess for the total virtual window size. | |
23324ae1 FM |
339 | Note that although returning a totally wrong value would still work, it risks |
340 | resulting in very strange scrollbar behaviour so this function should really | |
341 | try to make the best guess possible. | |
342 | */ | |
328f5751 | 343 | virtual wxCoord EstimateTotalSize() const; |
23324ae1 FM |
344 | |
345 | /** | |
346 | This function needs to be overridden in the in the derived class to return the | |
347 | window size with respect to the opposing orientation. If this is a vertical | |
348 | scrolled window, it should return the height. | |
3c4f71cc | 349 | |
4cc4bfaf | 350 | @see GetOrientationTargetSize() |
23324ae1 | 351 | */ |
328f5751 | 352 | virtual int GetNonOrientationTargetSize() const; |
23324ae1 FM |
353 | |
354 | /** | |
355 | This function need to be overridden to return the orientation that this helper | |
356 | is working with, either @c wxHORIZONTAL or @c wxVERTICAL. | |
357 | */ | |
328f5751 | 358 | virtual wxOrientation GetOrientation() const; |
23324ae1 FM |
359 | |
360 | /** | |
361 | This function needs to be overridden in the in the derived class to return the | |
362 | window size with respect to the orientation this helper is working with. If | |
363 | this is a vertical scrolled window, it should return the width. | |
3c4f71cc | 364 | |
4cc4bfaf | 365 | @see GetNonOrientationTargetSize() |
23324ae1 | 366 | */ |
328f5751 | 367 | virtual int GetOrientationTargetSize() const; |
23324ae1 FM |
368 | |
369 | /** | |
370 | This function will return the target window this helper class is currently | |
371 | scrolling. | |
3c4f71cc | 372 | |
4cc4bfaf | 373 | @see SetTargetWindow() |
23324ae1 | 374 | */ |
328f5751 | 375 | wxWindow* GetTargetWindow() const; |
23324ae1 FM |
376 | |
377 | /** | |
378 | Returns the index of the first visible unit based on the scroll position. | |
379 | */ | |
328f5751 | 380 | size_t GetVisibleBegin() const; |
23324ae1 FM |
381 | |
382 | /** | |
383 | Returns the index of the last visible unit based on the scroll position. This | |
384 | includes the last unit even if it is only partially visible. | |
385 | */ | |
328f5751 | 386 | size_t GetVisibleEnd() const; |
23324ae1 FM |
387 | |
388 | /** | |
389 | Returns @true if the given scroll unit is currently visible (even if only | |
390 | partially visible) or @false otherwise. | |
391 | */ | |
328f5751 | 392 | bool IsVisible(size_t unit) const; |
23324ae1 FM |
393 | |
394 | /** | |
395 | This function must be overridden in the derived class, and should return the | |
396 | size of the given unit in pixels. | |
397 | */ | |
328f5751 | 398 | virtual wxCoord OnGetUnitSize(size_t unit) const; |
23324ae1 FM |
399 | |
400 | /** | |
401 | This function doesn't have to be overridden but it may be useful to do so if | |
402 | calculating the units' sizes is a relatively expensive operation as it gives | |
403 | your code a chance to calculate several of them at once and cache the result | |
404 | if necessary. | |
23324ae1 FM |
405 | @c OnGetUnitsSizeHint() is normally called just before |
406 | OnGetUnitSize() but you | |
407 | shouldn't rely on the latter being called for all units in the interval | |
408 | specified here. It is also possible that OnGetUnitSize() will be called for | |
409 | units outside of this interval, so this is really just a hint, not a promise. | |
23324ae1 FM |
410 | Finally, note that unitMin is inclusive, while unitMax is exclusive. |
411 | */ | |
328f5751 | 412 | virtual void OnGetUnitsSizeHint(size_t unitMin, size_t unitMax) const; |
23324ae1 FM |
413 | |
414 | /** | |
415 | Recalculate all parameters and repaint all units. | |
416 | */ | |
417 | virtual void RefreshAll(); | |
418 | ||
419 | /** | |
420 | Normally the window will scroll itself, but in some rare occasions you might | |
421 | want it to scroll (part of) another window (e.g. a child of it in order to | |
422 | scroll only a portion the area between the scrollbars like a spreadsheet where | |
423 | only the cell area will move). | |
3c4f71cc | 424 | |
4cc4bfaf | 425 | @see GetTargetWindow() |
23324ae1 FM |
426 | */ |
427 | void SetTargetWindow(wxWindow* target); | |
428 | ||
429 | /** | |
430 | Update the thumb size shown by the scrollbar. | |
431 | */ | |
432 | virtual void UpdateScrollbar(); | |
433 | ||
434 | /** | |
435 | Returns the virtual scroll unit under the device unit given accounting for | |
436 | scroll position or @c wxNOT_FOUND if none (i.e. if it is below the last | |
437 | item). | |
438 | */ | |
328f5751 | 439 | int VirtualHitTest(wxCoord coord) const; |
23324ae1 FM |
440 | }; |
441 | ||
442 | ||
e54c96f1 | 443 | |
23324ae1 FM |
444 | /** |
445 | @class wxVScrolledWindow | |
446 | @wxheader{vscroll.h} | |
7c913512 | 447 | |
23324ae1 FM |
448 | In the name of this class, "V" may stand for "variable" because it can be |
449 | used for scrolling rows of variable heights; "virtual", because it is not | |
450 | necessary to know the heights of all rows in advance -- only those which | |
451 | are shown on the screen need to be measured; or even "vertical", because | |
452 | this class only supports scrolling vertically. | |
7c913512 | 453 | |
23324ae1 FM |
454 | In any case, this is a generalization of the |
455 | wxScrolledWindow class which can be only used when | |
456 | all rows have the same heights. It lacks some other wxScrolledWindow features | |
457 | however, notably it can't scroll only a rectangle of the window and not its | |
458 | entire client area. | |
7c913512 | 459 | |
23324ae1 FM |
460 | To use this class, you need to derive from it and implement the |
461 | wxVarVScrollHelper::OnGetRowHeight pure virtual | |
462 | method. You also must call wxVarVScrollHelper::SetRowCount | |
463 | to let the base class know how many rows it should display, but from that | |
464 | moment on the scrolling is handled entirely by wxVScrolledWindow. You only | |
465 | need to draw the visible part of contents in your @c OnPaint() method as | |
466 | usual. You should use wxVarVScrollHelper::GetVisibleRowsBegin | |
467 | and wxVarVScrollHelper::GetVisibleRowsEnd to | |
468 | select the lines to display. Note that the device context origin is not shifted | |
469 | so the first visible row always appears at the point (0, 0) in physical as | |
470 | well as logical coordinates. | |
7c913512 | 471 | |
23324ae1 FM |
472 | @library{wxcore} |
473 | @category{miscwnd} | |
7c913512 | 474 | |
e54c96f1 | 475 | @see wxHScrolledWindow, wxHVScrolledWindow |
23324ae1 FM |
476 | */ |
477 | class wxVScrolledWindow : public wxPanel | |
478 | { | |
479 | public: | |
480 | //@{ | |
481 | /** | |
482 | This is the normal constructor, no need to call @c Create() after using this | |
483 | one. | |
23324ae1 FM |
484 | Note that @c wxVSCROLL is always automatically added to our style, there is |
485 | no need to specify it explicitly. | |
3c4f71cc | 486 | |
7c913512 | 487 | @param parent |
4cc4bfaf | 488 | The parent window, must not be @NULL |
7c913512 | 489 | @param id |
4cc4bfaf | 490 | The identifier of this window, wxID_ANY by default |
7c913512 | 491 | @param pos |
4cc4bfaf | 492 | The initial window position |
7c913512 | 493 | @param size |
4cc4bfaf | 494 | The initial window size |
7c913512 | 495 | @param style |
4cc4bfaf FM |
496 | The window style. There are no special style bits defined for |
497 | this class. | |
7c913512 | 498 | @param name |
4cc4bfaf | 499 | The name for this window; usually not used |
23324ae1 FM |
500 | */ |
501 | wxVScrolledWindow(); | |
7c913512 FM |
502 | wxVScrolledWindow(wxWindow* parent, wxWindowID id = wxID_ANY, |
503 | const wxPoint& pos = wxDefaultPosition, | |
504 | const wxSize& size = wxDefaultSize, | |
505 | long style = 0, | |
506 | const wxString& name = wxPanelNameStr); | |
23324ae1 FM |
507 | //@} |
508 | ||
509 | /** | |
510 | Same as the @ref wxvscrolledwindow() "non-default constuctor" | |
511 | but returns status code: @true if ok, @false if the window couldn't | |
512 | be created. | |
23324ae1 FM |
513 | Just as with the constructor above, the @c wxVSCROLL style is always used, |
514 | there is no need to specify it explicitly. | |
515 | */ | |
516 | bool Create(wxWindow* parent, wxWindowID id = wxID_ANY, | |
517 | const wxPoint& pos = wxDefaultPosition, | |
518 | const wxSize& size = wxDefaultSize, | |
519 | long style = 0, | |
520 | const wxString& name = wxPanelNameStr); | |
521 | ||
522 | //@{ | |
523 | /** | |
524 | The following functions provide backwards compatibility for applications | |
525 | originally built using wxVScrolledWindow in 2.6 or 2.8. Originally, | |
526 | wxVScrolledWindow referred to scrolling "lines". We now use "units" in | |
527 | wxVarScrollHelperBase to avoid implying any orientation (since the functions | |
528 | are used for both horizontal and vertical scrolling in derived classes). And | |
529 | in the new wxVScrolledWindow and wxHScrolledWindow classes, we refer to them | |
530 | as "rows" and "columns", respectively. This is to help clear some confusion | |
531 | in not only those classes, but also in wxHVScrolledWindow where functions | |
532 | are inherited from both. | |
23324ae1 FM |
533 | You are encouraged to update any existing code using these function to use |
534 | the new replacements mentioned below, and avoid using these functions for | |
535 | any new code as they are deprecated. | |
3c4f71cc | 536 | |
23324ae1 FM |
537 | Deprecated for wxVarVScrollHelper::SetRowCount. |
538 | */ | |
539 | size_t GetFirstVisibleLine(); | |
328f5751 FM |
540 | const size_t GetLastVisibleLine(); |
541 | const size_t GetLineCount(); | |
542 | const int HitTest(wxCoord x, wxCoord y); | |
543 | const int HitTest(const wxPoint& pt); | |
544 | const virtual wxCoord OnGetLineHeight(size_t line); | |
545 | const virtual void OnGetLinesHint(size_t lineMin, | |
546 | size_t lineMax); | |
547 | const virtual void RefreshLine(size_t line); | |
7c913512 FM |
548 | virtual void RefreshLines(size_t from, size_t to); |
549 | virtual bool ScrollLines(int lines); | |
550 | virtual bool ScrollPages(int pages); | |
551 | bool ScrollToLine(size_t line); | |
552 | void SetLineCount(size_t count); | |
23324ae1 FM |
553 | //@} |
554 | }; | |
555 | ||
556 | ||
e54c96f1 | 557 | |
23324ae1 FM |
558 | /** |
559 | @class wxHVScrolledWindow | |
560 | @wxheader{vscroll.h} | |
7c913512 | 561 | |
23324ae1 FM |
562 | This window inherits all functionality of both vertical and horizontal, |
563 | variable scrolled windows. It automatically handles everything needed to | |
564 | scroll both axis simultaneously with both variable row heights and variable | |
565 | column widths. | |
7c913512 | 566 | |
23324ae1 FM |
567 | This is a generalization of the wxScrolledWindow |
568 | class which can be only used when all rows and columns are the same size. It | |
569 | lacks some other wxScrolledWindow features however, notably it can't scroll | |
570 | only a rectangle of the window and not its entire client area. | |
7c913512 | 571 | |
23324ae1 FM |
572 | To use this class, you must derive from it and implement both the |
573 | wxVarVScrollHelper::OnGetRowHeight and | |
574 | wxVarHScrollHelper::OnGetColumnWidth pure virtual | |
575 | methods to let the base class know how many rows and columns it should | |
576 | display. You also need to set the total rows and columns the window contains, | |
577 | but from that moment on the scrolling is handled entirely by | |
578 | wxHVScrolledWindow. You only need to draw the visible part of contents in | |
579 | your @c OnPaint() method as usual. You should use | |
580 | wxVarHVScrollHelper::GetVisibleBegin | |
581 | and wxVarHVScrollHelper::GetVisibleEnd to select the | |
582 | lines to display. Note that the device context origin is not shifted so the | |
583 | first visible row and column always appear at the point (0, 0) in physical | |
584 | as well as logical coordinates. | |
7c913512 | 585 | |
23324ae1 FM |
586 | @library{wxcore} |
587 | @category{FIXME} | |
7c913512 | 588 | |
e54c96f1 | 589 | @see wxHScrolledWindow, wxVScrolledWindow |
23324ae1 FM |
590 | */ |
591 | class wxHVScrolledWindow : public wxPanel | |
592 | { | |
593 | public: | |
594 | //@{ | |
595 | /** | |
596 | This is the normal constructor, no need to call @c Create() after using this | |
597 | one. | |
23324ae1 FM |
598 | Note that @c wxHSCROLL and @c wxVSCROLL are always automatically added |
599 | to our styles, there is no need to specify it explicitly. | |
3c4f71cc | 600 | |
7c913512 | 601 | @param parent |
4cc4bfaf | 602 | The parent window, must not be @NULL |
7c913512 | 603 | @param id |
4cc4bfaf | 604 | The identifier of this window, wxID_ANY by default |
7c913512 | 605 | @param pos |
4cc4bfaf | 606 | The initial window position |
7c913512 | 607 | @param size |
4cc4bfaf | 608 | The initial window size |
7c913512 | 609 | @param style |
4cc4bfaf FM |
610 | The window style. There are no special style bits defined for |
611 | this class. | |
7c913512 | 612 | @param name |
4cc4bfaf | 613 | The name for this window; usually not used |
23324ae1 FM |
614 | */ |
615 | wxHVScrolledWindow(); | |
7c913512 FM |
616 | wxHVScrolledWindow(wxWindow* parent, |
617 | wxWindowID id = wxID_ANY, | |
618 | const wxPoint& pos = wxDefaultPosition, | |
619 | const wxSize& size = wxDefaultSize, | |
620 | long style = 0, | |
621 | const wxString& name = wxPanelNameStr); | |
23324ae1 FM |
622 | //@} |
623 | ||
624 | /** | |
625 | Same as the @ref wxhvscrolledwindow() "non-default constuctor" | |
626 | but returns status code: @true if ok, @false if the window couldn't | |
627 | be created. | |
23324ae1 FM |
628 | Just as with the constructor above, the @c wxHSCROLL and @c wxVSCROLL |
629 | styles are always used, there is no need to specify it explicitly. | |
630 | */ | |
631 | bool Create(wxWindow* parent, wxWindowID id = wxID_ANY, | |
632 | const wxPoint& pos = wxDefaultPosition, | |
633 | const wxSize& size = wxDefaultSize, | |
634 | long style = 0, | |
635 | const wxString& name = wxPanelNameStr); | |
636 | }; | |
637 | ||
638 | ||
e54c96f1 | 639 | |
23324ae1 FM |
640 | /** |
641 | @class wxVarHVScrollHelper | |
642 | @wxheader{vscroll.h} | |
7c913512 FM |
643 | |
644 | This class provides functions wrapping the | |
23324ae1 FM |
645 | wxVarHScrollHelper and |
646 | wxVarVScrollHelper classes, targeted for | |
647 | scrolling a window in both axis using | |
648 | wxHVScrolledWindow. Since this class is also | |
649 | the join class of the horizontal and vertical scrolling functionality, it | |
650 | also addresses some wrappers that help avoid the need to specify class scope | |
651 | in your wxHVScrolledWindow-derived class when using wxVarScrollHelperBase | |
652 | functionality. | |
7c913512 | 653 | |
23324ae1 FM |
654 | Like all three of it's scroll helper base classes, this class is mostly only |
655 | useful to those classes built into wxWidgets deriving from here, and this | |
656 | documentation is mostly only provided for referencing those functions | |
657 | provided. You will likely want to derive your window from wxHVScrolledWindow | |
658 | rather than from here directly. | |
7c913512 | 659 | |
23324ae1 FM |
660 | @library{wxcore} |
661 | @category{FIXME} | |
7c913512 | 662 | |
e54c96f1 | 663 | @see wxHScrolledWindow, wxHVScrolledWindow, wxVScrolledWindow |
23324ae1 FM |
664 | */ |
665 | class wxVarHVScrollHelper : public wxVarVScrollHelper | |
666 | { | |
667 | public: | |
668 | /** | |
669 | Constructor taking the target window to be scrolled by this helper class. | |
670 | This will attach scroll event handlers to the target window to catch and | |
671 | handle scroll events appropriately. | |
672 | */ | |
673 | wxVarHVScrollHelper(wxWindow* winToScroll); | |
674 | ||
675 | /** | |
676 | With physical scrolling on (when this is @true), the device origin is | |
677 | changed properly when a wxPaintDC is prepared, | |
678 | children are actually moved and laid out properly, and the contents of the | |
679 | window (pixels) are actually moved. When this is @false, you are | |
680 | responsible for repainting any invalidated areas of the window yourself to | |
681 | account for the new scroll position. | |
3c4f71cc | 682 | |
7c913512 | 683 | @param vscrolling |
4cc4bfaf FM |
684 | Specifies if physical scrolling should be turned on when scrolling |
685 | vertically. | |
7c913512 | 686 | @param hscrolling |
4cc4bfaf FM |
687 | Specifies if physical scrolling should be turned on when scrolling |
688 | horizontally. | |
23324ae1 | 689 | */ |
4cc4bfaf FM |
690 | void EnablePhysicalScrolling(bool vscrolling = true, |
691 | bool hscrolling = true); | |
23324ae1 FM |
692 | |
693 | /** | |
694 | Returns the number of columns and rows the target window contains. | |
3c4f71cc | 695 | |
4cc4bfaf | 696 | @see SetRowColumnCount() |
23324ae1 | 697 | */ |
328f5751 | 698 | wxSize GetRowColumnCount() const; |
23324ae1 FM |
699 | |
700 | /** | |
701 | Returns the index of the first visible column and row based on the current | |
702 | scroll position. | |
703 | */ | |
328f5751 | 704 | wxPosition GetVisibleBegin() const; |
23324ae1 FM |
705 | |
706 | /** | |
707 | Returns the index of the last visible column and row based on the scroll | |
708 | position. This includes any partially visible columns or rows. | |
709 | */ | |
328f5751 | 710 | wxPosition GetVisibleEnd() const; |
23324ae1 FM |
711 | |
712 | //@{ | |
713 | /** | |
714 | Returns @true if both the given row and column are currently visible | |
715 | (even if only partially visible) or @false otherwise. | |
716 | */ | |
328f5751 FM |
717 | bool IsVisible(size_t row, size_t column) const; |
718 | const bool IsVisible(const wxPosition& pos) const; | |
23324ae1 FM |
719 | //@} |
720 | ||
721 | //@{ | |
722 | /** | |
723 | Triggers a refresh for just the area shared between the given row and column | |
724 | of the window if it is visible. | |
725 | */ | |
726 | virtual void RefreshRowColumn(size_t row, size_t column); | |
7c913512 | 727 | virtual void RefreshRowColumn(const wxPosition& pos); |
23324ae1 FM |
728 | //@} |
729 | ||
730 | //@{ | |
731 | /** | |
732 | Triggers a refresh for the visible area shared between all given rows and | |
733 | columns (inclusive) of the window. If the target window for both orientations | |
734 | is the same, the rectangle of cells is refreshed; if the target windows | |
735 | differ, the entire client size opposite the orientation direction is | |
736 | refreshed between the specified limits. | |
737 | */ | |
738 | virtual void RefreshRowsColumns(size_t fromRow, size_t toRow, | |
739 | size_t fromColumn, | |
740 | size_t toColumn); | |
7c913512 FM |
741 | virtual void RefreshRowsColumns(const wxPosition& from, |
742 | const wxPosition& to); | |
23324ae1 FM |
743 | //@} |
744 | ||
745 | //@{ | |
746 | /** | |
747 | Scroll to the specified row and column. It will become the first visible row | |
748 | and column in the window. Returns @true if we scrolled the window, | |
749 | @false if nothing was done. | |
750 | */ | |
751 | bool ScrollToRowColumn(size_t row, size_t column); | |
7c913512 | 752 | bool ScrollToRowColumn(const wxPosition& pos); |
23324ae1 FM |
753 | //@} |
754 | ||
755 | /** | |
756 | Set the number of rows and columns the target window will contain. The | |
757 | derived class must provide the sizes for all rows and columns with indices up | |
758 | to the ones given here in it's wxVarVScrollHelper::OnGetRowHeight | |
759 | and wxVarHScrollHelper::OnGetColumnWidth implementations, | |
760 | respectively. | |
761 | */ | |
762 | void SetRowColumnCount(size_t rowCount, size_t columnCount); | |
763 | ||
764 | //@{ | |
765 | /** | |
766 | Returns the virtual scroll unit under the device unit given accounting for | |
767 | scroll position or @c wxNOT_FOUND (for the row, column, or possibly both | |
768 | values) if none. | |
769 | */ | |
328f5751 FM |
770 | wxPosition VirtualHitTest(wxCoord x, wxCoord y) const; |
771 | const wxPosition VirtualHitTest(const wxPoint& pos) const; | |
23324ae1 FM |
772 | //@} |
773 | }; | |
774 | ||
775 | ||
e54c96f1 | 776 | |
23324ae1 FM |
777 | /** |
778 | @class wxHScrolledWindow | |
779 | @wxheader{vscroll.h} | |
7c913512 | 780 | |
23324ae1 FM |
781 | In the name of this class, "H" stands for "horizontal" because it can be |
782 | used for scrolling columns of variable widths. It is not necessary to know | |
783 | the widths of all columns in advance -- only those which are shown on the | |
784 | screen need to be measured. | |
7c913512 | 785 | |
23324ae1 FM |
786 | In any case, this is a generalization of the |
787 | wxScrolledWindow class which can be only used when | |
788 | all columns have the same widths. It lacks some other wxScrolledWindow features | |
789 | however, notably it can't scroll only a rectangle of the window and not its | |
790 | entire client area. | |
7c913512 | 791 | |
23324ae1 FM |
792 | To use this class, you need to derive from it and implement the |
793 | wxVarHScrollHelper::OnGetColumnWidth pure virtual | |
794 | method. You also must call wxVarHScrollHelper::SetColumnCount | |
795 | to let the base class know how many columns it should display, but from that | |
796 | moment on the scrolling is handled entirely by wxHScrolledWindow. You only | |
797 | need to draw the visible part of contents in your @c OnPaint() method as | |
798 | usual. You should use wxVarHScrollHelper::GetVisibleColumnsBegin | |
799 | and wxVarHScrollHelper::GetVisibleColumnsEnd to | |
800 | select the lines to display. Note that the device context origin is not shifted | |
801 | so the first visible column always appears at the point (0, 0) in physical as | |
802 | well as logical coordinates. | |
7c913512 | 803 | |
23324ae1 FM |
804 | @library{wxcore} |
805 | @category{FIXME} | |
7c913512 | 806 | |
e54c96f1 | 807 | @see wxHVScrolledWindow, wxVScrolledWindow |
23324ae1 FM |
808 | */ |
809 | class wxHScrolledWindow : public wxPanel | |
810 | { | |
811 | public: | |
812 | //@{ | |
813 | /** | |
814 | This is the normal constructor, no need to call @c Create() after using this | |
815 | one. | |
23324ae1 FM |
816 | Note that @c wxHSCROLL is always automatically added to our style, there is |
817 | no need to specify it explicitly. | |
3c4f71cc | 818 | |
7c913512 | 819 | @param parent |
4cc4bfaf | 820 | The parent window, must not be @NULL |
7c913512 | 821 | @param id |
4cc4bfaf | 822 | The identifier of this window, wxID_ANY by default |
7c913512 | 823 | @param pos |
4cc4bfaf | 824 | The initial window position |
7c913512 | 825 | @param size |
4cc4bfaf | 826 | The initial window size |
7c913512 | 827 | @param style |
4cc4bfaf FM |
828 | The window style. There are no special style bits defined for |
829 | this class. | |
7c913512 | 830 | @param name |
4cc4bfaf | 831 | The name for this window; usually not used |
23324ae1 FM |
832 | */ |
833 | wxHScrolledWindow(); | |
7c913512 FM |
834 | wxHScrolledWindow(wxWindow* parent, wxWindowID id = wxID_ANY, |
835 | const wxPoint& pos = wxDefaultPosition, | |
836 | const wxSize& size = wxDefaultSize, | |
837 | long style = 0, | |
838 | const wxString& name = wxPanelNameStr); | |
23324ae1 FM |
839 | //@} |
840 | ||
841 | /** | |
842 | Same as the @ref wxhscrolledwindow() "non-default constuctor" | |
843 | but returns status code: @true if ok, @false if the window couldn't | |
844 | be created. | |
23324ae1 FM |
845 | Just as with the constructor above, the @c wxHSCROLL style is always used, |
846 | there is no need to specify it explicitly. | |
847 | */ | |
848 | bool Create(wxWindow* parent, wxWindowID id = wxID_ANY, | |
849 | const wxPoint& pos = wxDefaultPosition, | |
850 | const wxSize& size = wxDefaultSize, | |
851 | long style = 0, | |
852 | const wxString& name = wxPanelNameStr); | |
853 | }; | |
e54c96f1 | 854 |