From 9673f535acfc892b08ff07e87ae0003c4690fe7e Mon Sep 17 00:00:00 2001 From: Stefan Csomor Date: Fri, 2 Nov 2001 20:47:11 +0000 Subject: [PATCH] corrected rebuild of more than one-level hiearchical menus when not directly added to the current menubar git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@12276 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- src/mac/carbon/menu.cpp | 84 ++++++++++++++++++++++++++++++----------- src/mac/menu.cpp | 84 ++++++++++++++++++++++++++++++----------- 2 files changed, 122 insertions(+), 46 deletions(-) diff --git a/src/mac/carbon/menu.cpp b/src/mac/carbon/menu.cpp index 72be92772d..030c20efd0 100644 --- a/src/mac/carbon/menu.cpp +++ b/src/mac/carbon/menu.cpp @@ -698,47 +698,85 @@ void wxMenuBar::MacInstallMenuBar() #else if( m_titles[i] == "?" || m_titles[i] == "&?" || m_titles[i] == wxApp::s_macHelpMenuTitleName ) { - wxMenuItem::MacBuildMenuString( label, NULL , NULL , m_titles[i] , false ); - UMASetMenuTitle( menu->GetHMenu() , label ) ; + wxMenuItem::MacBuildMenuString( label, NULL , NULL , m_titles[i] , false ); + UMASetMenuTitle( menu->GetHMenu() , label ) ; + + wxArrayPtrVoid submenus ; for (pos = 0 , node = menu->GetMenuItems().First(); node; node = node->Next(), pos++) { - item = (wxMenuItem *)node->Data(); - subMenu = item->GetSubMenu() ; - if (subMenu) - { - ::InsertMenu( subMenu->GetHMenu() , -1 ) ; - } - else - { - if ( item->GetId() == wxApp::s_macAboutMenuItemId ) - { - Str255 label ; - UInt8 modifiers ; - SInt16 key ; - wxMenuItem::MacBuildMenuString( label, &key , &modifiers , item->GetText(), item->GetId() != wxApp::s_macAboutMenuItemId); // no shortcut in about menu - ::SetMenuItemText( GetMenuHandle( kwxMacAppleMenuId ) , 1 , label ); - UMAEnableMenuItem( GetMenuHandle( kwxMacAppleMenuId ) , 1 ); - } - } - } - ::InsertMenu(m_menus[i]->GetHMenu(), 0); + item = (wxMenuItem *)node->Data(); + subMenu = item->GetSubMenu() ; + if (subMenu) + { + submenus.Add(subMenu) ; + } + else + { + if ( item->GetId() == wxApp::s_macAboutMenuItemId ) + { + Str255 label ; + UInt8 modifiers ; + SInt16 key ; + wxMenuItem::MacBuildMenuString( label, &key , &modifiers , item->GetText(), item->GetId() != wxApp::s_macAboutMenuItemId); // no shortcut in about menu + ::SetMenuItemText( GetMenuHandle( kwxMacAppleMenuId ) , 1 , label ); + UMAEnableMenuItem( GetMenuHandle( kwxMacAppleMenuId ) , 1 ); + } + } + } + ::InsertMenu(m_menus[i]->GetHMenu(), 0); + for ( int i = 0 ; i < submenus.GetCount() ; ++i ) + { + wxMenu* submenu = (wxMenu*) submenus[i] ; + wxNode *subnode; + wxMenuItem *subitem; + int subpos ; + for ( subpos = 0 , subnode = submenu->GetMenuItems().First(); subnode; subnode = subnode->Next(), subpos++) + { + subitem = (wxMenuItem *)subnode->Data(); + wxMenu* itsSubMenu = subitem->GetSubMenu() ; + if (itsSubMenu) + { + submenus.Add(itsSubMenu) ; + } + } + ::InsertMenu( submenu->GetHMenu() , -1 ) ; + } } #endif else { wxMenuItem::MacBuildMenuString( label, NULL , NULL , m_titles[i] , false ); UMASetMenuTitle( menu->GetHMenu() , label ) ; + wxArrayPtrVoid submenus ; + for (pos = 0, node = menu->GetMenuItems().First(); node; node = node->Next(), pos++) { item = (wxMenuItem *)node->Data(); subMenu = item->GetSubMenu() ; if (subMenu) { - ::InsertMenu( subMenu->GetHMenu() , -1 ) ; + submenus.Add(subMenu) ; } } ::InsertMenu(m_menus[i]->GetHMenu(), 0); + for ( int i = 0 ; i < submenus.GetCount() ; ++i ) + { + wxMenu* submenu = (wxMenu*) submenus[i] ; + wxNode *subnode; + wxMenuItem *subitem; + int subpos ; + for ( subpos = 0 , subnode = submenu->GetMenuItems().First(); subnode; subnode = subnode->Next(), subpos++) + { + subitem = (wxMenuItem *)subnode->Data(); + wxMenu* itsSubMenu = subitem->GetSubMenu() ; + if (itsSubMenu) + { + submenus.Add(itsSubMenu) ; + } + } + ::InsertMenu( submenu->GetHMenu() , -1 ) ; + } } } ::DrawMenuBar() ; diff --git a/src/mac/menu.cpp b/src/mac/menu.cpp index 72be92772d..030c20efd0 100644 --- a/src/mac/menu.cpp +++ b/src/mac/menu.cpp @@ -698,47 +698,85 @@ void wxMenuBar::MacInstallMenuBar() #else if( m_titles[i] == "?" || m_titles[i] == "&?" || m_titles[i] == wxApp::s_macHelpMenuTitleName ) { - wxMenuItem::MacBuildMenuString( label, NULL , NULL , m_titles[i] , false ); - UMASetMenuTitle( menu->GetHMenu() , label ) ; + wxMenuItem::MacBuildMenuString( label, NULL , NULL , m_titles[i] , false ); + UMASetMenuTitle( menu->GetHMenu() , label ) ; + + wxArrayPtrVoid submenus ; for (pos = 0 , node = menu->GetMenuItems().First(); node; node = node->Next(), pos++) { - item = (wxMenuItem *)node->Data(); - subMenu = item->GetSubMenu() ; - if (subMenu) - { - ::InsertMenu( subMenu->GetHMenu() , -1 ) ; - } - else - { - if ( item->GetId() == wxApp::s_macAboutMenuItemId ) - { - Str255 label ; - UInt8 modifiers ; - SInt16 key ; - wxMenuItem::MacBuildMenuString( label, &key , &modifiers , item->GetText(), item->GetId() != wxApp::s_macAboutMenuItemId); // no shortcut in about menu - ::SetMenuItemText( GetMenuHandle( kwxMacAppleMenuId ) , 1 , label ); - UMAEnableMenuItem( GetMenuHandle( kwxMacAppleMenuId ) , 1 ); - } - } - } - ::InsertMenu(m_menus[i]->GetHMenu(), 0); + item = (wxMenuItem *)node->Data(); + subMenu = item->GetSubMenu() ; + if (subMenu) + { + submenus.Add(subMenu) ; + } + else + { + if ( item->GetId() == wxApp::s_macAboutMenuItemId ) + { + Str255 label ; + UInt8 modifiers ; + SInt16 key ; + wxMenuItem::MacBuildMenuString( label, &key , &modifiers , item->GetText(), item->GetId() != wxApp::s_macAboutMenuItemId); // no shortcut in about menu + ::SetMenuItemText( GetMenuHandle( kwxMacAppleMenuId ) , 1 , label ); + UMAEnableMenuItem( GetMenuHandle( kwxMacAppleMenuId ) , 1 ); + } + } + } + ::InsertMenu(m_menus[i]->GetHMenu(), 0); + for ( int i = 0 ; i < submenus.GetCount() ; ++i ) + { + wxMenu* submenu = (wxMenu*) submenus[i] ; + wxNode *subnode; + wxMenuItem *subitem; + int subpos ; + for ( subpos = 0 , subnode = submenu->GetMenuItems().First(); subnode; subnode = subnode->Next(), subpos++) + { + subitem = (wxMenuItem *)subnode->Data(); + wxMenu* itsSubMenu = subitem->GetSubMenu() ; + if (itsSubMenu) + { + submenus.Add(itsSubMenu) ; + } + } + ::InsertMenu( submenu->GetHMenu() , -1 ) ; + } } #endif else { wxMenuItem::MacBuildMenuString( label, NULL , NULL , m_titles[i] , false ); UMASetMenuTitle( menu->GetHMenu() , label ) ; + wxArrayPtrVoid submenus ; + for (pos = 0, node = menu->GetMenuItems().First(); node; node = node->Next(), pos++) { item = (wxMenuItem *)node->Data(); subMenu = item->GetSubMenu() ; if (subMenu) { - ::InsertMenu( subMenu->GetHMenu() , -1 ) ; + submenus.Add(subMenu) ; } } ::InsertMenu(m_menus[i]->GetHMenu(), 0); + for ( int i = 0 ; i < submenus.GetCount() ; ++i ) + { + wxMenu* submenu = (wxMenu*) submenus[i] ; + wxNode *subnode; + wxMenuItem *subitem; + int subpos ; + for ( subpos = 0 , subnode = submenu->GetMenuItems().First(); subnode; subnode = subnode->Next(), subpos++) + { + subitem = (wxMenuItem *)subnode->Data(); + wxMenu* itsSubMenu = subitem->GetSubMenu() ; + if (itsSubMenu) + { + submenus.Add(itsSubMenu) ; + } + } + ::InsertMenu( submenu->GetHMenu() , -1 ) ; + } } } ::DrawMenuBar() ; -- 2.45.2