]> git.saurik.com Git - wxWidgets.git/commitdiff
added method for getting the help menu on classic and carbon
authorStefan Csomor <csomor@advancedconcepts.ch>
Fri, 7 Dec 2001 05:35:57 +0000 (05:35 +0000)
committerStefan Csomor <csomor@advancedconcepts.ch>
Fri, 7 Dec 2001 05:35:57 +0000 (05:35 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@12899 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

src/mac/carbon/menu.cpp
src/mac/carbon/uma.cpp
src/mac/menu.cpp
src/mac/uma.cpp

index 030c20efd000c017f814d03cebbc0e04066cee1a..dec16985ff3626b69125322a622f35f4aa707f7c 100644 (file)
@@ -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 );
index 60b61374a0f0f800e3f256eba565652c17adc1fa..00e22e0ffaaf40ebf67c497e598467d7de0198be 100644 (file)
@@ -1,6 +1,7 @@
 #include "wx/defs.h"
 #include "wx/dc.h"
 #include "wx/mac/uma.h"
+#include <MacTextEditor.h>
 
 #ifndef __DARWIN__
   #include <Navigation.h>
@@ -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
+}
index 030c20efd000c017f814d03cebbc0e04066cee1a..dec16985ff3626b69125322a622f35f4aa707f7c 100644 (file)
@@ -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 );
index 60b61374a0f0f800e3f256eba565652c17adc1fa..00e22e0ffaaf40ebf67c497e598467d7de0198be 100644 (file)
@@ -1,6 +1,7 @@
 #include "wx/defs.h"
 #include "wx/dc.h"
 #include "wx/mac/uma.h"
+#include <MacTextEditor.h>
 
 #ifndef __DARWIN__
   #include <Navigation.h>
@@ -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
+}