From 9827ce920855ba062aee8f2954368e08db477f18 Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Thu, 15 Mar 2012 13:49:54 +0000 Subject: [PATCH] Enable/disable "Window" menu items in AUI MDI correctly. Add EVT_UPDATE_UI handlers for "Close", "Close All" as well as "Next" and "Previous" menu commands. Closes #14102. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@70909 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- docs/changes.txt | 1 + include/wx/aui/tabmdi.h | 1 + src/aui/tabmdi.cpp | 30 ++++++++++++++++++++++++++++++ 3 files changed, 32 insertions(+) diff --git a/docs/changes.txt b/docs/changes.txt index ef71794515..819d20a225 100644 --- a/docs/changes.txt +++ b/docs/changes.txt @@ -493,6 +493,7 @@ All (GUI): - Implement wxDV_ROW_LINES in generic wxDataViewCtrl (RedCAT). - Added EVT_AUI_PANE_ACTIVATED event (Ronny Krüger). - Added wxSplitterWindow::SetSashInvisible() (Armel Asselin). +- Enable/disable "Window" menu items in AUI MDI correctly (wsu). GTK: diff --git a/include/wx/aui/tabmdi.h b/include/wx/aui/tabmdi.h index 45e30473c7..f24a2d22ce 100644 --- a/include/wx/aui/tabmdi.h +++ b/include/wx/aui/tabmdi.h @@ -101,6 +101,7 @@ protected: void AddWindowMenu(wxMenuBar *pMenuBar); void DoHandleMenu(wxCommandEvent &event); + void DoHandleUpdateUI(wxUpdateUIEvent &event); #endif // wxUSE_MENUS virtual bool ProcessEvent(wxEvent& event); diff --git a/src/aui/tabmdi.cpp b/src/aui/tabmdi.cpp index 2059d90941..881104291d 100644 --- a/src/aui/tabmdi.cpp +++ b/src/aui/tabmdi.cpp @@ -56,6 +56,7 @@ IMPLEMENT_DYNAMIC_CLASS(wxAuiMDIParentFrame, wxFrame) BEGIN_EVENT_TABLE(wxAuiMDIParentFrame, wxFrame) #if wxUSE_MENUS EVT_MENU (wxID_ANY, wxAuiMDIParentFrame::DoHandleMenu) + EVT_UPDATE_UI (wxID_ANY, wxAuiMDIParentFrame::DoHandleUpdateUI) #endif END_EVENT_TABLE() @@ -347,6 +348,35 @@ void wxAuiMDIParentFrame::DoHandleMenu(wxCommandEvent& event) event.Skip(); } } + +void wxAuiMDIParentFrame::DoHandleUpdateUI(wxUpdateUIEvent& event) +{ + switch (event.GetId()) + { + case wxWINDOWCLOSE: + case wxWINDOWCLOSEALL: + { + wxAuiMDIClientWindow* client_window = GetClientWindow(); + wxCHECK_RET(client_window, wxS("Missing MDI Client Window")); + size_t pages = client_window->GetPageCount(); + event.Enable(pages >= 1); + break; + } + + case wxWINDOWNEXT: + case wxWINDOWPREV: + { + wxAuiMDIClientWindow* client_window = GetClientWindow(); + wxCHECK_RET(client_window, wxS("Missing MDI Client Window")); + size_t pages = client_window->GetPageCount(); + event.Enable(pages >= 2); + break; + } + + default: + event.Skip(); + } +} #endif // wxUSE_MENUS void wxAuiMDIParentFrame::DoGetClientSize(int* width, int* height) const -- 2.47.2