X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/628e155d8c70da0f962289cf1e1dea3699255707..d38315df30415b030d93172123920d69c5c5e3b6:/src/common/calctrlcmn.cpp?ds=sidebyside diff --git a/src/common/calctrlcmn.cpp b/src/common/calctrlcmn.cpp index 481be6e619..9f1fd917c5 100644 --- a/src/common/calctrlcmn.cpp +++ b/src/common/calctrlcmn.cpp @@ -20,7 +20,7 @@ #include "wx/dateevt.h" IMPLEMENT_DYNAMIC_CLASS(wxDateEvent, wxCommandEvent) -DEFINE_EVENT_TYPE(wxEVT_DATE_CHANGED) +wxDEFINE_EVENT(wxEVT_DATE_CHANGED, wxDateEvent); #endif // wxUSE_CALENDARCTRL || wxUSE_DATEPICKCTRL @@ -34,15 +34,16 @@ DEFINE_EVENT_TYPE(wxEVT_DATE_CHANGED) // ---------------------------------------------------------------------------- IMPLEMENT_DYNAMIC_CLASS(wxCalendarEvent, wxDateEvent) -DEFINE_EVENT_TYPE(wxEVT_CALENDAR_SEL_CHANGED) -DEFINE_EVENT_TYPE(wxEVT_CALENDAR_PAGE_CHANGED) -DEFINE_EVENT_TYPE(wxEVT_CALENDAR_DOUBLECLICKED) -DEFINE_EVENT_TYPE(wxEVT_CALENDAR_WEEKDAY_CLICKED) +wxDEFINE_EVENT( wxEVT_CALENDAR_SEL_CHANGED, wxCalendarEvent ); +wxDEFINE_EVENT( wxEVT_CALENDAR_PAGE_CHANGED, wxCalendarEvent ); +wxDEFINE_EVENT( wxEVT_CALENDAR_DOUBLECLICKED, wxCalendarEvent ); +wxDEFINE_EVENT( wxEVT_CALENDAR_WEEKDAY_CLICKED, wxCalendarEvent ); +wxDEFINE_EVENT( wxEVT_CALENDAR_WEEK_CLICKED, wxCalendarEvent ); // deprecated events -DEFINE_EVENT_TYPE(wxEVT_CALENDAR_DAY_CHANGED) -DEFINE_EVENT_TYPE(wxEVT_CALENDAR_MONTH_CHANGED) -DEFINE_EVENT_TYPE(wxEVT_CALENDAR_YEAR_CHANGED) +wxDEFINE_EVENT( wxEVT_CALENDAR_DAY_CHANGED, wxCalendarEvent ); +wxDEFINE_EVENT( wxEVT_CALENDAR_MONTH_CHANGED, wxCalendarEvent ); +wxDEFINE_EVENT( wxEVT_CALENDAR_YEAR_CHANGED, wxCalendarEvent ); wxCalendarDateAttr wxCalendarDateAttr::m_mark(wxCAL_BORDER_SQUARE); @@ -60,5 +61,75 @@ bool wxCalendarCtrlBase::EnableMonthChange(bool enable) return true; } +bool wxCalendarCtrlBase::GenerateAllChangeEvents(const wxDateTime& dateOld) +{ + const wxDateTime::Tm tm1 = dateOld.GetTm(), + tm2 = GetDate().GetTm(); + + bool pageChanged = false; + + GenerateEvent(wxEVT_CALENDAR_SEL_CHANGED); + if ( tm1.year != tm2.year || tm1.mon != tm2.mon ) + { + GenerateEvent(wxEVT_CALENDAR_PAGE_CHANGED); + + pageChanged = true; + } + + // send also one of the deprecated events + if ( tm1.year != tm2.year ) + GenerateEvent(wxEVT_CALENDAR_YEAR_CHANGED); + else if ( tm1.mon != tm2.mon ) + GenerateEvent(wxEVT_CALENDAR_MONTH_CHANGED); + else + GenerateEvent(wxEVT_CALENDAR_DAY_CHANGED); + + return pageChanged; +} + +void wxCalendarCtrlBase::EnableHolidayDisplay(bool display) +{ + long style = GetWindowStyle(); + if ( display ) + style |= wxCAL_SHOW_HOLIDAYS; + else + style &= ~wxCAL_SHOW_HOLIDAYS; + + if ( style == GetWindowStyle() ) + return; + + SetWindowStyle(style); + + if ( display ) + SetHolidayAttrs(); + else + ResetHolidayAttrs(); + + RefreshHolidays(); +} + +bool wxCalendarCtrlBase::SetHolidayAttrs() +{ + if ( !HasFlag(wxCAL_SHOW_HOLIDAYS) ) + return false; + + ResetHolidayAttrs(); + + wxDateTime::Tm tm = GetDate().GetTm(); + wxDateTime dtStart(1, tm.mon, tm.year), + dtEnd = dtStart.GetLastMonthDay(); + + wxDateTimeArray hol; + wxDateTimeHolidayAuthority::GetHolidaysInRange(dtStart, dtEnd, hol); + + const size_t count = hol.GetCount(); + for ( size_t n = 0; n < count; n++ ) + { + SetHoliday(hol[n].GetDay()); + } + + return true; +} + #endif // wxUSE_CALENDARCTRL