+// Toggle a restricted date range to the six months centered on today's date.
+void MyPanel::LimitDateRange(bool on)
+{
+ if ( on )
+ {
+ // limit the choice of date to 3 months around today
+ const wxDateSpan diff = wxDateSpan::Months(3);
+ const wxDateTime today = wxDateTime::Today();
+
+ // Set the restricted date range.
+ if ( m_calendar->SetDateRange(today - diff, today + diff) )
+ {
+ wxLogStatus("Date range limited to 3 months around today.");
+ wxDateTime firstValidDate;
+ wxDateTime lastValidDate;
+ if ( m_calendar->GetDateRange(&firstValidDate, &lastValidDate) )
+ {
+ wxLogMessage("First valid date: %s, last valid date: %s",
+ firstValidDate.FormatISODate(),
+ lastValidDate.FormatISODate());
+ }
+ else
+ {
+ wxLogWarning("Failed to get back the valid dates range.");
+ }
+ }
+ else
+ {
+ wxLogWarning("Date range not supported.");
+ }
+ }
+ else // off
+ {
+ // Remove the date restrictions.
+ if ( m_calendar->SetDateRange() )
+ {
+ wxLogStatus("Date choice is unlimited now.");
+ }
+ else
+ {
+ wxLogWarning("Date range not supported.");
+ }
+ }
+
+ m_calendar->Refresh();
+}
+
+// ----------------------------------------------------------------------------
+// MyDialog
+// ----------------------------------------------------------------------------
+
+#if wxUSE_DATEPICKCTRL
+
+MyDialog::MyDialog(wxWindow *parent, const wxDateTime& dt, int dtpStyle)
+ : wxDialog(parent, wxID_ANY, wxString(wxT("Calendar: Choose a date")))
+{
+ wxStdDialogButtonSizer *sizerBtns = new wxStdDialogButtonSizer;
+ sizerBtns->AddButton(new wxButton(this, wxID_OK));
+ sizerBtns->AddButton(new wxButton(this, wxID_CANCEL));
+ sizerBtns->Realize();
+
+ wxSizer *sizerText = new wxBoxSizer(wxHORIZONTAL);
+ sizerText->Add(new wxStaticText(this, wxID_ANY, wxT("Date in ISO format: ")),
+ wxSizerFlags().Border().Align(wxALIGN_CENTRE_VERTICAL));
+ m_text = new wxTextCtrl(this, wxID_ANY);
+ sizerText->Add(m_text, wxSizerFlags().
+ Expand().Border().Align(wxALIGN_CENTRE_VERTICAL));
+
+ wxSizer *sizerTop = new wxBoxSizer(wxVERTICAL);
+ sizerTop->Add(new wxStaticText
+ (
+ this, wxID_ANY,
+ wxT("Enter your birthday date (not before 20th century):")
+ ),
+ wxSizerFlags().Border());
+
+#if wxUSE_DATEPICKCTRL_GENERIC
+ wxFrame *frame = (wxFrame *)wxGetTopLevelParent(parent);
+ if ( frame && frame->GetMenuBar()->IsChecked(Calendar_DatePicker_Generic) )
+ m_datePicker = new wxDatePickerCtrlGeneric(this, wxID_ANY, dt,
+ wxDefaultPosition,
+ wxDefaultSize,
+ dtpStyle);
+ else
+#endif // wxUSE_DATEPICKCTRL_GENERIC
+ m_datePicker = new wxDatePickerCtrl(this, wxID_ANY, dt,
+ wxDefaultPosition, wxDefaultSize,
+ dtpStyle);
+ m_datePicker->SetRange(wxDateTime(1, wxDateTime::Jan, 1900),
+ wxDefaultDateTime);
+ sizerTop->Add(m_datePicker, wxSizerFlags().Expand().Border());
+
+ sizerTop->AddStretchSpacer(1);
+ sizerTop->Add(sizerText);
+
+ sizerTop->Add(sizerBtns, wxSizerFlags().Centre().Border());
+
+ SetSizerAndFit(sizerTop);
+ Layout();
+}
+
+void MyDialog::OnDateChange(wxDateEvent& event)
+{
+ const wxDateTime dt = event.GetDate();
+ if ( dt.IsValid() )
+ m_text->SetValue(dt.FormatISODate());
+ else
+ m_text->SetValue(wxEmptyString);
+}
+
+#endif // wxUSE_DATEPICKCTRL