1 /////////////////////////////////////////////////////////////////////////////
2 // Name: wx/gtk/scrolwin.h
3 // Purpose: wxScrolledWindow class
4 // Author: Robert Roebling
8 // Copyright: (c) Robert Roebling
9 // Licence: wxWindows licence
10 /////////////////////////////////////////////////////////////////////////////
12 #ifndef _WX_GTK_SCROLLWIN_H_
13 #define _WX_GTK_SCROLLWIN_H_
15 #if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
16 #pragma interface "scrolwin.h"
19 // ----------------------------------------------------------------------------
20 // headers and constants
21 // ----------------------------------------------------------------------------
23 #include "wx/window.h"
26 WXDLLEXPORT_DATA(extern const wxChar
*) wxPanelNameStr
;
28 // default scrolled window style
29 #ifndef wxScrolledWindowStyle
30 #define wxScrolledWindowStyle (wxHSCROLL | wxVSCROLL)
33 // ----------------------------------------------------------------------------
35 // ----------------------------------------------------------------------------
37 class WXDLLEXPORT wxScrolledWindow
: public wxPanel
43 wxScrolledWindow(wxWindow
*parent
,
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
); }
53 bool Create(wxWindow
*parent
,
55 const wxPoint
& pos
= wxDefaultPosition
,
56 const wxSize
& size
= wxDefaultSize
,
57 long style
= wxScrolledWindowStyle
,
58 const wxString
& name
= wxPanelNameStr
);
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
65 virtual void SetTargetWindow( wxWindow
*target
, bool pushEventHandler
= FALSE
);
66 virtual wxWindow
*GetTargetWindow() const;
68 // Set the scrolled area of the window.
69 virtual void DoSetVirtualSize( int x
, int y
);
71 // wxWindow's GetBestVirtualSize returns the actual window size,
72 // whereas we want to return the virtual size
73 virtual wxSize
GetBestVirtualSize() const;
75 // Return the size best suited for the current window
76 // (this isn't a virtual size, this is a sensible size for the window)
77 virtual wxSize
DoGetBestSize() const;
79 // Set the x, y scrolling increments.
80 void SetScrollRate( int xstep
, int ystep
);
82 // Number of pixels per user unit (0 or -1 for no scrollbar)
83 // Length of virtual canvas in user units
84 // Length of page in user units
85 // Default action is to set the virtual size and alter scrollbars
87 virtual void SetScrollbars(int pixelsPerUnitX
, int pixelsPerUnitY
,
88 int noUnitsX
, int noUnitsY
,
89 int xPos
= 0, int yPos
= 0,
90 bool noRefresh
= FALSE
);
92 // Physically scroll the window
93 virtual void Scroll(int x_pos
, int y_pos
);
95 int GetScrollPageSize(int orient
) const;
96 void SetScrollPageSize(int orient
, int pageSize
);
98 virtual void GetScrollPixelsPerUnit(int *x_unit
, int *y_unit
) const;
100 // Enable/disable Windows scrolling in either direction.
101 // If TRUE, wxWidgets scrolls the canvas and only a bit of
102 // the canvas is invalidated; no Clear() is necessary.
103 // If FALSE, the whole canvas is invalidated and a Clear() is
104 // necessary. Disable for when the scroll increment is used
105 // to actually scroll a non-constant distance
106 virtual void EnableScrolling(bool x_scrolling
, bool y_scrolling
);
108 // Get the view start
109 virtual void GetViewStart(int *x
, int *y
) const;
111 // translate between scrolled and unscrolled coordinates
112 void CalcScrolledPosition(int x
, int y
, int *xx
, int *yy
) const
113 { DoCalcScrolledPosition(x
, y
, xx
, yy
); }
114 wxPoint
CalcScrolledPosition(const wxPoint
& pt
) const
117 DoCalcScrolledPosition(pt
.x
, pt
.y
, &p2
.x
, &p2
.y
);
121 void CalcUnscrolledPosition(int x
, int y
, int *xx
, int *yy
) const
122 { DoCalcUnscrolledPosition(x
, y
, xx
, yy
); }
123 wxPoint
CalcUnscrolledPosition(const wxPoint
& pt
) const
126 DoCalcUnscrolledPosition(pt
.x
, pt
.y
, &p2
.x
, &p2
.y
);
130 virtual void DoCalcScrolledPosition(int x
, int y
, int *xx
, int *yy
) const;
131 virtual void DoCalcUnscrolledPosition(int x
, int y
, int *xx
, int *yy
) const;
133 // Override this function to draw the graphic (or just process EVT_PAINT)
134 virtual void OnDraw(wxDC
& WXUNUSED(dc
)) {}
136 // Override this function if you don't want to have wxScrolledWindow
137 // automatically change the origin according to the scroll position.
138 void PrepareDC(wxDC
& dc
) { DoPrepareDC(dc
); }
140 // lay out the window and its children
141 virtual bool Layout();
143 // Adjust the scrollbars
144 virtual void AdjustScrollbars();
146 // Set the scale factor, used in PrepareDC
147 void SetScale(double xs
, double ys
) { m_scaleX
= xs
; m_scaleY
= ys
; }
148 double GetScaleX() const { return m_scaleX
; }
149 double GetScaleY() const { return m_scaleY
; }
151 // implementation from now on
152 void OnScroll(wxScrollWinEvent
& event
);
153 void OnSize(wxSizeEvent
& event
);
154 void OnPaint(wxPaintEvent
& event
);
155 void OnChar(wxKeyEvent
& event
);
157 void GtkVScroll( float value
, unsigned int scroll_type
);
158 void GtkHScroll( float value
, unsigned int scroll_type
);
159 void GtkVConnectEvent();
160 void GtkHConnectEvent();
161 void GtkVDisconnectEvent();
162 void GtkHDisconnectEvent();
164 // Calculate scroll increment
165 virtual int CalcScrollInc(wxScrollWinEvent
& event
);
167 // Overridden from wxWidgets due callback being static
168 virtual void SetScrollPos( int orient
, int pos
, bool refresh
= TRUE
);
170 #if WXWIN_COMPATIBILITY_2_2
172 void ViewStart(int *x
, int *y
) const { GetViewStart( x
, y
); }
173 #endif // WXWIN_COMPATIBILITY_2_2
175 virtual void DoPrepareDC(wxDC
& dc
);
178 wxWindow
*m_targetWindow
;
179 int m_xScrollPixelsPerLine
;
180 int m_yScrollPixelsPerLine
;
181 bool m_xScrollingEnabled
;
182 bool m_yScrollingEnabled
;
184 // FIXME: these next four members are duplicated in the GtkAdjustment
185 // members of wxWindow. Can they be safely removed from here?
187 int m_xScrollPosition
;
188 int m_yScrollPosition
;
189 int m_xScrollLinesPerPage
;
190 int m_yScrollLinesPerPage
;
192 double m_scaleY
,m_scaleX
;
195 DECLARE_EVENT_TABLE()
196 DECLARE_DYNAMIC_CLASS(wxScrolledWindow
)
200 // _WX_GTK_SCROLLWIN_H_