X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/71e030352d74e4e6aed28cfcb0ea6edf3d17af6e..c66b63e565d340f3a73441a4f780ab57842c7851:/src/msw/statbr95.cpp diff --git a/src/msw/statbr95.cpp b/src/msw/statbr95.cpp index b0f3413153..3b203df0b0 100644 --- a/src/msw/statbr95.cpp +++ b/src/msw/statbr95.cpp @@ -6,10 +6,10 @@ // Created: 04.04.98 // RCS-ID: $Id$ // Copyright: (c) 1998 Vadim Zeitlin -// Licence: wxWindows license +// Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// -#ifdef __GNUG__ +#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) #pragma implementation "statbr95.h" #endif @@ -27,7 +27,7 @@ #include "wx/dcclient.h" #endif -#if defined(__WIN95__) && wxUSE_NATIVE_STATUSBAR +#if wxUSE_STATUSBAR && defined(__WIN95__) && wxUSE_NATIVE_STATUSBAR #include "wx/intl.h" #include "wx/log.h" @@ -36,16 +36,10 @@ #include "wx/msw/private.h" #include -#if defined(__WIN95__) && !((defined(__GNUWIN32_OLD__) || defined(__TWIN32__)) && !defined(__CYGWIN10__)) +#if defined(__WIN95__) && !(defined(__GNUWIN32_OLD__) && !defined(__CYGWIN10__)) #include #endif -// ---------------------------------------------------------------------------- -// wxWindows macros -// ---------------------------------------------------------------------------- - -IMPLEMENT_DYNAMIC_CLASS(wxStatusBar95, wxWindow); - // ---------------------------------------------------------------------------- // macros // ---------------------------------------------------------------------------- @@ -102,9 +96,11 @@ bool wxStatusBar95::Create(wxWindow *parent, } else { +#ifndef __WXWINCE__ // may be some versions of comctl32.dll do need it - anyhow, it won't // do any harm wstyle |= SBARS_SIZEGRIP; +#endif } m_hWnd = (WXHWND)CreateStatusWindow(wstyle, @@ -121,6 +117,8 @@ bool wxStatusBar95::Create(wxWindow *parent, SetFieldsCount(1); SubclassWin(m_hWnd); + SetBackgroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_MENUBAR)); + return TRUE; } @@ -128,39 +126,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 +153,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) ) { @@ -243,8 +191,7 @@ wxString wxStatusBar95::GetStatusText(int nField) const int len = StatusBar_GetTextLen(GetHwnd(), nField); if ( len > 0 ) { - StatusBar_GetText(GetHwnd(), nField, str.GetWriteBuf(len)); - str.UngetWriteBuf(); + StatusBar_GetText(GetHwnd(), nField, wxStringBuffer(str, len)); } return str; @@ -303,7 +250,7 @@ void wxStatusBar95::DoMoveWindow(int x, int y, int width, int height) // omitted because for normal status bars (positioned along the bottom // edge) the position is already set correctly, but if the user wants to // position them in some exotic location, this is really needed - wxWindow::DoMoveWindow(x, y, width, height); + wxWindowMSW::DoMoveWindow(x, y, width, height); // adjust fields widths to the new size SetFieldsWidth();