+ if ( display )
+ SetHolidayAttrs();
+ else
+ ResetHolidayAttrs();
+
+ Refresh();
+}
+
+void wxCalendarCtrl::SetHolidayAttrs()
+{
+ if ( GetWindowStyle() & wxCAL_SHOW_HOLIDAYS )
+ {
+ ResetHolidayAttrs();
+
+ wxDateTime::Tm tm = m_date.GetTm();
+ wxDateTime dtStart(1, tm.mon, tm.year),
+ dtEnd = dtStart.GetLastMonthDay();
+
+ wxDateTimeArray hol;
+ wxDateTimeHolidayAuthority::GetHolidaysInRange(dtStart, dtEnd, hol);
+
+ size_t count = hol.GetCount();
+ for ( size_t n = 0; n < count; n++ )
+ {
+ SetHoliday(hol[n].GetDay());
+ }
+ }
+}
+
+void wxCalendarCtrl::SetHoliday(size_t day)
+{
+ wxCHECK_RET( day > 0 && day < 32, _T("invalid day in SetHoliday") );
+
+ wxCalendarDateAttr *attr = GetAttr(day);
+ if ( !attr )
+ {
+ attr = new wxCalendarDateAttr;
+ }
+
+ attr->SetHoliday(TRUE);
+
+ // can't use SetAttr() because it would delete this pointer
+ m_attrs[day - 1] = attr;
+}
+
+void wxCalendarCtrl::ResetHolidayAttrs()
+{
+ for ( size_t day = 0; day < 31; day++ )
+ {
+ if ( m_attrs[day] )
+ {
+ m_attrs[day]->SetHoliday(FALSE);
+ }
+ }
+}
+
+// ----------------------------------------------------------------------------
+// wxCalendarEvent
+// ----------------------------------------------------------------------------
+
+void wxCalendarEvent::Init()
+{
+ m_wday = wxDateTime::Inv_WeekDay;