+// ----------------------------------------------------------------------------
+// text stacks handling
+// ----------------------------------------------------------------------------
+
+void wxStatusBarBase::InitStacks()
+{
+ m_statusTextStacks = NULL;
+}
+
+void wxStatusBarBase::FreeStacks()
+{
+ if ( !m_statusTextStacks )
+ return;
+
+ for ( size_t i = 0; i < (size_t)m_nFields; ++i )
+ {
+ if ( m_statusTextStacks[i] )
+ {
+ wxListString& t = *m_statusTextStacks[i];
+ WX_CLEAR_LIST(wxListString, t);
+ delete m_statusTextStacks[i];
+ }
+ }
+
+ delete[] m_statusTextStacks;
+}
+
+// ----------------------------------------------------------------------------
+// text stacks
+// ----------------------------------------------------------------------------
+
+void wxStatusBarBase::PushStatusText(const wxString& text, int number)
+{
+ wxListString* st = GetOrCreateStatusStack(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);
+}
+
+void wxStatusBarBase::PopStatusText(int number)
+{
+ wxListString *st = GetStatusStack(number);
+ wxCHECK_RET( st, _T("Unbalanced PushStatusText/PopStatusText") );
+ wxListString::compatibility_iterator top = st->GetFirst();
+
+ SetStatusText(*top->GetData(), number);
+ delete top->GetData();
+ st->Erase(top);
+ if(st->GetCount() == 0)
+ {
+ delete st;
+ m_statusTextStacks[number] = 0;
+ }
+}
+
+wxListString *wxStatusBarBase::GetStatusStack(int i) const
+{
+ if(!m_statusTextStacks)
+ return 0;
+ return m_statusTextStacks[i];
+}
+
+wxListString *wxStatusBarBase::GetOrCreateStatusStack(int i)
+{
+ if(!m_statusTextStacks)
+ {
+ m_statusTextStacks = new wxListString*[m_nFields];
+
+ size_t j;
+ for(j = 0; j < (size_t)m_nFields; ++j) m_statusTextStacks[j] = 0;
+ }
+
+ if(!m_statusTextStacks[i])
+ {
+ m_statusTextStacks[i] = new wxListString();
+ }
+
+ return m_statusTextStacks[i];
+}
+