]> git.saurik.com Git - wxWidgets.git/blobdiff - src/msw/datectrl.cpp
Forward-ported wxPython-bindings related cleanup from 2.9.0 branch
[wxWidgets.git] / src / msw / datectrl.cpp
index 692f0462d4828f1084495232dbc851c45ff616b1..176d095f7cce5c43c3aeeeffb1ca194fb00fe448 100644 (file)
@@ -31,6 +31,7 @@
     #include "wx/app.h"
     #include "wx/intl.h"
     #include "wx/dcclient.h"
+    #include "wx/settings.h"
     #include "wx/msw/private.h"
 #endif
 
@@ -123,8 +124,7 @@ WXDWORD wxDatePickerCtrl::MSWGetStyle(long style, WXDWORD *exstyle) const
 
 wxSize wxDatePickerCtrl::DoGetBestSize() const
 {
-    wxClientDC dc(wx_const_cast(wxDatePickerCtrl *, this));
-    dc.SetFont(GetFont());
+    wxClientDC dc(const_cast<wxDatePickerCtrl *>(this));
 
     // we can't use FormatDate() here as the CRT doesn't always use the same
     // format as the date picker control
@@ -156,13 +156,23 @@ wxSize wxDatePickerCtrl::DoGetBestSize() const
         }
     }
 
-    // the control adds a lot of extra space around separators
-    s.Replace(_T(","), _T("    ,    "));
+    // the best size for the control is bigger than just the string
+    // representation of todays date because the control must accommodate any
+    // date and while the widths of all digits are usually about the same, the
+    // width of the month string varies a lot, so try to account for it
+    s += _T("WW");
 
     int x, y;
     dc.GetTextExtent(s, &x, &y);
 
-    wxSize best(x + 40 /* margin + arrows */, EDIT_HEIGHT_FROM_CHAR_HEIGHT(y));
+    // account for the drop-down arrow or spin arrows
+    x += wxSystemSettings::GetMetric(wxSYS_HSCROLL_ARROW_X);
+
+    // and for the checkbox if we have it
+    if ( HasFlag(wxDP_ALLOWNONE) )
+        x += 3*GetCharWidth();
+
+    wxSize best(x, EDIT_HEIGHT_FROM_CHAR_HEIGHT(y));
     CacheBestSize(best);
     return best;
 }
@@ -195,7 +205,7 @@ void wxDatePickerCtrl::SetValue(const wxDateTime& dt)
 
 wxDateTime wxDatePickerCtrl::GetValue() const
 {
-#ifdef __WXDEBUG__
+#if wxDEBUG_LEVEL
     wxDateTime dt;
     SYSTEMTIME st;
     if ( DateTime_GetSystemtime(GetHwnd(), &st) == GDT_VALID )
@@ -206,7 +216,7 @@ wxDateTime wxDatePickerCtrl::GetValue() const
     wxASSERT_MSG( m_date.IsValid() == dt.IsValid() &&
                     (!dt.IsValid() || dt == m_date),
                   _T("bug in wxDatePickerCtrl: m_date not in sync") );
-#endif // __WXDEBUG__
+#endif // wxDEBUG_LEVEL
 
     return m_date;
 }