Factor out the keyboard handling code in wxAnyScrollHelperBase allowing its
reuse in wxVarScrollHelperEvtHandler.
Now wxVarScrollHelperBase handles cursor keys in a sane way by default
too and also allows disabling their handling, just as wxScrolledWindow.
See #15357.
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@74815
c3d73ce0-8a6f-49c7-b76d-
6d57e0e08775
public:
wxEXPLICIT wxAnyScrollHelperBase(wxWindow* win);
public:
wxEXPLICIT wxAnyScrollHelperBase(wxWindow* win);
+ // Disable use of keyboard keys for scrolling. By default cursor movement
+ // keys (including Home, End, Page Up and Down) are used to scroll the
+ // window appropriately. If the derived class uses these keys for something
+ // else, e.g. changing the currently selected item, this function can be
+ // used to disable this behaviour as it's not only not necessary then but
+ // can actually be actively harmful if another object forwards a keyboard
+ // event corresponding to one of the above keys to us using
+ // ProcessWindowEvent() because the event will always be processed which
+ // can be undesirable.
+ void DisableKeyboardScrolling() { m_kbdScrollingEnabled = false; }
+
// Override this function to draw the graphic (or just process EVT_PAINT)
virtual void OnDraw(wxDC& WXUNUSED(dc)) { }
// Override this function to draw the graphic (or just process EVT_PAINT)
virtual void OnDraw(wxDC& WXUNUSED(dc)) { }
// The methods called from the window event handlers.
// The methods called from the window event handlers.
+ void HandleOnChar(wxKeyEvent& event);
void HandleOnPaint(wxPaintEvent& event);
protected:
void HandleOnPaint(wxPaintEvent& event);
protected:
// scroll, respectively
wxWindow *m_win,
*m_targetWindow;
// scroll, respectively
wxWindow *m_win,
*m_targetWindow;
+
+ // whether cursor keys should scroll the window
+ bool m_kbdScrollingEnabled;
};
// This is the class containing the guts of (uniform) scrolling logic.
};
// This is the class containing the guts of (uniform) scrolling logic.
// which it is implemented to not use wxWindow::ScrollWindow().
virtual void EnableScrolling(bool x_scrolling, bool y_scrolling);
// which it is implemented to not use wxWindow::ScrollWindow().
virtual void EnableScrolling(bool x_scrolling, bool y_scrolling);
- // Disable use of keyboard keys for scrolling. By default cursor movement
- // keys (including Home, End, Page Up and Down) are used to scroll the
- // window appropriately. If the derived class uses these keys for something
- // else, e.g. changing the currently selected item, this function can be
- // used to disable this behaviour as it's not only not necessary then but
- // can actually be actively harmful if another object forwards a keyboard
- // event corresponding to one of the above keys to us using
- // ProcessWindowEvent() because the event will always be processed which
- // can be undesirable.
- void DisableKeyboardScrolling() { m_kbdScrollingEnabled = false; }
-
// Get the view start
void GetViewStart(int *x, int *y) const { DoGetViewStart(x, y); }
// Get the view start
void GetViewStart(int *x, int *y) const { DoGetViewStart(x, y); }
// the methods to be called from the window event handlers
void HandleOnScroll(wxScrollWinEvent& event);
void HandleOnSize(wxSizeEvent& event);
// the methods to be called from the window event handlers
void HandleOnScroll(wxScrollWinEvent& event);
void HandleOnSize(wxSizeEvent& event);
- void HandleOnChar(wxKeyEvent& event);
void HandleOnMouseEnter(wxMouseEvent& event);
void HandleOnMouseLeave(wxMouseEvent& event);
#if wxUSE_MOUSEWHEEL
void HandleOnMouseEnter(wxMouseEvent& event);
void HandleOnMouseLeave(wxMouseEvent& event);
#if wxUSE_MOUSEWHEEL
bool m_xScrollingEnabled;
bool m_yScrollingEnabled;
bool m_xScrollingEnabled;
bool m_yScrollingEnabled;
- bool m_kbdScrollingEnabled;
-
#if wxUSE_MOUSEWHEEL
int m_wheelRotation;
#endif // wxUSE_MOUSEWHEEL
#if wxUSE_MOUSEWHEEL
int m_wheelRotation;
#endif // wxUSE_MOUSEWHEEL
m_win = win;
m_targetWindow = NULL;
m_win = win;
m_targetWindow = NULL;
+
+ m_kbdScrollingEnabled = true;
}
// ----------------------------------------------------------------------------
}
// ----------------------------------------------------------------------------
m_xScrollingEnabled =
m_yScrollingEnabled = true;
m_xScrollingEnabled =
m_yScrollingEnabled = true;
- m_kbdScrollingEnabled = true;
-
m_scaleX =
m_scaleY = 1.0;
#if wxUSE_MOUSEWHEEL
m_scaleX =
m_scaleY = 1.0;
#if wxUSE_MOUSEWHEEL
// compatibility here - if we used OnKeyDown(), the programs which process
// arrows themselves in their OnChar() would never get the message and like
// this they always have the priority
// compatibility here - if we used OnKeyDown(), the programs which process
// arrows themselves in their OnChar() would never get the message and like
// this they always have the priority
-void wxScrollHelperBase::HandleOnChar(wxKeyEvent& event)
+void wxAnyScrollHelperBase::HandleOnChar(wxKeyEvent& event)
{
if ( !m_kbdScrollingEnabled )
{
{
if ( !m_kbdScrollingEnabled )
{
m_scrollHelper->HandleOnMouseWheel((wxMouseEvent &)event);
}
#endif // wxUSE_MOUSEWHEEL
m_scrollHelper->HandleOnMouseWheel((wxMouseEvent &)event);
}
#endif // wxUSE_MOUSEWHEEL
+ else if ( evType == wxEVT_CHAR &&
+ (m_scrollHelper->GetOrientation() == wxVERTICAL) )
+ {
+ m_scrollHelper->HandleOnChar((wxKeyEvent &)event);
+ if ( !event.GetSkipped() )
+ {
+ processed = true;
+ wasSkipped = false;
+ }
+ }