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
This commit is contained in:
Stefan Csomor
2001-11-02 20:47:11 +00:00
parent a705ee4785
commit 9673f535ac
2 changed files with 122 additions and 46 deletions

View File

@@ -701,13 +701,15 @@ void wxMenuBar::MacInstallMenuBar()
wxMenuItem::MacBuildMenuString( label, NULL , NULL , m_titles[i] , false ); wxMenuItem::MacBuildMenuString( label, NULL , NULL , m_titles[i] , false );
UMASetMenuTitle( menu->GetHMenu() , label ) ; UMASetMenuTitle( menu->GetHMenu() , label ) ;
wxArrayPtrVoid submenus ;
for (pos = 0 , node = menu->GetMenuItems().First(); node; node = node->Next(), pos++) for (pos = 0 , node = menu->GetMenuItems().First(); node; node = node->Next(), pos++)
{ {
item = (wxMenuItem *)node->Data(); item = (wxMenuItem *)node->Data();
subMenu = item->GetSubMenu() ; subMenu = item->GetSubMenu() ;
if (subMenu) if (subMenu)
{ {
::InsertMenu( subMenu->GetHMenu() , -1 ) ; submenus.Add(subMenu) ;
} }
else else
{ {
@@ -723,22 +725,58 @@ void wxMenuBar::MacInstallMenuBar()
} }
} }
::InsertMenu(m_menus[i]->GetHMenu(), 0); ::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 #endif
else else
{ {
wxMenuItem::MacBuildMenuString( label, NULL , NULL , m_titles[i] , false ); wxMenuItem::MacBuildMenuString( label, NULL , NULL , m_titles[i] , false );
UMASetMenuTitle( menu->GetHMenu() , label ) ; UMASetMenuTitle( menu->GetHMenu() , label ) ;
wxArrayPtrVoid submenus ;
for (pos = 0, node = menu->GetMenuItems().First(); node; node = node->Next(), pos++) for (pos = 0, node = menu->GetMenuItems().First(); node; node = node->Next(), pos++)
{ {
item = (wxMenuItem *)node->Data(); item = (wxMenuItem *)node->Data();
subMenu = item->GetSubMenu() ; subMenu = item->GetSubMenu() ;
if (subMenu) if (subMenu)
{ {
::InsertMenu( subMenu->GetHMenu() , -1 ) ; submenus.Add(subMenu) ;
} }
} }
::InsertMenu(m_menus[i]->GetHMenu(), 0); ::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() ; ::DrawMenuBar() ;

View File

@@ -701,13 +701,15 @@ void wxMenuBar::MacInstallMenuBar()
wxMenuItem::MacBuildMenuString( label, NULL , NULL , m_titles[i] , false ); wxMenuItem::MacBuildMenuString( label, NULL , NULL , m_titles[i] , false );
UMASetMenuTitle( menu->GetHMenu() , label ) ; UMASetMenuTitle( menu->GetHMenu() , label ) ;
wxArrayPtrVoid submenus ;
for (pos = 0 , node = menu->GetMenuItems().First(); node; node = node->Next(), pos++) for (pos = 0 , node = menu->GetMenuItems().First(); node; node = node->Next(), pos++)
{ {
item = (wxMenuItem *)node->Data(); item = (wxMenuItem *)node->Data();
subMenu = item->GetSubMenu() ; subMenu = item->GetSubMenu() ;
if (subMenu) if (subMenu)
{ {
::InsertMenu( subMenu->GetHMenu() , -1 ) ; submenus.Add(subMenu) ;
} }
else else
{ {
@@ -723,22 +725,58 @@ void wxMenuBar::MacInstallMenuBar()
} }
} }
::InsertMenu(m_menus[i]->GetHMenu(), 0); ::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 #endif
else else
{ {
wxMenuItem::MacBuildMenuString( label, NULL , NULL , m_titles[i] , false ); wxMenuItem::MacBuildMenuString( label, NULL , NULL , m_titles[i] , false );
UMASetMenuTitle( menu->GetHMenu() , label ) ; UMASetMenuTitle( menu->GetHMenu() , label ) ;
wxArrayPtrVoid submenus ;
for (pos = 0, node = menu->GetMenuItems().First(); node; node = node->Next(), pos++) for (pos = 0, node = menu->GetMenuItems().First(); node; node = node->Next(), pos++)
{ {
item = (wxMenuItem *)node->Data(); item = (wxMenuItem *)node->Data();
subMenu = item->GetSubMenu() ; subMenu = item->GetSubMenu() ;
if (subMenu) if (subMenu)
{ {
::InsertMenu( subMenu->GetHMenu() , -1 ) ; submenus.Add(subMenu) ;
} }
} }
::InsertMenu(m_menus[i]->GetHMenu(), 0); ::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() ; ::DrawMenuBar() ;