+
+void wxMenuBar::MacInstallMenuBar()
+{
+ if ( s_macInstalledMenuBar == this )
+ return ;
+
+ Handle menubar = ::GetNewMBar( kwxMacMenuBarResource ) ;
+ wxString message ;
+ wxCHECK_RET( menubar != NULL, "can't read MBAR resource" );
+ ::SetMenuBar( menubar ) ;
+ ::DisposeHandle( menubar ) ;
+
+ MenuHandle menu = ::GetMenuHandle( kwxMacAppleMenuId ) ;
+ ::AppendResMenu(menu, 'DRVR');
+
+ for (int i = 0; i < m_menus.GetCount(); i++)
+ {
+ Str255 label;
+ wxNode *node;
+ wxMenuItem *item;
+ int pos ;
+ wxMenu* menu = m_menus[i] , *subMenu = NULL ;
+
+#if !TARGET_CARBON
+ /* the help menu does not exist in CARBON anymore */
+ if( m_titles[i] == "?" || m_titles[i] == "&?" || m_titles[i] == wxApp::s_macHelpMenuTitleName )
+ {
+ MenuHandle mh = NULL ;
+ if ( HMGetHelpMenuHandle( &mh ) != noErr )
+ {
+ continue ;
+ }
+ if ( formerHelpMenuItems == 0 )
+ {
+ if( mh )
+ formerHelpMenuItems = CountMenuItems( mh ) ;
+ }
+
+ for (pos = 0 , node = menu->GetMenuItems().First(); node; node = node->Next(), pos++)
+ {
+ item = (wxMenuItem *)node->Data();
+ subMenu = item->GetSubMenu() ;
+ if (subMenu)
+ {
+ // we don't support hierarchical menus in the help menu yet
+ }
+ else
+ {
+ if ( item->IsSeparator() )
+ {
+ if ( mh )
+ UMAAppendMenuItem(mh, "\p-" );
+ }
+ else
+ {
+ Str255 label ;
+ UInt8 modifiers ;
+ SInt16 key ;
+ wxMenuItem::MacBuildMenuString( label, &key , &modifiers , item->GetText(), item->GetId() != wxApp::s_macAboutMenuItemId); // no shortcut in about menu
+ if ( label[0] == 0 )
+ {
+ // we cannot add empty menus on mac
+ label[0] = 1 ;
+ label[1] = ' ' ;
+ }
+ if ( item->GetId() == wxApp::s_macAboutMenuItemId )
+ {
+ UMASetMenuItemText( GetMenuHandle( kwxMacAppleMenuId ) , 1 , label );
+ UMAEnableMenuItem( GetMenuHandle( kwxMacAppleMenuId ) , 1 );
+ }
+ else
+ {
+ if ( mh )
+ UMAAppendMenuItem(mh, label , key , modifiers );
+ }
+ }
+ }
+ }
+ }
+#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 ) ;
+
+ for (pos = 0 , node = menu->GetMenuItems().First(); node; node = node->Next(), pos++)
+ {
+ item = (wxMenuItem *)node->Data();
+ subMenu = item->GetSubMenu() ;
+ if (subMenu)
+ {
+ UMAInsertMenu( 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
+ UMASetMenuItemText( GetMenuHandle( kwxMacAppleMenuId ) , 1 , label );
+ UMAEnableMenuItem( GetMenuHandle( kwxMacAppleMenuId ) , 1 );
+ }
+ }
+ }
+ UMAInsertMenu(m_menus[i]->GetHMenu(), 0);
+ }
+#endif
+ else
+ {
+ wxMenuItem::MacBuildMenuString( label, NULL , NULL , m_titles[i] , false );
+ UMASetMenuTitle( menu->GetHMenu() , label ) ;
+ for (pos = 0, node = menu->GetMenuItems().First(); node; node = node->Next(), pos++)
+ {
+ item = (wxMenuItem *)node->Data();
+ subMenu = item->GetSubMenu() ;
+ if (subMenu)
+ {
+ UMAInsertMenu( subMenu->GetHMenu() , -1 ) ;
+ }
+ }
+ UMAInsertMenu(m_menus[i]->GetHMenu(), 0);
+ }
+ }
+ UMADrawMenuBar() ;
+
+ s_macInstalledMenuBar = this;