From 0de868d9dda005db4f84117f0704dbc5702ddb71 Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Tue, 11 Jan 2000 19:12:47 +0000 Subject: [PATCH] fixed refresh problem with holidays in wxCalendarCtrl git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@5345 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- include/wx/generic/calctrl.h | 1 - samples/calendar/calendar.cpp | 14 ++++++++++++++ samples/console/console.cpp | 33 ++++++++++++++++++++++++++++++++- src/common/datetime.cpp | 2 +- src/generic/calctrl.cpp | 21 +++++---------------- 5 files changed, 52 insertions(+), 19 deletions(-) diff --git a/include/wx/generic/calctrl.h b/include/wx/generic/calctrl.h index 073767fa58..feabc86fa4 100644 --- a/include/wx/generic/calctrl.h +++ b/include/wx/generic/calctrl.h @@ -168,7 +168,6 @@ private: void OnChar(wxKeyEvent& event); void OnMonthChange(wxCommandEvent& event); void OnYearChange(wxSpinEvent& event); - void OnCalMonthChange(wxCalendarEvent& event); // override some base class virtuals virtual wxSize DoGetBestSize() const; diff --git a/samples/calendar/calendar.cpp b/samples/calendar/calendar.cpp index 31c28a57a7..fd5162b094 100644 --- a/samples/calendar/calendar.cpp +++ b/samples/calendar/calendar.cpp @@ -67,6 +67,8 @@ public: void OnCalendar(wxCalendarEvent& event); void OnCalendarWeekDayClick(wxCalendarEvent& event); void OnCalendarChange(wxCalendarEvent& event); + void OnCalMonthChange(wxCalendarEvent& event); + void OnCalYearChange(wxCalendarEvent& event); wxCalendarCtrl *GetCal() const { return m_calendar; } @@ -148,6 +150,8 @@ END_EVENT_TABLE() BEGIN_EVENT_TABLE(MyPanel, wxPanel) EVT_CALENDAR (Calendar_CalCtrl, MyPanel::OnCalendar) + EVT_CALENDAR_MONTH (Calendar_CalCtrl, MyPanel::OnCalMonthChange) + EVT_CALENDAR_YEAR (Calendar_CalCtrl, MyPanel::OnCalYearChange) EVT_CALENDAR_SEL_CHANGED(Calendar_CalCtrl, MyPanel::OnCalendarChange) EVT_CALENDAR_WEEKDAY_CLICKED(Calendar_CalCtrl, MyPanel::OnCalendarWeekDayClick) END_EVENT_TABLE() @@ -340,6 +344,16 @@ void MyPanel::OnCalendarChange(wxCalendarEvent& event) m_date->SetLabel(s); } +void MyPanel::OnCalMonthChange(wxCalendarEvent& WXUNUSED(event)) +{ + wxLogStatus("Calendar month changed"); +} + +void MyPanel::OnCalYearChange(wxCalendarEvent& WXUNUSED(event)) +{ + wxLogStatus("Calendar year changed"); +} + void MyPanel::OnCalendarWeekDayClick(wxCalendarEvent& event) { wxLogMessage("Clicked on %s", diff --git a/samples/console/console.cpp b/samples/console/console.cpp index e3c75ec71d..e01cf964bf 100644 --- a/samples/console/console.cpp +++ b/samples/console/console.cpp @@ -1349,6 +1349,31 @@ static void TestTimeArithmetics() } } +static void TestTimeHolidays() +{ + puts("\n*** testing wxDateTimeHolidayAuthority ***\n"); + + wxDateTime::Tm tm = wxDateTime(29, wxDateTime::May, 2000).GetTm(); + wxDateTime dtStart(1, tm.mon, tm.year), + dtEnd = dtStart.GetLastMonthDay(); + + wxDateTimeArray hol; + wxDateTimeHolidayAuthority::GetHolidaysInRange(dtStart, dtEnd, hol); + + const wxChar *format = "%d-%b-%Y (%a)"; + + printf("All holidays between %s and %s:\n", + dtStart.Format(format).c_str(), dtEnd.Format(format).c_str()); + + size_t count = hol.GetCount(); + for ( size_t n = 0; n < count; n++ ) + { + printf("\t%s\n", hol[n].Format(format).c_str()); + } + + puts(""); +} + #if 0 // test compatibility with the old wxDate/wxTime classes @@ -1737,6 +1762,11 @@ int main(int argc, char **argv) fprintf(stderr, "Failed to initialize the wxWindows library, aborting."); } +#ifdef TEST_USLEEP + puts("Sleeping for 3 seconds... z-z-z-z-z..."); + wxUsleep(3000); +#endif // TEST_USLEEP + #ifdef TEST_CMDLINE static const wxCmdLineEntryDesc cmdLineDesc[] = { @@ -1883,7 +1913,7 @@ int main(int argc, char **argv) #endif // TEST_MIME #ifdef TEST_TIME - if ( 1 ) + if ( 0 ) { TestTimeSet(); TestTimeStatic(); @@ -1898,6 +1928,7 @@ int main(int argc, char **argv) TestTimeFormat(); TestTimeArithmetics(); } + TestTimeHolidays(); if ( 0 ) TestInteractive(); #endif // TEST_TIME diff --git a/src/common/datetime.cpp b/src/common/datetime.cpp index e9b1e7c677..650f65bf1b 100644 --- a/src/common/datetime.cpp +++ b/src/common/datetime.cpp @@ -190,7 +190,7 @@ wxDateTime::Country wxDateTime::ms_country = wxDateTime::Country_Unknown; #ifdef __WXDEBUG__ extern const wxChar *wxDumpDate(const wxDateTime* dt) { - static wxChar buf[20]; + static wxChar buf[128]; wxStrcpy(buf, dt->Format(_T("%Y-%m-%d (%a) %H:%M:%S"))); diff --git a/src/generic/calctrl.cpp b/src/generic/calctrl.cpp index df8e2d745d..a0aae27144 100644 --- a/src/generic/calctrl.cpp +++ b/src/generic/calctrl.cpp @@ -81,9 +81,6 @@ BEGIN_EVENT_TABLE(wxCalendarCtrl, wxControl) EVT_LEFT_DOWN(wxCalendarCtrl::OnClick) EVT_LEFT_DCLICK(wxCalendarCtrl::OnDClick) - - EVT_CALENDAR_MONTH(-1, wxCalendarCtrl::OnCalMonthChange) - EVT_CALENDAR_YEAR(-1, wxCalendarCtrl::OnCalMonthChange) END_EVENT_TABLE() BEGIN_EVENT_TABLE(wxMonthComboBox, wxComboBox) @@ -359,6 +356,9 @@ void wxCalendarCtrl::SetDate(const wxDateTime& date) m_spinYear->SetValue(m_date.Format(_T("%Y"))); } + // as the month changed, holidays did too + SetHolidayAttrs(); + // update the calendar Refresh(); } @@ -861,9 +861,7 @@ void wxCalendarCtrl::OnMonthChange(wxCommandEvent& event) tm.mday = wxDateTime::GetNumberOfDays(mon, tm.year); } - SetDate(wxDateTime(tm.mday, mon, tm.year)); - - GenerateEvents(wxEVT_CALENDAR_MONTH_CHANGED, wxEVT_CALENDAR_SEL_CHANGED); + SetDateAndNotify(wxDateTime(tm.mday, mon, tm.year)); } void wxCalendarCtrl::OnYearChange(wxSpinEvent& event) @@ -876,9 +874,7 @@ void wxCalendarCtrl::OnYearChange(wxSpinEvent& event) tm.mday = wxDateTime::GetNumberOfDays(tm.mon, year); } - SetDate(wxDateTime(tm.mday, tm.mon, year)); - - GenerateEvents(wxEVT_CALENDAR_YEAR_CHANGED, wxEVT_CALENDAR_SEL_CHANGED); + SetDateAndNotify(wxDateTime(tm.mday, tm.mon, year)); } // ---------------------------------------------------------------------------- @@ -957,13 +953,6 @@ void wxCalendarCtrl::OnChar(wxKeyEvent& event) // holidays handling // ---------------------------------------------------------------------------- -void wxCalendarCtrl::OnCalMonthChange(wxCalendarEvent& event) -{ - SetHolidayAttrs(); - - event.Skip(); -} - void wxCalendarCtrl::EnableHolidayDisplay(bool display) { long style = GetWindowStyle(); -- 2.45.2