X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/e9a05074a9d8cfa9ccdc5c70b29d79d805dc57b0..472137baebae6c011ad7d70285de454b9ce7796d:/src/common/statbar.cpp diff --git a/src/common/statbar.cpp b/src/common/statbar.cpp index 641a772927..3e91d47ec6 100644 --- a/src/common/statbar.cpp +++ b/src/common/statbar.cpp @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Name: common/statbar.cpp +// Name: src/common/statbar.cpp // Purpose: wxStatusBarBase implementation // Author: Vadim Zeitlin // Modified by: @@ -17,10 +17,6 @@ // headers // ---------------------------------------------------------------------------- -#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) - #pragma implementation "statbar.h" -#endif - // For compilers that support precompilation, includes "wx.h". #include "wx/wxprec.h" @@ -28,15 +24,18 @@ #pragma hdrstop #endif +#if wxUSE_STATUSBAR + +#include "wx/statusbr.h" + #ifndef WX_PRECOMP #include "wx/frame.h" - #include "wx/statusbr.h" #endif //WX_PRECOMP -#if wxUSE_STATUSBAR - #include "wx/listimpl.cpp" -WX_DEFINE_LIST(wxListString); +WX_DEFINE_LIST(wxListString) + +const wxChar wxStatusBarNameStr[] = wxT("statusBar"); // ============================================================================ // wxStatusBarBase implementation @@ -61,11 +60,11 @@ wxStatusBarBase::~wxStatusBarBase() { FreeWidths(); FreeStacks(); - InitStyles(); + FreeStyles(); // notify the frame that it doesn't have a status bar any longer to avoid // dangling pointers - wxFrameBase *frame = wxDynamicCast(GetParent(), wxFrameBase); + wxFrame *frame = wxDynamicCast(GetParent(), wxFrame); if ( frame && frame->GetStatusBar() == this ) { frame->SetStatusBar(NULL); @@ -223,12 +222,21 @@ wxArrayInt wxStatusBarBase::CalculateAbsWidths(wxCoord widthTotal) const { if ( m_nFields ) { - // default: all fields have the same width - int nWidth = widthTotal / m_nFields; - for ( int i = 0; i < m_nFields; i++ ) + // Default: all fields have the same width. This is not always + // possible to do exactly (if widthTotal is not divisible by + // m_nFields) - if that happens, we distribute the extra pixels + // among all fields: + int widthToUse = widthTotal; + + for ( int i = m_nFields; i > 0; i-- ) { - widths.Add(nWidth); + // divide the unassigned width evently between the + // not yet processed fields: + int w = widthToUse / i; + widths.Add(w); + widthToUse -= w; } + } //else: we're empty anyhow } @@ -285,12 +293,12 @@ void wxStatusBarBase::InitStacks() void wxStatusBarBase::FreeStacks() { - if(!m_statusTextStacks) return; - size_t i; + if ( !m_statusTextStacks ) + return; - for(i = 0; i < (size_t)m_nFields; ++i) + for ( size_t i = 0; i < (size_t)m_nFields; ++i ) { - if(m_statusTextStacks[i]) + if ( m_statusTextStacks[i] ) { wxListString& t = *m_statusTextStacks[i]; WX_CLEAR_LIST(wxListString, t); @@ -358,4 +366,3 @@ wxListString *wxStatusBarBase::GetOrCreateStatusStack(int i) } #endif // wxUSE_STATUSBAR -