X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/dafa49256d2b43cde863ad44d17adc9d7bea5534..df16a53ef9ae506c51023178e4fe45ce45e69447:/src/msw/statbr95.cpp diff --git a/src/msw/statbr95.cpp b/src/msw/statbr95.cpp index 6fc87c0d1c..5889081a5f 100644 --- a/src/msw/statbr95.cpp +++ b/src/msw/statbr95.cpp @@ -40,13 +40,6 @@ #include #endif -// ---------------------------------------------------------------------------- -// wxWindows macros -// ---------------------------------------------------------------------------- - -IMPLEMENT_DYNAMIC_CLASS(wxStatusBar95, wxWindow); -IMPLEMENT_DYNAMIC_CLASS(wxStatusBar, wxStatusBar95) - // ---------------------------------------------------------------------------- // macros // ---------------------------------------------------------------------------- @@ -127,24 +120,6 @@ bool wxStatusBar95::Create(wxWindow *parent, wxStatusBar95::~wxStatusBar95() { - delete [] m_statusWidths; -} - -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) @@ -152,17 +127,15 @@ 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(); } @@ -176,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) ) {