1 /////////////////////////////////////////////////////////////////////////////
3 // Purpose: wxScrolledWindow class
4 // Author: Julian Smart
8 // Copyright: (c) Julian Smart and Markus Holzem
9 // Licence: wxWindows license
10 /////////////////////////////////////////////////////////////////////////////
12 #ifndef __SCROLWINH_G__
13 #define __SCROLWINH_G__
16 #pragma interface "scrolwin.h"
19 #include "wx/window.h"
22 WXDLLEXPORT_DATA(extern const wxChar
*) wxPanelNameStr
;
24 class WXDLLEXPORT wxScrolledWindow
: public wxPanel
28 inline wxScrolledWindow(wxWindow
*parent
, wxWindowID id
= -1,
29 const wxPoint
& pos
= wxDefaultPosition
,
30 const wxSize
& size
= wxDefaultSize
,
31 long style
= wxHSCROLL
|wxVSCROLL
,
32 const wxString
& name
= wxPanelNameStr
)
34 Create(parent
, id
, pos
, size
, style
, name
);
39 bool Create(wxWindow
*parent
, wxWindowID id
,
40 const wxPoint
& pos
= wxDefaultPosition
,
41 const wxSize
& size
= wxDefaultSize
,
42 long style
= wxHSCROLL
|wxVSCROLL
,
43 const wxString
& name
= wxPanelNameStr
);
45 // Normally the wxScrolledWindow will scroll itself, but in
46 // some rare occasions you might want it to scroll another
47 // window (e.g. a child of it in order to scroll only a portion
48 // the area between the scrollbars (spreadsheet: only cell area
50 virtual void SetTargetWindow( wxWindow
*target
);
51 virtual wxWindow
*GetTargetWindow();
53 // Number of pixels per user unit (0 or -1 for no scrollbar)
54 // Length of virtual canvas in user units
55 // Length of page in user units
56 virtual void SetScrollbars(int pixelsPerUnitX
, int pixelsPerUnitY
,
57 int noUnitsX
, int noUnitsY
,
58 int xPos
= 0, int yPos
= 0,
59 bool noRefresh
= FALSE
);
61 // Physically scroll the window
62 virtual void Scroll(int x_pos
, int y_pos
);
64 #if WXWIN_COMPATIBILITY
65 virtual void GetScrollUnitsPerPage(int *x_page
, int *y_page
) const;
66 virtual void CalcUnscrolledPosition(int x
, int y
, float *xx
, float *yy
) const ;
69 int GetScrollPageSize(int orient
) const ;
70 void SetScrollPageSize(int orient
, int pageSize
);
72 virtual void GetScrollPixelsPerUnit(int *x_unit
, int *y_unit
) const;
74 // Enable/disable Windows scrolling in either direction.
75 // If TRUE, wxWindows scrolls the canvas and only a bit of
76 // the canvas is invalidated; no Clear() is necessary.
77 // If FALSE, the whole canvas is invalidated and a Clear() is
78 // necessary. Disable for when the scroll increment is used
79 // to actually scroll a non-constant distance
80 virtual void EnableScrolling(bool x_scrolling
, bool y_scrolling
);
83 virtual void GetViewStart(int *x
, int *y
) const;
85 void ViewStart(int *x
, int *y
) const
86 { GetViewStart( x
, y
); }
88 // Actual size in pixels when scrolling is taken into account
89 virtual void GetVirtualSize(int *x
, int *y
) const;
91 // Set the scale factor, used in PrepareDC
92 void SetScale(double xs
, double ys
) { m_scaleX
= xs
; m_scaleY
= ys
; }
93 double GetScaleX() const { return m_scaleX
; }
94 double GetScaleY() const { return m_scaleY
; }
96 virtual void CalcScrolledPosition(int x
, int y
, int *xx
, int *yy
) const ;
97 virtual void CalcUnscrolledPosition(int x
, int y
, int *xx
, int *yy
) const ;
99 // Adjust the scrollbars
100 virtual void AdjustScrollbars(void);
102 // Override this function to draw the graphic (or just process EVT_PAINT)
103 virtual void OnDraw(wxDC
& WXUNUSED(dc
)) {};
105 // Override this function if you don't want to have wxScrolledWindow
106 // automatically change the origin according to the scroll position.
107 virtual void PrepareDC(wxDC
& dc
);
109 // implementation from now on
110 void OnScroll(wxScrollWinEvent
& event
);
111 void OnSize(wxSizeEvent
& event
);
112 void OnPaint(wxPaintEvent
& event
);
114 // Calculate scroll increment
115 virtual int CalcScrollInc(wxScrollWinEvent
& event
);
118 wxWindow
*m_targetWindow
;
119 int m_xScrollPixelsPerLine
;
120 int m_yScrollPixelsPerLine
;
121 bool m_xScrollingEnabled
;
122 bool m_yScrollingEnabled
;
123 int m_xScrollPosition
;
124 int m_yScrollPosition
;
127 int m_xScrollLinesPerPage
;
128 int m_yScrollLinesPerPage
;
133 DECLARE_EVENT_TABLE()
134 DECLARE_ABSTRACT_CLASS(wxScrolledWindow
)