]> git.saurik.com Git - wxWidgets.git/blob - include/wx/generic/scrolwin.h
image to bitmap rewrite,
[wxWidgets.git] / include / wx / generic / scrolwin.h
1 /////////////////////////////////////////////////////////////////////////////
2 // Name: scrolwin.h
3 // Purpose: wxScrolledWindow class
4 // Author: Julian Smart
5 // Modified by:
6 // Created: 01/02/97
7 // RCS-ID: $Id$
8 // Copyright: (c) Julian Smart and Markus Holzem
9 // Licence: wxWindows license
10 /////////////////////////////////////////////////////////////////////////////
11
12 #ifndef __SCROLWINH_G__
13 #define __SCROLWINH_G__
14
15 #ifdef __GNUG__
16 #pragma interface "scrolwin.h"
17 #endif
18
19 #include "wx/window.h"
20 #include "wx/panel.h"
21
22 WXDLLEXPORT_DATA(extern const wxChar*) wxPanelNameStr;
23
24 class WXDLLEXPORT wxScrolledWindow : public wxPanel
25 {
26 public:
27 wxScrolledWindow();
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)
33 {
34 Create(parent, id, pos, size, style, name);
35 }
36
37 ~wxScrolledWindow();
38
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);
44
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
49 // will move).
50 virtual void SetTargetWindow( wxWindow *target );
51 virtual wxWindow *GetTargetWindow();
52
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 );
60
61 // Physically scroll the window
62 virtual void Scroll(int x_pos, int y_pos);
63
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 ;
67 #endif
68
69 int GetScrollPageSize(int orient) const ;
70 void SetScrollPageSize(int orient, int pageSize);
71
72 virtual void GetScrollPixelsPerUnit(int *x_unit, int *y_unit) const;
73
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);
81
82 // Get the view start
83 virtual void GetViewStart(int *x, int *y) const;
84 // Compatibility
85 void ViewStart(int *x, int *y) const
86 { GetViewStart( x, y ); }
87
88 // Actual size in pixels when scrolling is taken into account
89 virtual void GetVirtualSize(int *x, int *y) const;
90
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; }
95
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 ;
98
99 // Adjust the scrollbars
100 virtual void AdjustScrollbars(void);
101
102 // Override this function to draw the graphic (or just process EVT_PAINT)
103 virtual void OnDraw(wxDC& WXUNUSED(dc)) {};
104
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);
108
109 // implementation from now on
110 void OnScroll(wxScrollWinEvent& event);
111 void OnSize(wxSizeEvent& event);
112 void OnPaint(wxPaintEvent& event);
113
114 // Calculate scroll increment
115 virtual int CalcScrollInc(wxScrollWinEvent& event);
116
117 protected:
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;
125 int m_xScrollLines;
126 int m_yScrollLines;
127 int m_xScrollLinesPerPage;
128 int m_yScrollLinesPerPage;
129 double m_scaleX;
130 double m_scaleY;
131
132 private:
133 DECLARE_EVENT_TABLE()
134 DECLARE_ABSTRACT_CLASS(wxScrolledWindow)
135 };
136
137 #endif
138 // __SCROLWINH_G__