X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/222ed1d678dff2f5c3c4164321dd05e8f47de487..a290fa5a7deebe9d96c0c0089d18e27d4bd9b624:/src/common/statbar.cpp diff --git a/src/common/statbar.cpp b/src/common/statbar.cpp index 3867476a71..1ebaf0e3df 100644 --- a/src/common/statbar.cpp +++ b/src/common/statbar.cpp @@ -17,7 +17,7 @@ // headers // ---------------------------------------------------------------------------- -#ifdef __GNUG__ +#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) #pragma implementation "statbar.h" #endif @@ -53,12 +53,14 @@ wxStatusBarBase::wxStatusBarBase() InitWidths(); InitStacks(); + InitStyles(); } wxStatusBarBase::~wxStatusBarBase() { FreeWidths(); FreeStacks(); + InitStyles(); } // ---------------------------------------------------------------------------- @@ -75,6 +77,20 @@ void wxStatusBarBase::FreeWidths() delete [] m_statusWidths; } +// ---------------------------------------------------------------------------- +// styles array handling +// ---------------------------------------------------------------------------- + +void wxStatusBarBase::InitStyles() +{ + m_statusStyles = NULL; +} + +void wxStatusBarBase::FreeStyles() +{ + delete [] m_statusStyles; +} + // ---------------------------------------------------------------------------- // field widths // ---------------------------------------------------------------------------- @@ -112,6 +128,26 @@ void wxStatusBarBase::SetFieldsCount(int number, const int *widths) m_statusTextStacks = newStacks; } + // Resize styles array + if (m_statusStyles) + { + int *oldStyles = m_statusStyles; + m_statusStyles = new int[number]; + int i, max = wxMin(number, m_nFields); + + // copy old styles + for (i = 0; i < max; ++i) + m_statusStyles[i] = oldStyles[i]; + + // initialize new styles to wxSB_NORMAL + for (i = max; i < number; ++i) + m_statusStyles[i] = wxSB_NORMAL; + + // free old styles + delete [] oldStyles; + } + + m_nFields = number; ReinitWidths(); @@ -151,6 +187,25 @@ void wxStatusBarBase::SetStatusWidths(int WXUNUSED_UNLESS_DEBUG(n), Refresh(); } +void wxStatusBarBase::SetStatusStyles(int WXUNUSED_UNLESS_DEBUG(n), + const int styles[]) +{ + wxCHECK_RET( styles, _T("NULL pointer in SetStatusStyles") ); + + wxASSERT_MSG( n == m_nFields, _T("field number mismatch") ); + + if ( !m_statusStyles ) + m_statusStyles = new int[m_nFields]; + + for ( int i = 0; i < m_nFields; i++ ) + { + m_statusStyles[i] = styles[i]; + } + + // update the display after the widths changed + Refresh(); +} + wxArrayInt wxStatusBarBase::CalculateAbsWidths(wxCoord widthTotal) const { wxArrayInt widths; @@ -250,7 +305,11 @@ void wxStatusBarBase::FreeStacks() void wxStatusBarBase::PushStatusText(const wxString& text, int number) { wxListString* st = GetOrCreateStatusStack(number); - st->Insert(new wxString(GetStatusText(number))); + // This long-winded way around avoids an internal compiler error + // in VC++ 6 with RTTI enabled + wxString tmp1(GetStatusText(number)); + wxString* tmp = new wxString(tmp1); + st->Insert(tmp); SetStatusText(text, number); }