// wxCalendarCtrl creation
// ----------------------------------------------------------------------------
+void wxCalendarCtrl::Init()
+{
+ m_marks =
+ m_holidays = 0;
+}
+
bool
wxCalendarCtrl::Create(wxWindow *parent,
wxWindowID id,
SetDate(dt.IsValid() ? dt : wxDateTime::Today());
- UpdateMarks();
+ if ( SetHolidayAttrs() )
+ UpdateMarks();
Connect(wxEVT_LEFT_DOWN,
wxMouseEventHandler(wxCalendarCtrl::MSWOnClick));
case MCHT_CALENDARDAY:
if ( wd )
{
- *wd = wx_static_cast(wxDateTime::WeekDay, hti.st.wDayOfWeek);
+ *wd = static_cast<wxDateTime::WeekDay>(hti.st.wDayOfWeek);
}
return wxCAL_HITTEST_HEADER;
UpdateMarks();
}
+void wxCalendarCtrl::SetHoliday(size_t day)
+{
+ wxCHECK_RET( day > 0 && day < 32, "invalid day" );
+
+ m_holidays |= 1 << (day - 1);
+}
+
void wxCalendarCtrl::UpdateMarks()
{
// we show only one full month but there can be some days from the month
// shows it on 6 lines and the number of visible months is still 3
wxCHECK_RET( nMonths == (int)WXSIZEOF(states), "unexpected months range" );
- states[1] = m_marks; // the fully visible month is the one in the middle
+ // the fully visible month is the one in the middle
+ states[1] = m_marks | m_holidays;
if ( !MonthCal_SetDayState(GetHwnd(), nMonths, states) )
{
// change anything -- filter it out
if ( m_date != dateOld )
{
- GenerateAllChangeEvents(dateOld);
+ if ( GenerateAllChangeEvents(dateOld) )
+ {
+ // month changed, need to update the holidays if we use
+ // them
+ if ( SetHolidayAttrs() )
+ UpdateMarks();
+ }
}
}
break;
const NMDAYSTATE * const ds = (NMDAYSTATE *)lParam;
for ( int i = 0; i < ds->cDayState; i++ )
{
- ds->prgDayState[i] = m_marks;
+ ds->prgDayState[i] = m_marks | m_holidays;
}
}
break;