X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/85fa9d60c470e58fe8ff3589b0516cbbe853cbb0..e340b786a8830d79beac196f452f1380143e5df7:/src/generic/datectlg.cpp?ds=sidebyside diff --git a/src/generic/datectlg.cpp b/src/generic/datectlg.cpp index d22073d67e..6527a991b6 100644 --- a/src/generic/datectlg.cpp +++ b/src/generic/datectlg.cpp @@ -70,14 +70,6 @@ // global variables // ---------------------------------------------------------------------------- -// this should have been a flag in wxDatePickerCtrlGeneric itself but adding it -// there now would break backwards compatibility, so put it here as a global: -// this shouldn't be a big problem as only one (GUI) thread normally can call -// wxDatePickerCtrlGeneric::SetValue() and so it can be only ever used for one -// control at a time -// -// if the value is not NULL, it points to the control which is inside SetValue() -static wxDatePickerCtrlGeneric *gs_inSetValue = NULL; // ---------------------------------------------------------------------------- // local classes @@ -121,7 +113,7 @@ public: wxPoint yearPosition = yearControl->GetPosition(); - SetFormat(wxT("%x")); + SetFormat("%x"); width = yearPosition.x + yearSize.x+2+CALBORDER/2; if (width < calSize.x-4) @@ -189,7 +181,7 @@ public: if ( !s.empty() ) { - pDt->ParseFormat(s, m_format); + pDt->ParseFormat(s.c_str(), m_format); if ( !pDt->IsValid() ) return false; } @@ -207,10 +199,10 @@ public: cev.SetEventObject(datePicker); cev.SetId(datePicker->GetId()); cev.SetDate(dt); - GetParent()->ProcessEvent(cev); + datePicker->GetEventHandler()->ProcessEvent(cev); wxDateEvent event(datePicker, dt, wxEVT_DATE_CHANGED); - datePicker->GetParent()->ProcessEvent(event); + datePicker->GetEventHandler()->ProcessEvent(event); } private: @@ -267,7 +259,7 @@ private: return m_combo->GetParent()->HasFlag(flag); } - bool SetFormat(const wxChar *fmt) + bool SetFormat(const wxString& fmt) { m_format.clear(); @@ -378,6 +370,7 @@ END_EVENT_TABLE() BEGIN_EVENT_TABLE(wxDatePickerCtrlGeneric, wxDatePickerCtrlBase) EVT_TEXT(wxID_ANY, wxDatePickerCtrlGeneric::OnText) EVT_SIZE(wxDatePickerCtrlGeneric::OnSize) + EVT_SET_FOCUS(wxDatePickerCtrlGeneric::OnFocus) END_EVENT_TABLE() #ifndef wxHAS_NATIVE_DATEPICKCTRL @@ -412,15 +405,21 @@ bool wxDatePickerCtrlGeneric::Create(wxWindow *parent, m_combo = new wxComboCtrl(this, -1, wxEmptyString, wxDefaultPosition, wxDefaultSize); + m_combo->SetCtrlMainWnd(this); + m_popup = new wxCalendarComboPopup(); +#if defined(__WXMSW__) + // without this keyboard navigation in month control doesn't work + m_combo->UseAltPopupWindow(); +#endif m_combo->SetPopupControl(m_popup); m_cal = m_popup; m_popup->SetDateValue(date.IsValid() ? date : wxDateTime::Today()); - SetBestFittingSize(size); + SetInitialSize(size); return true; } @@ -516,7 +515,7 @@ void wxDatePickerCtrlGeneric::OnText(wxCommandEvent &ev) { ev.SetEventObject(this); ev.SetId(GetId()); - GetParent()->ProcessEvent(ev); + GetParent()->GetEventHandler()->ProcessEvent(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 @@ -528,6 +527,12 @@ void wxDatePickerCtrlGeneric::OnText(wxCommandEvent &ev) } +void wxDatePickerCtrlGeneric::OnFocus(wxFocusEvent& WXUNUSED(event)) +{ + m_combo->SetFocus(); +} + + #endif // wxUSE_DATEPICKCTRL_GENERIC #endif // wxUSE_DATEPICKCTRL