removed second parameter of wxFrame::DoGiveHelp(), the help string is always shown (even if it's empty), not hidden; this hopefully really fixes restoring the previously shown status bar text when the menu is dismissed

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@45229 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2007-04-02 22:00:52 +00:00
parent ddeca22ce8
commit fa36fe3680
4 changed files with 32 additions and 42 deletions

View File

@@ -169,9 +169,9 @@ public:
#endif // no wxTopLevelWindowNative #endif // no wxTopLevelWindowNative
#if wxUSE_MENUS || wxUSE_TOOLBAR #if wxUSE_MENUS || wxUSE_TOOLBAR
// show help text (typically in the statusbar); show is false // show help text for the currently selected menu or toolbar item
// if you are hiding the help, true otherwise // (typically in the status bar)
virtual void DoGiveHelp(const wxString& text, bool show); virtual void DoGiveHelp(const wxString& text);
#endif #endif
protected: protected:

View File

@@ -365,9 +365,7 @@ bool wxFrameBase::ShowMenuHelp(wxStatusBar *WXUNUSED(statbar), int menuId)
#if wxUSE_MENUS #if wxUSE_MENUS
// if no help string found, we will clear the status bar text // if no help string found, we will clear the status bar text
wxString helpString; wxString helpString;
bool show = menuId != wxID_SEPARATOR && menuId != -2 /* wxID_TITLE */; if ( menuId != wxID_SEPARATOR && menuId != -3 /* wxID_TITLE */ )
if ( show )
{ {
wxMenuBar *menuBar = GetMenuBar(); wxMenuBar *menuBar = GetMenuBar();
if ( menuBar ) if ( menuBar )
@@ -380,7 +378,7 @@ bool wxFrameBase::ShowMenuHelp(wxStatusBar *WXUNUSED(statbar), int menuId)
} }
} }
DoGiveHelp(helpString, show); DoGiveHelp(helpString);
return !helpString.empty(); return !helpString.empty();
#else // !wxUSE_MENUS #else // !wxUSE_MENUS
@@ -404,7 +402,7 @@ void wxFrameBase::SetStatusBar(wxStatusBar *statBar)
#endif // wxUSE_STATUSBAR #endif // wxUSE_STATUSBAR
#if wxUSE_MENUS || wxUSE_TOOLBAR #if wxUSE_MENUS || wxUSE_TOOLBAR
void wxFrameBase::DoGiveHelp(const wxString& text, bool show) void wxFrameBase::DoGiveHelp(const wxString& help)
{ {
#if wxUSE_STATUSBAR #if wxUSE_STATUSBAR
if ( m_statusBarPane < 0 ) if ( m_statusBarPane < 0 )
@@ -417,40 +415,26 @@ void wxFrameBase::DoGiveHelp(const wxString& text, bool show)
if ( !statbar ) if ( !statbar )
return; return;
wxString help; // remember the old status bar text if this is the first time we're
if ( show ) // called since the menu has been opened as we're going to overwrite it
// in our DoGiveHelp() and we want to restore it when the menu is
// closed
//
// note that it would be logical to do this in OnMenuOpen() but under
// MSW we get an EVT_MENU_HIGHLIGHT before EVT_MENU_OPEN, strangely
// enough, and so this doesn't work and instead we use the ugly trick
// with using special m_oldStatusText value as "menu opened" (but it is
// arguably better than adding yet another member variable to wxFrame
// on all platforms)
if ( m_oldStatusText.empty() )
{ {
help = text; m_oldStatusText = statbar->GetStatusText(m_statusBarPane);
// remember the old status bar text if this is the first time we're
// called since the menu has been opened as we're going to overwrite it
// in our DoGiveHelp() and we want to restore it when the menu is
// closed
//
// note that it would be logical to do this in OnMenuOpen() but under
// MSW we get an EVT_MENU_HIGHLIGHT before EVT_MENU_OPEN, strangely
// enough, and so this doesn't work and instead we use the ugly trick
// with using special m_oldStatusText value as "menu opened" (but it is
// arguably better than adding yet another member variable to wxFrame
// on all platforms)
if ( m_oldStatusText.empty() ) if ( m_oldStatusText.empty() )
{ {
m_oldStatusText = statbar->GetStatusText(m_statusBarPane); // use special value to prevent us from doing this the next time
if ( m_oldStatusText.empty() ) m_oldStatusText += _T('\0');
{
// use special value to prevent us from doing this the next time
m_oldStatusText += _T('\0');
}
} }
} }
else // hide the status bar text
{
// i.e. restore the old one
help = m_oldStatusText;
// make sure we get the up to date text when showing it the next time
m_oldStatusText.clear();
}
statbar->SetStatusText(help, m_statusBarPane); statbar->SetStatusText(help, m_statusBarPane);
#else #else

View File

@@ -631,10 +631,16 @@ void wxToolBarBase::OnMouseEnter(int id)
if( frame ) if( frame )
{ {
wxString help; wxString help;
wxToolBarToolBase* tool = id == wxID_ANY ? (wxToolBarToolBase*)NULL : FindById(id); if ( id != wxID_ANY )
if(tool) {
help = tool->GetLongHelp(); const wxToolBarToolBase * const tool = FindById(id);
frame->DoGiveHelp( help, id != wxID_ANY ); if ( tool )
help = tool->GetLongHelp();
}
// do it even if help string is empty to avoid showing the help for the
// previously selected tool when another one is selected
frame->DoGiveHelp(help);
} }
(void)GetEventHandler()->ProcessEvent(event); (void)GetEventHandler()->ProcessEvent(event);

View File

@@ -1055,7 +1055,7 @@ bool wxFrame::HandleMenuSelect( WXWORD nItem,
} }
else else
{ {
DoGiveHelp(wxEmptyString, false); DoGiveHelp(wxEmptyString);
return false; return false;
} }
} }