From: Vadim Zeitlin Date: Mon, 7 Apr 2008 01:06:57 +0000 (+0000) Subject: correct positioning of the control and removed workarounds for old MSW bugs X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/c3a899dd9210a348a9dc5904f08d489eea0b6b34 correct positioning of the control and removed workarounds for old MSW bugs git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@53072 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/include/wx/generic/calctrlg.h b/include/wx/generic/calctrlg.h index 57e1bab8af..e4d3beabff 100644 --- a/include/wx/generic/calctrlg.h +++ b/include/wx/generic/calctrlg.h @@ -168,9 +168,6 @@ public: protected: // override some base class virtuals virtual wxSize DoGetBestSize() const; - virtual void DoGetPosition(int *x, int *y) const; - virtual void DoGetSize(int *width, int *height) const; - virtual void DoSetSize(int x, int y, int width, int height, int sizeFlags); virtual void DoMoveWindow(int x, int y, int width, int height); private: @@ -256,6 +253,7 @@ private: // typed in by the user void SetUserChangedYear() { m_userChangedYear = true; } + // the subcontrols wxStaticText *m_staticMonth; wxComboBox *m_comboMonth; diff --git a/src/generic/calctrlg.cpp b/src/generic/calctrlg.cpp index 2c5a340376..cb153cce28 100644 --- a/src/generic/calctrlg.cpp +++ b/src/generic/calctrlg.cpp @@ -789,39 +789,30 @@ wxSize wxGenericCalendarCtrl::DoGetBestSize() const wx_const_cast(wxGenericCalendarCtrl *, this)->RecalcGeometry(); wxCoord width = 7*m_widthCol, - height = 7*m_heightRow + m_rowOffset + VERT_MARGIN; + height = 7*m_heightRow + m_rowOffset; if ( !HasFlag(wxCAL_SEQUENTIAL_MONTH_SELECTION) ) { - // the combobox doesn't report its height correctly (it returns the - // height including the drop down list) so don't use it - height += m_spinYear->GetBestSize().y; + const wxSize bestSizeCombo = m_comboMonth->GetBestSize(); + height += wxMax(bestSizeCombo.y, m_spinYear->GetBestSize().y) + + VERT_MARGIN; - wxCoord w2 = m_comboMonth->GetBestSize().x + HORZ_MARGIN + GetCharWidth()*6; - if (width < w2) + wxCoord w2 = bestSizeCombo.x + HORZ_MARGIN + GetCharWidth()*6; + if ( width < w2 ) width = w2; } + wxSize best(width, height); if ( !HasFlag(wxBORDER_NONE) ) { - // the border would clip the last line otherwise - height += 6; - width += 4; + best += GetWindowBorderSize(); } - wxSize best(width, height); CacheBestSize(best); return best; } -void wxGenericCalendarCtrl::DoSetSize(int x, int y, - int width, int height, - int sizeFlags) -{ - wxControl::DoSetSize(x, y, width, height, sizeFlags); -} - void wxGenericCalendarCtrl::DoMoveWindow(int x, int y, int width, int height) { int yDiff; @@ -832,26 +823,17 @@ void wxGenericCalendarCtrl::DoMoveWindow(int x, int y, int width, int height) wxSize sizeStatic = m_staticMonth->GetSize(); wxSize sizeSpin = m_spinYear->GetSize(); - // wxMSW sometimes reports the wrong combo height, - // so on this platform we'll use the spin control - // height instead. -#ifdef __WXMSW__ - int maxHeight = sizeSpin.y; - int requiredSpinHeight = -1; -#else - int maxHeight = sizeCombo.y; - int requiredSpinHeight = sizeCombo.y; -#endif + int maxHeight = wxMax(sizeSpin.y, sizeCombo.y); int dy = (maxHeight - sizeStatic.y) / 2; m_comboMonth->Move(x, y); m_staticMonth->SetSize(x, y + dy, sizeCombo.x, -1, sizeStatic.y); int xDiff = sizeCombo.x + HORZ_MARGIN; - m_spinYear->SetSize(x + xDiff, y, width - xDiff, requiredSpinHeight); + m_spinYear->SetSize(x + xDiff, y, width - xDiff, maxHeight); m_staticYear->SetSize(x + xDiff, y + dy, width - xDiff, sizeStatic.y); - yDiff = wxMax(sizeSpin.y, maxHeight) + VERT_MARGIN; + yDiff = maxHeight + VERT_MARGIN; } else // no controls on the top { @@ -861,36 +843,6 @@ void wxGenericCalendarCtrl::DoMoveWindow(int x, int y, int width, int height) wxControl::DoMoveWindow(x, y + yDiff, width, height - yDiff); } -void wxGenericCalendarCtrl::DoGetPosition(int *x, int *y) const -{ - wxControl::DoGetPosition(x, y); -#ifndef __WXPM__ - if ( !HasFlag(wxCAL_SEQUENTIAL_MONTH_SELECTION) && GetMonthControl() ) - { - // our real top corner is not in this position - if ( y ) - { - *y -= GetMonthControl()->GetSize().y + VERT_MARGIN; - } - } -#endif -} - -void wxGenericCalendarCtrl::DoGetSize(int *width, int *height) const -{ - wxControl::DoGetSize(width, height); -#ifndef __WXPM__ - if ( !HasFlag(wxCAL_SEQUENTIAL_MONTH_SELECTION) ) - { - // our real height is bigger - if ( height && GetMonthControl()) - { - *height += GetMonthControl()->GetSize().y + VERT_MARGIN; - } - } -#endif -} - void wxGenericCalendarCtrl::RecalcGeometry() { wxClientDC dc(this);