]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/calctrlcmn.cpp
reset the tooltip text before changing it, this apparently prevents a spurious redraw...
[wxWidgets.git] / src / common / calctrlcmn.cpp
index 896ac3ba37087953398afd3a3cac5f74db320e4e..9f1fd917c5ecd62aa1736cb8044d77fc18c3bd82 100644 (file)
@@ -20,7 +20,7 @@
 
 #include "wx/dateevt.h"
 IMPLEMENT_DYNAMIC_CLASS(wxDateEvent, wxCommandEvent)
 
 #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
 
 
 #endif // wxUSE_CALENDARCTRL || wxUSE_DATEPICKCTRL
 
@@ -34,15 +34,16 @@ DEFINE_EVENT_TYPE(wxEVT_DATE_CHANGED)
 // ----------------------------------------------------------------------------
 IMPLEMENT_DYNAMIC_CLASS(wxCalendarEvent, wxDateEvent)
 
 // ----------------------------------------------------------------------------
 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
 
 // 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);
 
 
 wxCalendarDateAttr wxCalendarDateAttr::m_mark(wxCAL_BORDER_SQUARE);
@@ -60,15 +61,21 @@ bool wxCalendarCtrlBase::EnableMonthChange(bool enable)
     return true;
 }
 
     return true;
 }
 
-void wxCalendarCtrlBase::GenerateAllChangeEvents(const wxDateTime& dateOld)
+bool wxCalendarCtrlBase::GenerateAllChangeEvents(const wxDateTime& dateOld)
 {
     const wxDateTime::Tm tm1 = dateOld.GetTm(),
                          tm2 = GetDate().GetTm();
 
 {
     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_SEL_CHANGED);
     if ( tm1.year != tm2.year || tm1.mon != tm2.mon )
+    {
         GenerateEvent(wxEVT_CALENDAR_PAGE_CHANGED);
 
         GenerateEvent(wxEVT_CALENDAR_PAGE_CHANGED);
 
+        pageChanged = true;
+    }
+
     // send also one of the deprecated events
     if ( tm1.year != tm2.year )
         GenerateEvent(wxEVT_CALENDAR_YEAR_CHANGED);
     // send also one of the deprecated events
     if ( tm1.year != tm2.year )
         GenerateEvent(wxEVT_CALENDAR_YEAR_CHANGED);
@@ -76,6 +83,52 @@ void wxCalendarCtrlBase::GenerateAllChangeEvents(const wxDateTime& dateOld)
         GenerateEvent(wxEVT_CALENDAR_MONTH_CHANGED);
     else
         GenerateEvent(wxEVT_CALENDAR_DAY_CHANGED);
         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
 }
 
 #endif // wxUSE_CALENDARCTRL