From db0b0942f8fe016db35fa00d6f2c5225cb61e529 Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Fri, 4 Apr 2008 16:35:43 +0000 Subject: [PATCH] implemented toggling of wxCAL_MONDAY_FIRST in the native MSW version of wxCalendarCtrl git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@53010 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- include/wx/msw/calctrl.h | 7 +++++++ interface/calctrl.h | 12 ++++++++---- samples/calendar/calendar.cpp | 2 ++ src/msw/calctrl.cpp | 19 ++++++++++++++++++- 4 files changed, 35 insertions(+), 5 deletions(-) diff --git a/include/wx/msw/calctrl.h b/include/wx/msw/calctrl.h index d750d54728..5f752cb1c0 100644 --- a/include/wx/msw/calctrl.h +++ b/include/wx/msw/calctrl.h @@ -50,6 +50,8 @@ public: wxDateTime *date = NULL, wxDateTime::WeekDay *wd = NULL); + virtual void SetWindowStyleFlag(long style); + protected: virtual wxSize wxCalendarCtrl::DoGetBestSize() const; @@ -62,8 +64,13 @@ protected: private: void Init() { m_marks = 0; } + // bring the control in sync with m_marks void UpdateMarks(); + // set first day of week in the control to correspond to our + // wxCAL_MONDAY_FIRST flag + void UpdateFirstDayOfWeek(); + // current date, we need to store it instead of simply retrieving it from // the control as needed in order to be able to generate the correct events diff --git a/interface/calctrl.h b/interface/calctrl.h index d0b92a1fb0..9869e33a7f 100644 --- a/interface/calctrl.h +++ b/interface/calctrl.h @@ -222,9 +222,9 @@ enum wxCalendarHitTestResult @beginStyleTable @style{wxCAL_SUNDAY_FIRST}: - Show Sunday as the first day in the week (only generic) + Show Sunday as the first day in the week (not in wxGTK) @style{wxCAL_MONDAY_FIRST}: - Show Monday as the first day in the week (only generic) + Show Monday as the first day in the week (not in wxGTK) @style{wxCAL_SHOW_HOLIDAYS}: Highlight holidays in the calendar (only generic) @style{wxCAL_NO_YEAR_CHANGE}: @@ -233,7 +233,7 @@ enum wxCalendarHitTestResult Disable the month (and, implicitly, the year) changing @style{wxCAL_SHOW_SURROUNDING_WEEKS}: Show the neighbouring weeks in the previous and next months - (only generic) + (only generic, always on for the native controls) @style{wxCAL_SEQUENTIAL_MONTH_SELECTION}: Use alternative, more compact, style for the month and year selection controls. (only generic) @@ -400,7 +400,9 @@ public: /** Returns one of wxCalendarHitTestResult constants and fills either @a date or @a wd pointer with the corresponding value depending on the - hit test code. Only in generic wxCalendarCtrl. + hit test code. + + Not implemented in wxGTK currently. */ wxCalendarHitTestResult HitTest(const wxPoint& pos, wxDateTime* date = NULL, @@ -421,6 +423,8 @@ public: /** Sets the current date. + + The @a date parameter must be valid. */ void SetDate(const wxDateTime& date); diff --git a/samples/calendar/calendar.cpp b/samples/calendar/calendar.cpp index 6b93a7eb4e..586a955659 100644 --- a/samples/calendar/calendar.cpp +++ b/samples/calendar/calendar.cpp @@ -269,7 +269,9 @@ BEGIN_EVENT_TABLE(MyFrame, wxFrame) EVT_UPDATE_UI(Calendar_Cal_SeqMonth, MyFrame::OnUpdateUIGenericOnly) +#ifdef __WXGTK20__ EVT_UPDATE_UI(Calendar_Cal_Monday, MyFrame::OnUpdateUIGenericOnly) +#endif EVT_UPDATE_UI(Calendar_Cal_Holidays, MyFrame::OnUpdateUIGenericOnly) EVT_UPDATE_UI(Calendar_Cal_Special, MyFrame::OnUpdateUIGenericOnly) EVT_UPDATE_UI(Calendar_Cal_SurroundWeeks, MyFrame::OnUpdateUIGenericOnly) diff --git a/src/msw/calctrl.cpp b/src/msw/calctrl.cpp index 69c5abeb6b..a44ba3ae36 100644 --- a/src/msw/calctrl.cpp +++ b/src/msw/calctrl.cpp @@ -87,6 +87,9 @@ wxCalendarCtrl::Create(wxWindow *parent, if ( !MSWCreateControl(clsname, wxEmptyString, pos, size) ) return false; + // initialize the control + UpdateFirstDayOfWeek(); + SetDate(dt.IsValid() ? dt : wxDateTime::Today()); UpdateMarks(); @@ -115,12 +118,21 @@ WXDWORD wxCalendarCtrl::MSWGetStyle(long style, WXDWORD *exstyle) const return styleMSW; } -// TODO: handle WM_WININICHANGE +void wxCalendarCtrl::SetWindowStyleFlag(long style) +{ + const bool hadMondayFirst = HasFlag(wxCAL_MONDAY_FIRST); + + wxCalendarCtrlBase::SetWindowStyleFlag(style); + + if ( HasFlag(wxCAL_MONDAY_FIRST) != hadMondayFirst ) + UpdateFirstDayOfWeek(); +} // ---------------------------------------------------------------------------- // wxCalendarCtrl geometry // ---------------------------------------------------------------------------- +// TODO: handle WM_WININICHANGE wxSize wxCalendarCtrl::DoGetBestSize() const { RECT rc; @@ -324,6 +336,11 @@ void wxCalendarCtrl::UpdateMarks() } } +void wxCalendarCtrl::UpdateFirstDayOfWeek() +{ + MonthCal_SetFirstDayOfWeek(GetHwnd(), HasFlag(wxCAL_MONDAY_FIRST) ? 0 : 6); +} + // ---------------------------------------------------------------------------- // wxCalendarCtrl events // ---------------------------------------------------------------------------- -- 2.45.2