]> git.saurik.com Git - wxWidgets.git/blobdiff - src/generic/datectlg.cpp
Fix crash on wxDataViewCtrl creation after r73565.
[wxWidgets.git] / src / generic / datectlg.cpp
index 5d4e6b0614655810b28814677b5c496ccd4937c3..56a79df9d23d98911d16f5ac28e42afa4fa7108a 100644 (file)
     #include "wx/valtext.h"
 #endif
 
+#include "wx/calctrl.h"
+#include "wx/combo.h"
+
 #include "wx/datectrl.h"
 #include "wx/generic/datectrl.h"
 
-
 // ----------------------------------------------------------------------------
 // constants
 // ----------------------------------------------------------------------------
@@ -128,7 +130,7 @@ public:
 
         if ( !s.empty() )
         {
-            pDt->ParseFormat(s.c_str(), m_format);
+            pDt->ParseFormat(s, m_format);
             if ( !pDt->IsValid() )
                 return false;
         }
@@ -207,11 +209,15 @@ private:
     // functions honours wxDP_SHOWCENTURY flag.
     wxString GetLocaleDateFormat() const
     {
+#if wxUSE_INTL
         wxString fmt = wxLocale::GetInfo(wxLOCALE_SHORT_DATE_FMT);
         if ( HasDPFlag(wxDP_SHOWCENTURY) )
             fmt.Replace("%y", "%Y");
 
         return fmt;
+#else // !wxUSE_INTL
+        return wxT("x");
+#endif // wxUSE_INTL/!wxUSE_INTL
     }
 
     bool SetFormat(const wxString& fmt)
@@ -373,7 +379,27 @@ bool wxDatePickerCtrlGeneric::Destroy()
 
 wxSize wxDatePickerCtrlGeneric::DoGetBestSize() const
 {
-    return m_combo->GetBestSize();
+    // A better solution would be to use a custom text control that would have
+    // the best size determined by the current date format and let m_combo take
+    // care of the best size computation, but this isn't easily possible with
+    // wxComboCtrl currently, so we compute our own best size here instead even
+    // if this means adding some extra margins to account for text control
+    // borders, space between it and the button and so on.
+    wxSize size = m_combo->GetButtonSize();
+
+    wxTextCtrl* const text = m_combo->GetTextCtrl();
+    size.x += text->GetTextExtent(text->GetValue()).x;
+    size.x += 2*text->GetCharWidth(); // This is the margin mentioned above.
+
+    return size;
+}
+
+wxWindowList wxDatePickerCtrlGeneric::GetCompositeWindowParts() const
+{
+    wxWindowList parts;
+    parts.push_back(m_combo);
+    parts.push_back(m_popup);
+    return parts;
 }
 
 // ----------------------------------------------------------------------------