diff --git a/include/wx/generic/calctrlg.h b/include/wx/generic/calctrlg.h index 7d06ac34cb..fe2d9f7a1e 100644 --- a/include/wx/generic/calctrlg.h +++ b/include/wx/generic/calctrlg.h @@ -179,6 +179,7 @@ private: void OnPaint(wxPaintEvent& event); void OnClick(wxMouseEvent& event); void OnDClick(wxMouseEvent& event); + void OnWheel(wxMouseEvent& event); void OnChar(wxKeyEvent& event); void OnMonthChange(wxCommandEvent& event); diff --git a/src/generic/calctrlg.cpp b/src/generic/calctrlg.cpp index cbe6a0501b..d75758ad75 100644 --- a/src/generic/calctrlg.cpp +++ b/src/generic/calctrlg.cpp @@ -59,6 +59,7 @@ wxBEGIN_EVENT_TABLE(wxGenericCalendarCtrl, wxControl) EVT_LEFT_DOWN(wxGenericCalendarCtrl::OnClick) EVT_LEFT_DCLICK(wxGenericCalendarCtrl::OnDClick) + EVT_MOUSEWHEEL(wxGenericCalendarCtrl::OnWheel) EVT_SYS_COLOUR_CHANGED(wxGenericCalendarCtrl::OnSysColourChanged) wxEND_EVENT_TABLE() @@ -1512,6 +1513,28 @@ wxCalendarHitTestResult wxGenericCalendarCtrl::HitTest(const wxPoint& pos, } } +void wxGenericCalendarCtrl::OnWheel(wxMouseEvent& event) +{ + wxDateSpan span; + switch ( event.GetWheelAxis() ) + { + case wxMOUSE_WHEEL_VERTICAL: + span = wxDateSpan::Month(); + break; + + case wxMOUSE_WHEEL_HORIZONTAL: + span = wxDateSpan::Year(); + break; + } + + // Currently we only take into account the rotation direction, not its + // magnitude. + if ( event.GetWheelRotation() < 0 ) + span = -span; + + SetDateAndNotify(m_date + span); +} + // ---------------------------------------------------------------------------- // subcontrols events handling // ----------------------------------------------------------------------------