From b03e4fcd11071534f942a6c3b16bb86792c71e83 Mon Sep 17 00:00:00 2001 From: Stefan Csomor Date: Fri, 7 Dec 2001 05:35:57 +0000 Subject: [PATCH] added method for getting the help menu on classic and carbon git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@12899 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- src/mac/carbon/menu.cpp | 68 ++++------------------------------------- src/mac/carbon/uma.cpp | 44 +++++++++++++++++++++++++- src/mac/menu.cpp | 68 ++++------------------------------------- src/mac/uma.cpp | 44 +++++++++++++++++++++++++- 4 files changed, 98 insertions(+), 126 deletions(-) diff --git a/src/mac/carbon/menu.cpp b/src/mac/carbon/menu.cpp index 030c20efd0..dec16985ff 100644 --- a/src/mac/carbon/menu.cpp +++ b/src/mac/carbon/menu.cpp @@ -42,7 +42,7 @@ IMPLEMENT_DYNAMIC_CLASS(wxMenuBar, wxEvtHandler) // the (popup) menu title has this special id static const int idMenuTitle = -2; -static int formerHelpMenuItems = 0 ; +static MenuItemIndex firstUserHelpMenuItem = 0 ; const short kwxMacMenuBarResource = 1 ; const short kwxMacAppleMenuId = 1 ; @@ -453,7 +453,7 @@ bool wxMenu::MacMenuSelect( wxEvtHandler* handler, long when , int macMenuId, in #ifndef __DARWIN__ else if ( macMenuId == kHMHelpMenuID ) { - int menuItem = formerHelpMenuItems ; + int menuItem = firstUserHelpMenuItem-1 ; for (pos = 0, node = GetMenuItems().First(); node; node = node->Next(), pos++) { wxMenuItem * pItem = (wxMenuItem *) node->Data() ; @@ -639,20 +639,13 @@ void wxMenuBar::MacInstallMenuBar() 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 ) ; - } + if ( UMAGetHelpMenu( &mh , &firstUserHelpMenuItem) != noErr ) + { + continue ; + } for (pos = 0 , node = menu->GetMenuItems().First(); node; node = node->Next(), pos++) { @@ -695,55 +688,6 @@ 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 ) ; - - wxArrayPtrVoid submenus ; - - for (pos = 0 , node = menu->GetMenuItems().First(); node; node = node->Next(), pos++) - { - 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 ); diff --git a/src/mac/carbon/uma.cpp b/src/mac/carbon/uma.cpp index 60b61374a0..00e22e0ffa 100644 --- a/src/mac/carbon/uma.cpp +++ b/src/mac/carbon/uma.cpp @@ -1,6 +1,7 @@ #include "wx/defs.h" #include "wx/dc.h" #include "wx/mac/uma.h" +#include #ifndef __DARWIN__ #include @@ -12,6 +13,8 @@ // windows manager, control manager, navigation services etc. are // present +#define wxUSE_MLTE 0 + static bool sUMAHasAppearance = false ; static long sUMAAppearanceVersion = 0 ; extern int gAGABackgroundColor ; @@ -34,6 +37,9 @@ void UMACleanupToolbox() { NavUnload() ; } +#if wxUSE_MLTE + TXNTerminateTextension( ) ; +#endif } void UMAInitToolbox( UInt16 inMoreMastersCalls ) { @@ -89,6 +95,15 @@ void UMAInitToolbox( UInt16 inMoreMastersCalls ) { NavLoad() ; } + +#if wxUSE_MLTE + TXNMacOSPreferredFontDescription defaults; + defaults.fontID = kFontIDGeneva ; + defaults.pointSize = (10 << 16) ; + defaults.fontStyle = kTXNDefaultFontStyle; + defaults.encoding = kTXNSystemDefaultEncoding; + TXNInitTextension(&defaults, 1, (kTXNAlwaysUseQuickDrawTextMask | kTXNWantMoviesMask | kTXNWantSoundMask | kTXNWantGraphicsMask)); +#endif } // process manager @@ -432,7 +447,7 @@ void UMASizeControl( ControlHandle inControl , short x , short y ) SetControlVisibility( inControl , false , false ) ; Rect ctrlBounds ; InvalWindowRect(GetControlOwner(inControl),GetControlBounds(inControl,&ctrlBounds) ) ; - } + } ::SizeControl( inControl , x , y ) ; if ( visible ) { SetControlVisibility( inControl , true , false ) ; @@ -546,3 +561,30 @@ OSStatus UMADrawThemePlacard( const Rect *inRect , ThemeDrawState inState ) return ::DrawThemePlacard( inRect , inState ) ; } +static OSStatus helpMenuStatus = noErr ; +static MenuRef helpMenuHandle = NULL ; +static MenuItemIndex firstCustomItemIndex = 0 ; + +OSStatus UMAGetHelpMenu( + MenuRef * outHelpMenu, + MenuItemIndex * outFirstCustomItemIndex) +{ +#if TARGET_CARBON + return HMGetHelpMenu( outHelpMenu , outFirstCustomItemIndex ) ; +#else + if ( helpMenuHandle == NULL ) + { + helpMenuStatus = HMGetHelpMenuHandle( &helpMenuHandle ) ; + if ( helpMenuStatus == noErr ) + { + firstCustomItemIndex = CountMenuItems( helpMenuHandle ) + 1 ; + } + } + if ( outFirstCustomItemIndex ) + { + *outFirstCustomItemIndex = firstCustomItemIndex ; + } + *outHelpMenu = helpMenuHandle ; + return helpMenuStatus ; +#endif +} diff --git a/src/mac/menu.cpp b/src/mac/menu.cpp index 030c20efd0..dec16985ff 100644 --- a/src/mac/menu.cpp +++ b/src/mac/menu.cpp @@ -42,7 +42,7 @@ IMPLEMENT_DYNAMIC_CLASS(wxMenuBar, wxEvtHandler) // the (popup) menu title has this special id static const int idMenuTitle = -2; -static int formerHelpMenuItems = 0 ; +static MenuItemIndex firstUserHelpMenuItem = 0 ; const short kwxMacMenuBarResource = 1 ; const short kwxMacAppleMenuId = 1 ; @@ -453,7 +453,7 @@ bool wxMenu::MacMenuSelect( wxEvtHandler* handler, long when , int macMenuId, in #ifndef __DARWIN__ else if ( macMenuId == kHMHelpMenuID ) { - int menuItem = formerHelpMenuItems ; + int menuItem = firstUserHelpMenuItem-1 ; for (pos = 0, node = GetMenuItems().First(); node; node = node->Next(), pos++) { wxMenuItem * pItem = (wxMenuItem *) node->Data() ; @@ -639,20 +639,13 @@ void wxMenuBar::MacInstallMenuBar() 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 ) ; - } + if ( UMAGetHelpMenu( &mh , &firstUserHelpMenuItem) != noErr ) + { + continue ; + } for (pos = 0 , node = menu->GetMenuItems().First(); node; node = node->Next(), pos++) { @@ -695,55 +688,6 @@ 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 ) ; - - wxArrayPtrVoid submenus ; - - for (pos = 0 , node = menu->GetMenuItems().First(); node; node = node->Next(), pos++) - { - 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 ); diff --git a/src/mac/uma.cpp b/src/mac/uma.cpp index 60b61374a0..00e22e0ffa 100644 --- a/src/mac/uma.cpp +++ b/src/mac/uma.cpp @@ -1,6 +1,7 @@ #include "wx/defs.h" #include "wx/dc.h" #include "wx/mac/uma.h" +#include #ifndef __DARWIN__ #include @@ -12,6 +13,8 @@ // windows manager, control manager, navigation services etc. are // present +#define wxUSE_MLTE 0 + static bool sUMAHasAppearance = false ; static long sUMAAppearanceVersion = 0 ; extern int gAGABackgroundColor ; @@ -34,6 +37,9 @@ void UMACleanupToolbox() { NavUnload() ; } +#if wxUSE_MLTE + TXNTerminateTextension( ) ; +#endif } void UMAInitToolbox( UInt16 inMoreMastersCalls ) { @@ -89,6 +95,15 @@ void UMAInitToolbox( UInt16 inMoreMastersCalls ) { NavLoad() ; } + +#if wxUSE_MLTE + TXNMacOSPreferredFontDescription defaults; + defaults.fontID = kFontIDGeneva ; + defaults.pointSize = (10 << 16) ; + defaults.fontStyle = kTXNDefaultFontStyle; + defaults.encoding = kTXNSystemDefaultEncoding; + TXNInitTextension(&defaults, 1, (kTXNAlwaysUseQuickDrawTextMask | kTXNWantMoviesMask | kTXNWantSoundMask | kTXNWantGraphicsMask)); +#endif } // process manager @@ -432,7 +447,7 @@ void UMASizeControl( ControlHandle inControl , short x , short y ) SetControlVisibility( inControl , false , false ) ; Rect ctrlBounds ; InvalWindowRect(GetControlOwner(inControl),GetControlBounds(inControl,&ctrlBounds) ) ; - } + } ::SizeControl( inControl , x , y ) ; if ( visible ) { SetControlVisibility( inControl , true , false ) ; @@ -546,3 +561,30 @@ OSStatus UMADrawThemePlacard( const Rect *inRect , ThemeDrawState inState ) return ::DrawThemePlacard( inRect , inState ) ; } +static OSStatus helpMenuStatus = noErr ; +static MenuRef helpMenuHandle = NULL ; +static MenuItemIndex firstCustomItemIndex = 0 ; + +OSStatus UMAGetHelpMenu( + MenuRef * outHelpMenu, + MenuItemIndex * outFirstCustomItemIndex) +{ +#if TARGET_CARBON + return HMGetHelpMenu( outHelpMenu , outFirstCustomItemIndex ) ; +#else + if ( helpMenuHandle == NULL ) + { + helpMenuStatus = HMGetHelpMenuHandle( &helpMenuHandle ) ; + if ( helpMenuStatus == noErr ) + { + firstCustomItemIndex = CountMenuItems( helpMenuHandle ) + 1 ; + } + } + if ( outFirstCustomItemIndex ) + { + *outFirstCustomItemIndex = firstCustomItemIndex ; + } + *outHelpMenu = helpMenuHandle ; + return helpMenuStatus ; +#endif +} -- 2.47.2