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