+wxCalendarCtrl::~wxCalendarCtrl()
+{
+ for ( size_t n = 0; n < WXSIZEOF(m_attrs); n++ )
+ {
+ delete m_attrs[n];
+ }
+}
+
+// ----------------------------------------------------------------------------
+// forward wxWin functions to subcontrols
+// ----------------------------------------------------------------------------
+
+bool wxCalendarCtrl::Show(bool show)
+{
+ if ( !wxControl::Show(show) )
+ {
+ return FALSE;
+ }
+
+ GetMonthControl()->Show(show);
+ GetYearControl()->Show(show);
+
+ return TRUE;
+}
+
+bool wxCalendarCtrl::Enable(bool enable)
+{
+ if ( !wxControl::Enable(enable) )
+ {
+ return FALSE;
+ }
+
+ GetMonthControl()->Enable(enable);
+ GetYearControl()->Enable(enable);
+
+ return TRUE;
+}
+
+// ----------------------------------------------------------------------------
+// enable/disable month/year controls
+// ----------------------------------------------------------------------------
+
+void wxCalendarCtrl::ShowCurrentControls()
+{
+ if ( AllowMonthChange() )
+ {
+ m_comboMonth->Show();
+ m_staticMonth->Hide();
+
+ if ( AllowYearChange() )
+ {
+ m_spinYear->Show();
+ m_staticYear->Hide();
+
+ // skip the rest
+ return;
+ }
+ }
+ else
+ {
+ m_comboMonth->Hide();
+ m_staticMonth->Show();
+ }
+
+ // year change not allowed here
+ m_spinYear->Hide();
+ m_staticYear->Show();
+}
+
+wxControl *wxCalendarCtrl::GetMonthControl() const
+{
+ return AllowMonthChange() ? (wxControl *)m_comboMonth : (wxControl *)m_staticMonth;
+}
+
+wxControl *wxCalendarCtrl::GetYearControl() const
+{
+ return AllowYearChange() ? (wxControl *)m_spinYear : (wxControl *)m_staticYear;
+}
+
+void wxCalendarCtrl::EnableYearChange(bool enable)
+{
+ if ( enable != AllowYearChange() )
+ {
+ long style = GetWindowStyle();
+ if ( enable )
+ style &= ~wxCAL_NO_YEAR_CHANGE;
+ else
+ style |= wxCAL_NO_YEAR_CHANGE;
+ SetWindowStyle(style);
+
+ ShowCurrentControls();
+ }
+}
+
+void wxCalendarCtrl::EnableMonthChange(bool enable)
+{
+ if ( enable != AllowMonthChange() )
+ {
+ long style = GetWindowStyle();
+ if ( enable )
+ style &= ~wxCAL_NO_MONTH_CHANGE;
+ else
+ style |= wxCAL_NO_MONTH_CHANGE;
+ SetWindowStyle(style);
+
+ ShowCurrentControls();
+ }
+}
+