Implemented wxStatusBar::Push/PopStatusText.

Implemented wxFrame::Push/PopSTatusText ( just forward to the status bar ).
Implemented wxFrame::DoGiveHelp, to show menu/toolbar help in the status bar.
Added Get/SetStatusBarPane to get/set the status bar pane the menu/toolbar help
  will be show in


git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@15339 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Mattia Barbon
2002-05-02 20:07:10 +00:00
parent fe87983b95
commit 1f361cddbf
7 changed files with 182 additions and 57 deletions

View File

@@ -34,6 +34,9 @@
#if wxUSE_STATUSBAR
#include "wx/listimpl.cpp"
WX_DEFINE_LIST(wxListString);
// ============================================================================
// wxStatusBarBase implementation
// ============================================================================
@@ -49,11 +52,13 @@ wxStatusBarBase::wxStatusBarBase()
m_nFields = 0;
InitWidths();
InitStacks();
}
wxStatusBarBase::~wxStatusBarBase()
{
FreeWidths();
FreeStacks();
}
// ----------------------------------------------------------------------------
@@ -82,6 +87,31 @@ void wxStatusBarBase::SetFieldsCount(int number, const int *widths)
if ( number != m_nFields )
{
// copy stacks if present
if(m_statusTextStacks)
{
wxListString **newStacks = new wxListString*[number];
size_t i, j, max = wxMin(number, m_nFields);
// copy old stacks
for(i = 0; i < max; ++i)
newStacks[i] = m_statusTextStacks[i];
// free old stacks in excess
for(j = i; j < (size_t)m_nFields; ++j)
{
if(m_statusTextStacks[j])
{
m_statusTextStacks[j]->Clear();
delete m_statusTextStacks[j];
}
}
// initialize new stacks to NULL
for(j = i; j < (size_t)number; ++j)
newStacks[j] = 0;
m_statusTextStacks = newStacks;
}
m_nFields = number;
ReinitWidths();
@@ -186,5 +216,83 @@ wxArrayInt wxStatusBarBase::CalculateAbsWidths(wxCoord widthTotal) const
return widths;
}
// ----------------------------------------------------------------------------
// 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];
}
#endif // wxUSE_STATUSBAR