X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/7d9f12f3b9f997b6308faf336d5381be591b71f4..baaae89f09ece7ab8a17570ee535683b9d14aeda:/src/common/framecmn.cpp?ds=sidebyside diff --git a/src/common/framecmn.cpp b/src/common/framecmn.cpp index 4b12d0e9a3..8ab73139d8 100644 --- a/src/common/framecmn.cpp +++ b/src/common/framecmn.cpp @@ -76,6 +76,13 @@ wxFrameBase::wxFrameBase() #if wxUSE_STATUSBAR m_frameStatusBar = NULL; #endif // wxUSE_STATUSBAR + + m_statusBarPane = 0; +} + +wxFrameBase::~wxFrameBase() +{ + // this destructor is required for Darwin } wxFrame *wxFrameBase::New(wxWindow *parent, @@ -147,13 +154,14 @@ wxPoint wxFrameBase::GetClientAreaOrigin() const { wxPoint pt = wxTopLevelWindow::GetClientAreaOrigin(); -#if wxUSE_TOOLBAR - if ( GetToolBar() && GetToolBar()->IsShown() ) +#if wxUSE_TOOLBAR && !defined(__WXUNIVERSAL__) + wxToolBar *toolbar = GetToolBar(); + if ( toolbar && toolbar->IsShown() ) { int w, h; - GetToolBar()->GetSize(& w, & h); + toolbar->GetSize(&w, &h); - if ( GetToolBar()->GetWindowStyleFlag() & wxTB_VERTICAL ) + if ( toolbar->GetWindowStyleFlag() & wxTB_VERTICAL ) { pt.x += w; } @@ -182,12 +190,18 @@ bool wxFrameBase::ProcessCommand(int id) commandEvent.SetEventObject(this); wxMenuItem *item = bar->FindItem(id); - if ( item && item->IsCheckable() ) + if (item) { - item->Toggle(); + if (!item->IsEnabled()) + return TRUE; + + if (item->IsCheckable()) + { + item->Toggle(); - // use the new value - commandEvent.SetInt(item->IsChecked()); + // use the new value + commandEvent.SetInt(item->IsChecked()); + } } return GetEventHandler()->ProcessEvent(commandEvent); @@ -244,17 +258,6 @@ wxStatusBar *wxFrameBase::OnCreateStatusBar(int number, { wxStatusBar *statusBar = new wxStatusBar(this, id, style, name); - // Set the height according to the font and the border size - wxClientDC dc(statusBar); - dc.SetFont(statusBar->GetFont()); - - wxCoord y; - dc.GetTextExtent( "X", NULL, &y ); - - int height = (int)( (11*y)/10 + 2*statusBar->GetBorderY()); - - statusBar->SetSize( -1, -1, -1, height ); - statusBar->SetFieldsCount(number); return statusBar; @@ -276,16 +279,40 @@ void wxFrameBase::SetStatusWidths(int n, const int widths_field[] ) PositionStatusBar(); } -bool wxFrameBase::ShowMenuHelp(wxStatusBar *statbar, int menuId) +void wxFrameBase::PushStatusText(const wxString& text, int number) { -#if wxUSE_MENUS - if ( !statbar ) - return FALSE; + wxCHECK_RET( m_frameStatusBar != NULL, wxT("no statusbar to set text for") ); + + m_frameStatusBar->PushStatusText(text, number); +} + +void wxFrameBase::PopStatusText(int number) +{ + wxCHECK_RET( m_frameStatusBar != NULL, wxT("no statusbar to set text for") ); + + m_frameStatusBar->PopStatusText(number); +} + +void wxFrameBase::DoGiveHelp(const wxString& text, bool show) +{ +#if wxUSE_STATUSBAR + if ( m_statusBarPane < 0 ) return; + wxStatusBar* statbar = GetStatusBar(); + if ( !statbar ) return; + + wxString help = show ? text : wxString(); + statbar->SetStatusText( help, m_statusBarPane ); +#endif // wxUSE_STATUSBAR +} +bool wxFrameBase::ShowMenuHelp(wxStatusBar *WXUNUSED(statbar), int menuId) +{ +#if wxUSE_MENUS // if no help string found, we will clear the status bar text wxString helpString; + bool show = menuId != wxID_SEPARATOR && menuId != -2 /* wxID_TITLE */; - if ( menuId != wxID_SEPARATOR && menuId != -2 /* wxID_TITLE */ ) + if ( show ) { wxMenuBar *menuBar = GetMenuBar(); if ( menuBar ) @@ -298,9 +325,7 @@ bool wxFrameBase::ShowMenuHelp(wxStatusBar *statbar, int menuId) } } - // set status text even if the string is empty - this will at least - // remove the string from the item which was previously selected - statbar->SetStatusText(helpString); + DoGiveHelp(helpString, show); return !helpString.IsEmpty(); #else // !wxUSE_MENUS @@ -409,8 +434,8 @@ void wxFrameBase::AttachMenuBar(wxMenuBar *menubar) { if ( menubar ) { - m_frameMenuBar = menubar; menubar->Attach((wxFrame *)this); + m_frameMenuBar = menubar; } }