X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/628e155d8c70da0f962289cf1e1dea3699255707..82bf63a08ca2c5e2d500557550449cad219991c9:/src/generic/datectlg.cpp?ds=sidebyside diff --git a/src/generic/datectlg.cpp b/src/generic/datectlg.cpp index c451b17347..476c4c5e81 100644 --- a/src/generic/datectlg.cpp +++ b/src/generic/datectlg.cpp @@ -25,13 +25,6 @@ #if wxUSE_DATEPICKCTRL -#include "wx/datectrl.h" - -// use this version if we're explicitly requested to do it or if it's the only -// one we have -#if !defined(wxHAS_NATIVE_DATEPICKCTRL) || \ - (defined(wxUSE_DATEPICKCTRL_GENERIC) && wxUSE_DATEPICKCTRL_GENERIC) - #ifndef WX_PRECOMP #include "wx/dialog.h" #include "wx/dcmemory.h" @@ -40,27 +33,14 @@ #include "wx/valtext.h" #endif -#ifdef wxHAS_NATIVE_DATEPICKCTRL - // this header is not included from wx/datectrl.h if we have a native - // version, but we do need it here - #include "wx/generic/datectrl.h" -#endif - -#include "wx/dateevt.h" +#include "wx/datectrl.h" +#include "wx/generic/datectrl.h" -#include "wx/calctrl.h" -#include "wx/generic/calctrlg.h" -#include "wx/combo.h" // ---------------------------------------------------------------------------- // constants // ---------------------------------------------------------------------------- -#if defined(__WXMSW__) - #define CALBORDER 0 -#else - #define CALBORDER 4 -#endif // ---------------------------------------------------------------------------- // global variables @@ -71,12 +51,12 @@ // local classes // ---------------------------------------------------------------------------- -class wxCalendarComboPopup : public wxGenericCalendarCtrl, +class wxCalendarComboPopup : public wxCalendarCtrl, public wxComboPopup { public: - wxCalendarComboPopup() : wxGenericCalendarCtrl(), + wxCalendarComboPopup() : wxCalendarCtrl(), wxComboPopup() { } @@ -90,44 +70,15 @@ public: // certainly introduce new bugs. virtual bool Create(wxWindow* parent) { - if ( !wxGenericCalendarCtrl::Create(parent, wxID_ANY, wxDefaultDateTime, + if ( !wxCalendarCtrl::Create(parent, wxID_ANY, wxDefaultDateTime, wxPoint(0, 0), wxDefaultSize, - wxCAL_SHOW_HOLIDAYS | wxBORDER_SUNKEN) ) + wxCAL_SEQUENTIAL_MONTH_SELECTION + | wxCAL_SHOW_HOLIDAYS | wxBORDER_SUNKEN) ) return false; - wxWindow *yearControl = wxGenericCalendarCtrl::GetYearControl(); - - wxClientDC dc(yearControl); - dc.SetFont(yearControl->GetFont()); - wxCoord width, dummy; - dc.GetTextExtent(wxT("2000"), &width, &dummy); - width += ConvertDialogToPixels(wxSize(20, 0)).x; - - wxSize calSize = wxGenericCalendarCtrl::GetBestSize(); - wxSize yearSize = yearControl->GetSize(); - yearSize.x = width; - - wxPoint yearPosition = yearControl->GetPosition(); - SetFormat("%x"); - width = yearPosition.x + yearSize.x+2+CALBORDER/2; - if (width < calSize.x-4) - width = calSize.x-4; - - int calPos = (width-calSize.x)/2; - if (calPos == -1) - { - calPos = 0; - width += 2; - } - wxGenericCalendarCtrl::SetSize(calPos, 0, calSize.x, calSize.y); - yearControl->SetSize(width-yearSize.x-CALBORDER/2, yearPosition.y, - yearSize.x, yearSize.y); - wxGenericCalendarCtrl::GetMonthControl()->Move(0, 0); - - m_useSize.x = width+CALBORDER/2; - m_useSize.y = calSize.y-2+CALBORDER; + m_useSize = wxCalendarCtrl::GetBestSize(); wxWindow* tx = m_combo->GetTextCtrl(); if ( !tx ) @@ -154,6 +105,7 @@ public: if ( date.IsValid() ) { m_combo->SetText(date.Format(m_format)); + SetDate(date); } else // invalid date { @@ -162,8 +114,6 @@ public: m_combo->SetText(wxEmptyString); } - - SetDate(date); } bool ParseDateTime(const wxString& s, wxDateTime* pDt) @@ -230,6 +180,9 @@ private: m_combo->SetText(GetStringValueFor(dt)); + if ( !dt.IsValid() && HasDPFlag(wxDP_ALLOWNONE) ) + return; + // notify that we had to change the date after validation if ( (dt.IsValid() && (!dtOld.IsValid() || dt != dtOld)) || (!dt.IsValid() && dtOld.IsValid()) ) @@ -314,11 +267,9 @@ private: virtual void SetStringValue(const wxString& s) { wxDateTime dt; - if ( ParseDateTime(s, &dt) ) + if ( !s.empty() && ParseDateTime(s, &dt) ) SetDate(dt); - else if ( HasDPFlag(wxDP_ALLOWNONE) ) - SetDate(wxInvalidDateTime); - //else: !wxDP_ALLOWNONE, keep the old value + //else: keep the old value } virtual wxString GetStringValue() const @@ -345,7 +296,7 @@ private: }; -BEGIN_EVENT_TABLE(wxCalendarComboPopup, wxGenericCalendarCtrl) +BEGIN_EVENT_TABLE(wxCalendarComboPopup, wxCalendarCtrl) EVT_KEY_DOWN(wxCalendarComboPopup::OnCalKey) EVT_CALENDAR_SEL_CHANGED(wxID_ANY, wxCalendarComboPopup::OnSelChange) EVT_CALENDAR_PAGE_CHANGED(wxID_ANY, wxCalendarComboPopup::OnSelChange) @@ -469,11 +420,7 @@ void wxDatePickerCtrlGeneric::SetValue(const wxDateTime& date) bool wxDatePickerCtrlGeneric::GetRange(wxDateTime *dt1, wxDateTime *dt2) const { - if (dt1) - *dt1 = m_popup->GetLowerDateLimit(); - if (dt2) - *dt2 = m_popup->GetUpperDateLimit(); - return true; + return m_popup->GetDateRange(dt1, dt2); } @@ -483,7 +430,7 @@ wxDatePickerCtrlGeneric::SetRange(const wxDateTime &dt1, const wxDateTime &dt2) m_popup->SetDateRange(dt1, dt2); } -wxGenericCalendarCtrl *wxDatePickerCtrlGeneric::GetCalendar() const +wxCalendarCtrl *wxDatePickerCtrlGeneric::GetCalendar() const { return m_popup; } @@ -511,7 +458,7 @@ void wxDatePickerCtrlGeneric::OnText(wxCommandEvent &ev) // We'll create an additional event if the date is valid. // If the date isn't valid, the user's probably in the middle of typing wxDateTime dt; - if ( !m_popup->ParseDateTime(m_combo->GetValue(), &dt) ) + if ( !m_popup || !m_popup->ParseDateTime(m_combo->GetValue(), &dt) ) return; m_popup->SendDateEvent(dt); @@ -524,7 +471,5 @@ void wxDatePickerCtrlGeneric::OnFocus(wxFocusEvent& WXUNUSED(event)) } -#endif // wxUSE_DATEPICKCTRL_GENERIC - #endif // wxUSE_DATEPICKCTRL