X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/71e030352d74e4e6aed28cfcb0ea6edf3d17af6e..51dc95a4c8ccb00741be48f6353749ada3e9f39a:/src/msw/statbr95.cpp diff --git a/src/msw/statbr95.cpp b/src/msw/statbr95.cpp index b0f3413153..5889081a5f 100644 --- a/src/msw/statbr95.cpp +++ b/src/msw/statbr95.cpp @@ -40,12 +40,6 @@ #include #endif -// ---------------------------------------------------------------------------- -// wxWindows macros -// ---------------------------------------------------------------------------- - -IMPLEMENT_DYNAMIC_CLASS(wxStatusBar95, wxWindow); - // ---------------------------------------------------------------------------- // macros // ---------------------------------------------------------------------------- @@ -128,39 +122,20 @@ wxStatusBar95::~wxStatusBar95() { } -void wxStatusBar95::CopyFieldsWidth(const int widths[]) -{ - if (widths && !m_statusWidths) - m_statusWidths = new int[m_nFields]; - - if ( widths != NULL ) - { - for ( int i = 0; i < m_nFields; i++ ) - m_statusWidths[i] = widths[i]; - } - else // no widths - { - delete [] m_statusWidths; - m_statusWidths = NULL; - } -} - void wxStatusBar95::SetFieldsCount(int nFields, const int *widths) { // this is a Windows limitation wxASSERT_MSG( (nFields > 0) && (nFields < 255), _T("too many fields") ); - m_nFields = nFields; + wxStatusBarBase::SetFieldsCount(nFields, widths); - CopyFieldsWidth(widths); SetFieldsWidth(); } -void wxStatusBar95::SetStatusWidths(int WXUNUSED_UNLESS_DEBUG(n), const int widths[]) +void wxStatusBar95::SetStatusWidths(int n, const int widths[]) { - wxASSERT_MSG( n == m_nFields, _T("field number mismatch") ); + wxStatusBarBase::SetStatusWidths(n, widths); - CopyFieldsWidth(widths); SetFieldsWidth(); } @@ -174,46 +149,15 @@ void wxStatusBar95::SetFieldsWidth() int extraWidth = aBorders[2]; // space between fields - int *pWidths = new int[m_nFields]; + wxArrayInt widthsAbs = + CalculateAbsWidths(GetClientSize().x - extraWidth*(m_nFields - 1)); - int nWindowWidth, y; - GetClientSize(&nWindowWidth, &y); + int *pWidths = new int[m_nFields]; - if ( m_statusWidths == NULL ) { - // default: all fields have the same width - int nWidth = nWindowWidth / m_nFields; - for ( int i = 0; i < m_nFields; i++ ) - pWidths[i] = (i + 1) * nWidth; - } - else { - // -1 doesn't mean the same thing for wxWindows and Win32, recalc - int nTotalWidth = 0, - nVarCount = 0, - i; - for ( i = 0; i < m_nFields; i++ ) { - if ( m_statusWidths[i] == -1 ) - nVarCount++; - else - nTotalWidth += m_statusWidths[i] + extraWidth; - } - - if ( nVarCount == 0 ) { - wxFAIL_MSG( _T("at least one field must be of variable width") ); - - nVarCount++; - } - - int nVarWidth = (nWindowWidth - nTotalWidth) / nVarCount; - - // do fill the array - int nCurPos = 0; - for ( i = 0; i < m_nFields; i++ ) { - if ( m_statusWidths[i] == -1 ) - nCurPos += nVarWidth; - else - nCurPos += m_statusWidths[i] + extraWidth; - pWidths[i] = nCurPos; - } + int nCurPos = 0; + for ( int i = 0; i < m_nFields; i++ ) { + nCurPos += widthsAbs[i] + extraWidth; + pWidths[i] = nCurPos; } if ( !StatusBar_SetParts(GetHwnd(), m_nFields, pWidths) ) {