]> git.saurik.com Git - wxWidgets.git/blame - interface/scrolwin.h
make it callable from any path
[wxWidgets.git] / interface / scrolwin.h
CommitLineData
23324ae1
FM
1/////////////////////////////////////////////////////////////////////////////
2// Name: scrolwin.h
3// Purpose: documentation for wxScrolledWindow class
4// Author: wxWidgets team
5// RCS-ID: $Id$
6// Licence: wxWindows license
7/////////////////////////////////////////////////////////////////////////////
8
9/**
10 @class wxScrolledWindow
11 @wxheader{scrolwin.h}
12
13 The wxScrolledWindow class manages scrolling for its client area, transforming
14 the coordinates according to the scrollbar positions, and setting the
15 scroll positions, thumb sizes and ranges according to the area in view.
16
17 Starting from version 2.4 of wxWidgets, there are several ways to use a
18 wxScrolledWindow. In particular, there are now three ways to set the
19 size of the scrolling area:
20
21 One way is to set the scrollbars directly using a call to
22 wxScrolledWindow::SetScrollbars.
23 This is the way it used to be in any previous version of wxWidgets
24 and it will be kept for backwards compatibility.
25
26 An additional method of manual control, which requires a little less
27 computation of your own, is to set the total size of the scrolling area by
28 calling either wxWindow::SetVirtualSize,
29 or wxWindow::FitInside, and setting the
30 scrolling increments for it by calling
31 wxScrolledWindow::SetScrollRate.
32 Scrolling in some orientation is enabled by setting a non-zero increment
33 for it.
34
35 The most automatic and newest way is to simply let sizers determine the
36 scrolling area. This is now the default when you set an interior sizer
37 into a wxScrolledWindow with wxWindow::SetSizer.
38 The scrolling area will be set to the size requested by the sizer and
39 the scrollbars will be assigned for each orientation according to the need
40 for them and the scrolling increment set by
41 wxScrolledWindow::SetScrollRate.
42 As above, scrolling is only enabled in orientations with a non-zero
43 increment. You can influence the minimum size of the scrolled area
44 controlled by a sizer by calling
45 wxWindow::SetVirtualSizeHints.
46 (calling wxScrolledWindow::SetScrollbars
47 has analogous effects in wxWidgets 2.4 -- in later versions it may not continue
48 to override the sizer)
49
50 Note: if Maximum size hints are still supported by SetVirtualSizeHints, use
51 them at your own dire risk. They may or may not have been removed for 2.4,
52 but it really only makes sense to set minimum size hints here. We should
53 probably replace SetVirtualSizeHints with SetMinVirtualSize or similar
54 and remove it entirely in future.
55
56 As with all windows, an application can draw onto a wxScrolledWindow using
57 a @ref overview_dcoverview "device context".
58
59 You have the option of handling the OnPaint handler
60 or overriding the wxScrolledWindow::OnDraw function, which is
61 passed a pre-scrolled device context (prepared by
62 wxScrolledWindow::DoPrepareDC).
63
64 If you don't wish to calculate your own scrolling, you must call DoPrepareDC
65 when not drawing from
66 within OnDraw, to set the device origin for the device context according to the
67 current
68 scroll position.
69
70 A wxScrolledWindow will normally scroll itself and therefore its child windows
71 as well. It
72 might however be desired to scroll a different window than itself: e.g. when
73 designing a
74 spreadsheet, you will normally only have to scroll the (usually white) cell
75 area, whereas the
76 (usually grey) label area will scroll very differently. For this special
77 purpose, you can
78 call wxScrolledWindow::SetTargetWindow which means that pressing
79 the scrollbars will scroll a different window.
80
81 Note that the underlying system knows nothing about scrolling coordinates, so
82 that all system
83 functions (mouse events, expose events, refresh calls etc) as well as the
84 position of subwindows
85 are relative to the "physical" origin of the scrolled window. If the user
86 insert a child window at
87 position (10,10) and scrolls the window down 100 pixels (moving the child
88 window out of the visible
89 area), the child window will report a position of (10,-90).
90
91 @beginStyleTable
92 @style{wxRETAINED}:
93 Uses a backing pixmap to speed refreshes. Motif only.
94 @endStyleTable
95
96 @library{wxcore}
97 @category{miscwnd}
98
99 @seealso
100 wxScrollBar, wxClientDC, wxPaintDC, wxVScrolledWindow
101*/
102class wxScrolledWindow : public wxPanel
103{
104public:
105 //@{
106 /**
107 Constructor.
108
109 @param parent
110 Parent window.
111
112 @param id
113 Window identifier. The value wxID_ANY indicates a default value.
114
115 @param pos
116 Window position. If a position of (-1, -1) is specified then a default position
117 is chosen.
118
119 @param size
120 Window size. If a size of (-1, -1) is specified then the window is sized
121 appropriately.
122
123 @param style
124 Window style. See wxScrolledWindow.
125
126 @param name
127 Window name.
128
129 @remarks The window is initially created without visible scrollbars. Call
130 SetScrollbars() to specify how big
131 the virtual window size should be.
132 */
133 wxScrolledWindow();
134 wxScrolledWindow(wxWindow* parent, wxWindowID id = -1,
135 const wxPoint& pos = wxDefaultPosition,
136 const wxSize& size = wxDefaultSize,
137 long style = wxHSCROLL | wxVSCROLL,
138 const wxString& name = "scrolledWindow");
139 //@}
140
141 /**
142 Destructor.
143 */
144 ~wxScrolledWindow();
145
146 /**
147 Translates the logical coordinates to the device ones. For example, if a window
148 is
149 scrolled 10 pixels to the bottom, the device coordinates of the origin are (0,
150 0)
151 (as always), but the logical coordinates are (0, 10) and so the call to
152 CalcScrolledPosition(0, 10, xx, yy) will return 0 in yy.
153
154 @sa CalcUnscrolledPosition()
155 */
156 void CalcScrolledPosition(int x, int y, int * xx, int * yy);
157
158 /**
159 Translates the device coordinates to the logical ones. For example, if a window
160 is
161 scrolled 10 pixels to the bottom, the device coordinates of the origin are (0,
162 0)
163 (as always), but the logical coordinates are (0, 10) and so the call to
164 CalcUnscrolledPosition(0, 0, xx, yy) will return 10 in yy.
165
166 @sa CalcScrolledPosition()
167 */
168 void CalcUnscrolledPosition(int x, int y, int * xx, int * yy);
169
170 /**
171 Creates the window for two-step construction. Derived classes
172 should call or replace this function. See wxScrolledWindow()
173 for details.
174 */
175 bool Create(wxWindow* parent, wxWindowID id = -1,
176 const wxPoint& pos = wxDefaultPosition,
177 const wxSize& size = wxDefaultSize,
178 long style = wxHSCROLL | wxVSCROLL,
179 const wxString& name = "scrolledWindow");
180
181 /**
182 Call this function to prepare the device context for drawing a scrolled image.
183 It
184 sets the device origin according to the current scroll position.
185
186 DoPrepareDC is called automatically within the default OnPaint() event
187 handler, so your OnDraw() override
188 will be passed a 'pre-scrolled' device context. However, if you wish to draw
189 from
190 outside of OnDraw (via OnPaint), or you wish to implement OnPaint yourself, you
191 must
192 call this function yourself. For example:
193 */
194 void DoPrepareDC(wxDC& dc);
195
196 /**
197 Enable or disable physical scrolling in the given direction. Physical
198 scrolling is the physical transfer of bits up or down the
199 screen when a scroll event occurs. If the application scrolls by a
200 variable amount (e.g. if there are different font sizes) then physical
201 scrolling will not work, and you should switch it off. Note that you
202 will have to reposition child windows yourself, if physical scrolling
203 is disabled.
204
205 @param xScrolling
206 If @true, enables physical scrolling in the x direction.
207
208 @param yScrolling
209 If @true, enables physical scrolling in the y direction.
210
211 @remarks Physical scrolling may not be available on all platforms. Where
212 it is available, it is enabled by default.
213 */
214 void EnableScrolling(bool xScrolling, bool yScrolling);
215
216 /**
217 Get the number of pixels per scroll unit (line), in each direction, as set
218 by SetScrollbars(). A value of zero indicates no
219 scrolling in that direction.
220
221 @param xUnit
222 Receives the number of pixels per horizontal unit.
223
224 @param yUnit
225 Receives the number of pixels per vertical unit.
226
227 @sa SetScrollbars(), GetVirtualSize()
228 */
229 void GetScrollPixelsPerUnit(int* xUnit, int* yUnit);
230
231 /**
232 Get the position at which the visible portion of the window starts.
233
234 @param x
235 Receives the first visible x position in scroll units.
236
237 @param y
238 Receives the first visible y position in scroll units.
239
240 @remarks If either of the scrollbars is not at the home position, x
241 and/or y will be greater than zero. Combined with
242 wxWindow::GetClientSize, the application can use this
243 function to efficiently redraw only the visible
244 portion of the window. The positions are in logical
245 scroll units, not pixels, so to convert to pixels you
246 will have to multiply by the number of pixels per
247 scroll increment.
248
249 @sa SetScrollbars()
250 */
251 void GetViewStart(int* x, int* y);
252
253 /**
254 Gets the size in device units of the scrollable window area (as
255 opposed to the client size, which is the area of the window currently
256 visible).
257
258 @param x
259 Receives the length of the scrollable window, in pixels.
260
261 @param y
262 Receives the height of the scrollable window, in pixels.
263
264 @remarks Use wxDC::DeviceToLogicalX and wxDC::DeviceToLogicalY to
265 translate these units to logical units.
266
267 @sa SetScrollbars(), GetScrollPixelsPerUnit()
268 */
269 void GetVirtualSize(int* x, int* y);
270
271 /**
272 Motif only: @true if the window has a backing bitmap.
273 */
274 bool IsRetained();
275
276 /**
277 Called by the default paint event handler to allow the application to define
278 painting behaviour without having to worry about calling
279 DoPrepareDC().
280
281 Instead of overriding this function you may also just process the paint event
282 in the derived class as usual, but then you will have to call DoPrepareDC()
283 yourself.
284 */
285 virtual void OnDraw(wxDC& dc);
286
287 /**
288 This function is for backwards compatibility only and simply calls
289 DoPrepareDC() now. Notice that it is
290 not called by the default paint event handle (DoPrepareDC() is), so
291 overriding this method in your derived class is useless.
292 */
293 void PrepareDC(wxDC& dc);
294
295 /**
296 Scrolls a window so the view start is at the given point.
297
298 @param x
299 The x position to scroll to, in scroll units.
300
301 @param y
302 The y position to scroll to, in scroll units.
303
304 @remarks The positions are in scroll units, not pixels, so to convert to
305 pixels you will have to multiply by the number of
306 pixels per scroll increment. If either parameter is
307 -1, that position will be ignored (no change in that
308 direction).
309
310 @sa SetScrollbars(), GetScrollPixelsPerUnit()
311 */
312 void Scroll(int x, int y);
313
314 /**
315 Set the horizontal and vertical scrolling increment only. See the pixelsPerUnit
316 parameter in SetScrollbars.
317 */
318 void SetScrollRate(int xstep, int ystep);
319
320 /**
321 Sets up vertical and/or horizontal scrollbars.
322
323 @param pixelsPerUnitX
324 Pixels per scroll unit in the horizontal direction.
325
326 @param pixelsPerUnitY
327 Pixels per scroll unit in the vertical direction.
328
329 @param noUnitsX
330 Number of units in the horizontal direction.
331
332 @param noUnitsY
333 Number of units in the vertical direction.
334
335 @param xPos
336 Position to initialize the scrollbars in the horizontal direction, in scroll
337 units.
338
339 @param yPos
340 Position to initialize the scrollbars in the vertical direction, in scroll
341 units.
342
343 @param noRefresh
344 Will not refresh window if @true.
345
346 @remarks The first pair of parameters give the number of pixels per
347 'scroll step', i.e. amount moved when the up or down
348 scroll arrows are pressed. The second pair gives the
349 length of scrollbar in scroll steps, which sets the
350 size of the virtual window.
351
352 @sa wxWindow::SetVirtualSize
353 */
354 void SetScrollbars(int pixelsPerUnitX, int pixelsPerUnitY,
355 int noUnitsX,
356 int noUnitsY,
357 int xPos = 0,
358 int yPos = 0,
359 bool noRefresh = @false);
360
361 /**
362 Call this function to tell wxScrolledWindow to perform the actual scrolling on
363 a different window (and not on itself).
364 */
365 void SetTargetWindow(wxWindow* window);
366};