restore status bar text after a menu has been shown
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@24120 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -81,11 +81,6 @@ public:
|
|||||||
virtual wxMenuBar *GetMenuBar() const { return m_frameMenuBar; }
|
virtual wxMenuBar *GetMenuBar() const { return m_frameMenuBar; }
|
||||||
#endif // wxUSE_MENUS
|
#endif // wxUSE_MENUS
|
||||||
|
|
||||||
#ifdef WXWIN_COMPATIBILITY_2_2
|
|
||||||
// call this to simulate a menu command
|
|
||||||
bool Command(int winid) { return ProcessCommand(winid); }
|
|
||||||
#endif // WXWIN_COMPATIBILITY_2_2
|
|
||||||
|
|
||||||
// process menu command: returns TRUE if processed
|
// process menu command: returns TRUE if processed
|
||||||
bool ProcessCommand(int winid);
|
bool ProcessCommand(int winid);
|
||||||
|
|
||||||
@@ -142,10 +137,13 @@ public:
|
|||||||
// -------------------------------
|
// -------------------------------
|
||||||
|
|
||||||
// event handlers
|
// event handlers
|
||||||
void OnMenuOpen(wxMenuEvent& event);
|
|
||||||
void OnMenuHighlight(wxMenuEvent& event);
|
|
||||||
|
|
||||||
#if wxUSE_MENUS
|
#if wxUSE_MENUS
|
||||||
|
#if wxUSE_STATUSBAR
|
||||||
|
void OnMenuOpen(wxMenuEvent& event);
|
||||||
|
void OnMenuClose(wxMenuEvent& event);
|
||||||
|
void OnMenuHighlight(wxMenuEvent& event);
|
||||||
|
#endif // wxUSE_STATUSBAR
|
||||||
|
|
||||||
// send wxUpdateUIEvents for all menu items in the menubar,
|
// send wxUpdateUIEvents for all menu items in the menubar,
|
||||||
// or just for menu if non-NULL
|
// or just for menu if non-NULL
|
||||||
void DoMenuUpdates(wxMenu* menu = NULL);
|
void DoMenuUpdates(wxMenu* menu = NULL);
|
||||||
@@ -172,6 +170,11 @@ public:
|
|||||||
// if you are hiding the help, TRUE otherwise
|
// if you are hiding the help, TRUE otherwise
|
||||||
virtual void DoGiveHelp(const wxString& text, bool show);
|
virtual void DoGiveHelp(const wxString& text, bool show);
|
||||||
|
|
||||||
|
#ifdef WXWIN_COMPATIBILITY_2_2
|
||||||
|
// call this to simulate a menu command
|
||||||
|
bool Command(int winid) { return ProcessCommand(winid); }
|
||||||
|
#endif // WXWIN_COMPATIBILITY_2_2
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
// the frame main menu/status/tool bars
|
// the frame main menu/status/tool bars
|
||||||
// ------------------------------------
|
// ------------------------------------
|
||||||
@@ -196,6 +199,11 @@ protected:
|
|||||||
virtual void AttachMenuBar(wxMenuBar *menubar);
|
virtual void AttachMenuBar(wxMenuBar *menubar);
|
||||||
|
|
||||||
wxMenuBar *m_frameMenuBar;
|
wxMenuBar *m_frameMenuBar;
|
||||||
|
|
||||||
|
#if wxUSE_STATUSBAR
|
||||||
|
// the saved status bar text overwritten by DoGiveHelp()
|
||||||
|
wxString m_oldStatusText;
|
||||||
|
#endif // wxUSE_STATUSBAR
|
||||||
#endif // wxUSE_MENUS
|
#endif // wxUSE_MENUS
|
||||||
|
|
||||||
#if wxUSE_STATUSBAR
|
#if wxUSE_STATUSBAR
|
||||||
@@ -221,7 +229,10 @@ protected:
|
|||||||
wxToolBar *m_frameToolBar;
|
wxToolBar *m_frameToolBar;
|
||||||
#endif // wxUSE_TOOLBAR
|
#endif // wxUSE_TOOLBAR
|
||||||
|
|
||||||
|
#if wxUSE_MENUS && wxUSE_STATUSBAR
|
||||||
DECLARE_EVENT_TABLE()
|
DECLARE_EVENT_TABLE()
|
||||||
|
#endif // wxUSE_MENUS && wxUSE_STATUSBAR
|
||||||
|
|
||||||
DECLARE_NO_COPY_CLASS(wxFrameBase)
|
DECLARE_NO_COPY_CLASS(wxFrameBase)
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@@ -45,13 +45,17 @@
|
|||||||
// event table
|
// event table
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
#if wxUSE_MENUS && wxUSE_STATUSBAR
|
||||||
|
|
||||||
BEGIN_EVENT_TABLE(wxFrameBase, wxTopLevelWindow)
|
BEGIN_EVENT_TABLE(wxFrameBase, wxTopLevelWindow)
|
||||||
#if wxUSE_MENUS && !wxUSE_IDLEMENUUPDATES
|
|
||||||
EVT_MENU_OPEN(wxFrameBase::OnMenuOpen)
|
EVT_MENU_OPEN(wxFrameBase::OnMenuOpen)
|
||||||
#endif
|
EVT_MENU_CLOSE(wxFrameBase::OnMenuClose)
|
||||||
|
|
||||||
EVT_MENU_HIGHLIGHT_ALL(wxFrameBase::OnMenuHighlight)
|
EVT_MENU_HIGHLIGHT_ALL(wxFrameBase::OnMenuHighlight)
|
||||||
END_EVENT_TABLE()
|
END_EVENT_TABLE()
|
||||||
|
|
||||||
|
#endif // wxUSE_MENUS && wxUSE_STATUSBAR
|
||||||
|
|
||||||
// ============================================================================
|
// ============================================================================
|
||||||
// implementation
|
// implementation
|
||||||
// ============================================================================
|
// ============================================================================
|
||||||
@@ -233,13 +237,15 @@ void wxFrameBase::UpdateWindowUI(long flags)
|
|||||||
else
|
else
|
||||||
DoMenuUpdates();
|
DoMenuUpdates();
|
||||||
}
|
}
|
||||||
#endif
|
#endif // wxUSE_MENUS
|
||||||
}
|
}
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
// event handlers
|
// event handlers for status bar updates from menus
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
#if wxUSE_MENUS && wxUSE_STATUSBAR
|
||||||
|
|
||||||
void wxFrameBase::OnMenuHighlight(wxMenuEvent& event)
|
void wxFrameBase::OnMenuHighlight(wxMenuEvent& event)
|
||||||
{
|
{
|
||||||
#if wxUSE_STATUSBAR
|
#if wxUSE_STATUSBAR
|
||||||
@@ -247,6 +253,31 @@ void wxFrameBase::OnMenuHighlight(wxMenuEvent& event)
|
|||||||
#endif // wxUSE_STATUSBAR
|
#endif // wxUSE_STATUSBAR
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void wxFrameBase::OnMenuOpen(wxMenuEvent& event)
|
||||||
|
{
|
||||||
|
#if !wxUSE_IDLEMENUUPDATES
|
||||||
|
DoMenuUpdates(event.GetMenu());
|
||||||
|
#endif // !wxUSE_IDLEMENUUPDATES
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxFrameBase::OnMenuClose(wxMenuEvent& WXUNUSED(event))
|
||||||
|
{
|
||||||
|
// do we have real status text to restore?
|
||||||
|
if ( m_oldStatusText.length() > 1 || m_oldStatusText[0u] )
|
||||||
|
{
|
||||||
|
if ( m_statusBarPane >= 0 )
|
||||||
|
{
|
||||||
|
wxStatusBar *statbar = GetStatusBar();
|
||||||
|
if ( statbar )
|
||||||
|
statbar->SetStatusText(m_oldStatusText, m_statusBarPane);
|
||||||
|
}
|
||||||
|
|
||||||
|
m_oldStatusText.clear();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif // wxUSE_MENUS && wxUSE_STATUSBAR
|
||||||
|
|
||||||
// Implement internal behaviour (menu updating on some platforms)
|
// Implement internal behaviour (menu updating on some platforms)
|
||||||
void wxFrameBase::OnInternalIdle()
|
void wxFrameBase::OnInternalIdle()
|
||||||
{
|
{
|
||||||
@@ -258,13 +289,6 @@ void wxFrameBase::OnInternalIdle()
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxFrameBase::OnMenuOpen(wxMenuEvent& event)
|
|
||||||
{
|
|
||||||
#if wxUSE_MENUS && !wxUSE_IDLEMENUUPDATES
|
|
||||||
DoMenuUpdates(event.GetMenu());
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
// status bar stuff
|
// status bar stuff
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
@@ -363,12 +387,41 @@ bool wxFrameBase::ShowMenuHelp(wxStatusBar *WXUNUSED(statbar), int menuId)
|
|||||||
void wxFrameBase::DoGiveHelp(const wxString& text, bool show)
|
void wxFrameBase::DoGiveHelp(const wxString& text, bool show)
|
||||||
{
|
{
|
||||||
#if wxUSE_STATUSBAR
|
#if wxUSE_STATUSBAR
|
||||||
if ( m_statusBarPane < 0 ) return;
|
if ( m_statusBarPane < 0 )
|
||||||
wxStatusBar* statbar = GetStatusBar();
|
{
|
||||||
if ( !statbar ) return;
|
// status bar messages disabled
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
wxString help = show ? text : wxString();
|
wxStatusBar *statbar = GetStatusBar();
|
||||||
statbar->SetStatusText( help, m_statusBarPane );
|
if ( !statbar )
|
||||||
|
return;
|
||||||
|
|
||||||
|
wxString help;
|
||||||
|
if ( show )
|
||||||
|
help = text;
|
||||||
|
|
||||||
|
// 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() )
|
||||||
|
{
|
||||||
|
m_oldStatusText = statbar->GetStatusText(m_statusBarPane);
|
||||||
|
if ( m_oldStatusText.empty() )
|
||||||
|
{
|
||||||
|
// use special value to prevent us from doing this the next time
|
||||||
|
m_oldStatusText += _T('\0');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
statbar->SetStatusText(help, m_statusBarPane);
|
||||||
#endif // wxUSE_STATUSBAR
|
#endif // wxUSE_STATUSBAR
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user