]> git.saurik.com Git - wxWidgets.git/blob - include/wx/gtk1/scrolwin.h
Common code for the same handling of wxSL_INVERSE.
[wxWidgets.git] / include / wx / gtk1 / scrolwin.h
1 /////////////////////////////////////////////////////////////////////////////
2 // Name: wx/gtk/scrolwin.h
3 // Purpose: wxScrolledWindow class
4 // Author: Robert Roebling
5 // Modified by:
6 // Created: 01/02/97
7 // RCS-ID: $Id$
8 // Copyright: (c) Robert Roebling
9 // Licence: wxWindows licence
10 /////////////////////////////////////////////////////////////////////////////
11
12 #ifndef _WX_GTK_SCROLLWIN_H_
13 #define _WX_GTK_SCROLLWIN_H_
14
15 #if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
16 #pragma interface "scrolwin.h"
17 #endif
18
19 // ----------------------------------------------------------------------------
20 // headers and constants
21 // ----------------------------------------------------------------------------
22
23 #include "wx/window.h"
24 #include "wx/panel.h"
25
26 WXDLLEXPORT_DATA(extern const wxChar*) wxPanelNameStr;
27
28 // default scrolled window style
29 #ifndef wxScrolledWindowStyle
30 #define wxScrolledWindowStyle (wxHSCROLL | wxVSCROLL)
31 #endif
32
33 // ----------------------------------------------------------------------------
34 // wxScrolledWindow
35 // ----------------------------------------------------------------------------
36
37 class WXDLLEXPORT wxScrolledWindow : public wxPanel
38 {
39 public:
40 wxScrolledWindow()
41 { Init(); }
42
43 wxScrolledWindow(wxWindow *parent,
44 wxWindowID id = -1,
45 const wxPoint& pos = wxDefaultPosition,
46 const wxSize& size = wxDefaultSize,
47 long style = wxScrolledWindowStyle,
48 const wxString& name = wxPanelNameStr)
49 { Create(parent, id, pos, size, style, name); }
50
51 void Init();
52
53 bool Create(wxWindow *parent,
54 wxWindowID id,
55 const wxPoint& pos = wxDefaultPosition,
56 const wxSize& size = wxDefaultSize,
57 long style = wxScrolledWindowStyle,
58 const wxString& name = wxPanelNameStr);
59
60 // Normally the wxScrolledWindow will scroll itself, but in
61 // some rare occasions you might want it to scroll another
62 // window (e.g. a child of it in order to scroll only a portion
63 // the area between the scrollbars (spreadsheet: only cell area
64 // will move).
65 virtual void SetTargetWindow( wxWindow *target, bool pushEventHandler = FALSE );
66 virtual wxWindow *GetTargetWindow() const;
67
68 // Set the scrolled area of the window.
69 virtual void DoSetVirtualSize( int x, int y );
70
71 // Set the x, y scrolling increments.
72 void SetScrollRate( int xstep, int ystep );
73
74 // Number of pixels per user unit (0 or -1 for no scrollbar)
75 // Length of virtual canvas in user units
76 // Length of page in user units
77 // Default action is to set the virtual size and alter scrollbars
78 // accordingly.
79 virtual void SetScrollbars(int pixelsPerUnitX, int pixelsPerUnitY,
80 int noUnitsX, int noUnitsY,
81 int xPos = 0, int yPos = 0,
82 bool noRefresh = FALSE );
83
84 // Physically scroll the window
85 virtual void Scroll(int x_pos, int y_pos);
86
87 int GetScrollPageSize(int orient) const;
88 void SetScrollPageSize(int orient, int pageSize);
89
90 virtual void GetScrollPixelsPerUnit(int *x_unit, int *y_unit) const;
91
92 // Enable/disable Windows scrolling in either direction.
93 // If TRUE, wxWidgets scrolls the canvas and only a bit of
94 // the canvas is invalidated; no Clear() is necessary.
95 // If FALSE, the whole canvas is invalidated and a Clear() is
96 // necessary. Disable for when the scroll increment is used
97 // to actually scroll a non-constant distance
98 virtual void EnableScrolling(bool x_scrolling, bool y_scrolling);
99
100 // Get the view start
101 virtual void GetViewStart(int *x, int *y) const;
102
103 // translate between scrolled and unscrolled coordinates
104 void CalcScrolledPosition(int x, int y, int *xx, int *yy) const
105 { DoCalcScrolledPosition(x, y, xx, yy); }
106 wxPoint CalcScrolledPosition(const wxPoint& pt) const
107 {
108 wxPoint p2;
109 DoCalcScrolledPosition(pt.x, pt.y, &p2.x, &p2.y);
110 return p2;
111 }
112
113 void CalcUnscrolledPosition(int x, int y, int *xx, int *yy) const
114 { DoCalcUnscrolledPosition(x, y, xx, yy); }
115 wxPoint CalcUnscrolledPosition(const wxPoint& pt) const
116 {
117 wxPoint p2;
118 DoCalcUnscrolledPosition(pt.x, pt.y, &p2.x, &p2.y);
119 return p2;
120 }
121
122 virtual void DoCalcScrolledPosition(int x, int y, int *xx, int *yy) const;
123 virtual void DoCalcUnscrolledPosition(int x, int y, int *xx, int *yy) const;
124
125 // Override this function to draw the graphic (or just process EVT_PAINT)
126 virtual void OnDraw(wxDC& WXUNUSED(dc)) {}
127
128 // Override this function if you don't want to have wxScrolledWindow
129 // automatically change the origin according to the scroll position.
130 void PrepareDC(wxDC& dc) { DoPrepareDC(dc); }
131
132 // lay out the window and its children
133 virtual bool Layout();
134
135 // Adjust the scrollbars
136 virtual void AdjustScrollbars();
137
138 // Set the scale factor, used in PrepareDC
139 void SetScale(double xs, double ys) { m_scaleX = xs; m_scaleY = ys; }
140 double GetScaleX() const { return m_scaleX; }
141 double GetScaleY() const { return m_scaleY; }
142
143 // implementation from now on
144 void OnScroll(wxScrollWinEvent& event);
145 void OnSize(wxSizeEvent& event);
146 void OnPaint(wxPaintEvent& event);
147 void OnChar(wxKeyEvent& event);
148
149 void GtkVScroll( float value, unsigned int scroll_type );
150 void GtkHScroll( float value, unsigned int scroll_type );
151 void GtkVConnectEvent();
152 void GtkHConnectEvent();
153 void GtkVDisconnectEvent();
154 void GtkHDisconnectEvent();
155
156 // Calculate scroll increment
157 virtual int CalcScrollInc(wxScrollWinEvent& event);
158
159 // Overridden from wxWidgets due callback being static
160 virtual void SetScrollPos( int orient, int pos, bool refresh = TRUE );
161
162 #if WXWIN_COMPATIBILITY_2_2
163 // Compatibility
164 void ViewStart(int *x, int *y) const { GetViewStart( x, y ); }
165 #endif // WXWIN_COMPATIBILITY_2_2
166
167 virtual void DoPrepareDC(wxDC& dc);
168
169 protected:
170 wxWindow *m_targetWindow;
171 int m_xScrollPixelsPerLine;
172 int m_yScrollPixelsPerLine;
173 bool m_xScrollingEnabled;
174 bool m_yScrollingEnabled;
175
176 // FIXME: these next four members are duplicated in the GtkAdjustment
177 // members of wxWindow. Can they be safely removed from here?
178
179 int m_xScrollPosition;
180 int m_yScrollPosition;
181 int m_xScrollLinesPerPage;
182 int m_yScrollLinesPerPage;
183
184 double m_scaleY,m_scaleX;
185
186 private:
187 DECLARE_EVENT_TABLE()
188 DECLARE_DYNAMIC_CLASS(wxScrolledWindow)
189 };
190
191 #endif
192 // _WX_GTK_SCROLLWIN_H_
193
194 // vi:sts=4:sw=4:et