From 6125428d54d8ac8a62f046e0003b62fa256b5f79 Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Mon, 26 Jan 2009 22:55:25 +0000 Subject: [PATCH] disable the "Next" and "Previous" commands in the window menu if we have a single child only; update the copyright git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@58440 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- src/msw/mdi.cpp | 53 +++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 43 insertions(+), 10 deletions(-) diff --git a/src/msw/mdi.cpp b/src/msw/mdi.cpp index 32eb0a46b8..3ecb51ef77 100644 --- a/src/msw/mdi.cpp +++ b/src/msw/mdi.cpp @@ -2,10 +2,11 @@ // Name: src/msw/mdi.cpp // Purpose: MDI classes for wxMSW // Author: Julian Smart -// Modified by: +// Modified by: Vadim Zeitlin on 2008-11-04 to use the base classes // Created: 04/01/98 // RCS-ID: $Id$ -// Copyright: (c) Julian Smart +// Copyright: (c) 1998 Julian Smart +// (c) 2008-2009 Vadim Zeitlin // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -249,21 +250,44 @@ int wxMDIParentFrame::GetChildFramesCount() const void wxMDIParentFrame::AddMDIChild(wxMDIChildFrame * WXUNUSED(child)) { - if ( GetChildFramesCount() == 1 ) + switch ( GetChildFramesCount() ) { - // first MDI child added, we need to insert the window menu now if we - // have it - AddWindowMenu(); + case 1: + // first MDI child was just added, we need to insert the window + // menu now if we have it + AddWindowMenu(); + + // and disable the items which can't be used until we have more + // than one child + UpdateWindowMenu(false); + break; + + case 2: + // second MDI child was added, enable the menu items which were + // disabled because they didn't make sense for a single window + UpdateWindowMenu(true); + break; } } void wxMDIParentFrame::RemoveMDIChild(wxMDIChildFrame * WXUNUSED(child)) { - if ( GetChildFramesCount() == 1 ) + switch ( GetChildFramesCount() ) { - // last MDI child is being removed, remove the now unnecessary window - // menu too - RemoveWindowMenu(); + case 1: + // last MDI child is being removed, remove the now unnecessary + // window menu too + RemoveWindowMenu(); + + // there is no need to call UpdateWindowMenu(true) here so this is + // not quite symmetric to AddMDIChild() above + break; + + case 2: + // only one MDI child is going to remain, disable the menu commands + // which don't make sense for a single child window + UpdateWindowMenu(false); + break; } } @@ -283,6 +307,15 @@ void wxMDIParentFrame::RemoveWindowMenu() MDIRemoveWindowMenu(GetClientWindow(), m_hMenu); } +void wxMDIParentFrame::UpdateWindowMenu(bool enable) +{ + if ( m_windowMenu ) + { + m_windowMenu->Enable(IDM_WINDOWNEXT, enable); + m_windowMenu->Enable(IDM_WINDOWPREV, enable); + } +} + #if wxUSE_MENUS_NATIVE void wxMDIParentFrame::InternalSetMenuBar() -- 2.45.2