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
This commit is contained in:
@@ -42,7 +42,7 @@ IMPLEMENT_DYNAMIC_CLASS(wxMenuBar, wxEvtHandler)
|
|||||||
|
|
||||||
// the (popup) menu title has this special id
|
// the (popup) menu title has this special id
|
||||||
static const int idMenuTitle = -2;
|
static const int idMenuTitle = -2;
|
||||||
static int formerHelpMenuItems = 0 ;
|
static MenuItemIndex firstUserHelpMenuItem = 0 ;
|
||||||
|
|
||||||
const short kwxMacMenuBarResource = 1 ;
|
const short kwxMacMenuBarResource = 1 ;
|
||||||
const short kwxMacAppleMenuId = 1 ;
|
const short kwxMacAppleMenuId = 1 ;
|
||||||
@@ -453,7 +453,7 @@ bool wxMenu::MacMenuSelect( wxEvtHandler* handler, long when , int macMenuId, in
|
|||||||
#ifndef __DARWIN__
|
#ifndef __DARWIN__
|
||||||
else if ( macMenuId == kHMHelpMenuID )
|
else if ( macMenuId == kHMHelpMenuID )
|
||||||
{
|
{
|
||||||
int menuItem = formerHelpMenuItems ;
|
int menuItem = firstUserHelpMenuItem-1 ;
|
||||||
for (pos = 0, node = GetMenuItems().First(); node; node = node->Next(), pos++)
|
for (pos = 0, node = GetMenuItems().First(); node; node = node->Next(), pos++)
|
||||||
{
|
{
|
||||||
wxMenuItem * pItem = (wxMenuItem *) node->Data() ;
|
wxMenuItem * pItem = (wxMenuItem *) node->Data() ;
|
||||||
@@ -639,20 +639,13 @@ void wxMenuBar::MacInstallMenuBar()
|
|||||||
int pos ;
|
int pos ;
|
||||||
wxMenu* menu = m_menus[i] , *subMenu = NULL ;
|
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 )
|
if( m_titles[i] == "?" || m_titles[i] == "&?" || m_titles[i] == wxApp::s_macHelpMenuTitleName )
|
||||||
{
|
{
|
||||||
MenuHandle mh = NULL ;
|
MenuHandle mh = NULL ;
|
||||||
if ( HMGetHelpMenuHandle( &mh ) != noErr )
|
if ( UMAGetHelpMenu( &mh , &firstUserHelpMenuItem) != noErr )
|
||||||
{
|
{
|
||||||
continue ;
|
continue ;
|
||||||
}
|
}
|
||||||
if ( formerHelpMenuItems == 0 )
|
|
||||||
{
|
|
||||||
if( mh )
|
|
||||||
formerHelpMenuItems = CountMenuItems( mh ) ;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (pos = 0 , node = menu->GetMenuItems().First(); node; node = node->Next(), pos++)
|
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
|
else
|
||||||
{
|
{
|
||||||
wxMenuItem::MacBuildMenuString( label, NULL , NULL , m_titles[i] , false );
|
wxMenuItem::MacBuildMenuString( label, NULL , NULL , m_titles[i] , false );
|
||||||
|
@@ -1,6 +1,7 @@
|
|||||||
#include "wx/defs.h"
|
#include "wx/defs.h"
|
||||||
#include "wx/dc.h"
|
#include "wx/dc.h"
|
||||||
#include "wx/mac/uma.h"
|
#include "wx/mac/uma.h"
|
||||||
|
#include <MacTextEditor.h>
|
||||||
|
|
||||||
#ifndef __DARWIN__
|
#ifndef __DARWIN__
|
||||||
#include <Navigation.h>
|
#include <Navigation.h>
|
||||||
@@ -12,6 +13,8 @@
|
|||||||
// windows manager, control manager, navigation services etc. are
|
// windows manager, control manager, navigation services etc. are
|
||||||
// present
|
// present
|
||||||
|
|
||||||
|
#define wxUSE_MLTE 0
|
||||||
|
|
||||||
static bool sUMAHasAppearance = false ;
|
static bool sUMAHasAppearance = false ;
|
||||||
static long sUMAAppearanceVersion = 0 ;
|
static long sUMAAppearanceVersion = 0 ;
|
||||||
extern int gAGABackgroundColor ;
|
extern int gAGABackgroundColor ;
|
||||||
@@ -34,6 +37,9 @@ void UMACleanupToolbox()
|
|||||||
{
|
{
|
||||||
NavUnload() ;
|
NavUnload() ;
|
||||||
}
|
}
|
||||||
|
#if wxUSE_MLTE
|
||||||
|
TXNTerminateTextension( ) ;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
void UMAInitToolbox( UInt16 inMoreMastersCalls )
|
void UMAInitToolbox( UInt16 inMoreMastersCalls )
|
||||||
{
|
{
|
||||||
@@ -89,6 +95,15 @@ void UMAInitToolbox( UInt16 inMoreMastersCalls )
|
|||||||
{
|
{
|
||||||
NavLoad() ;
|
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
|
// process manager
|
||||||
@@ -432,7 +447,7 @@ void UMASizeControl( ControlHandle inControl , short x , short y )
|
|||||||
SetControlVisibility( inControl , false , false ) ;
|
SetControlVisibility( inControl , false , false ) ;
|
||||||
Rect ctrlBounds ;
|
Rect ctrlBounds ;
|
||||||
InvalWindowRect(GetControlOwner(inControl),GetControlBounds(inControl,&ctrlBounds) ) ;
|
InvalWindowRect(GetControlOwner(inControl),GetControlBounds(inControl,&ctrlBounds) ) ;
|
||||||
}
|
}
|
||||||
::SizeControl( inControl , x , y ) ;
|
::SizeControl( inControl , x , y ) ;
|
||||||
if ( visible ) {
|
if ( visible ) {
|
||||||
SetControlVisibility( inControl , true , false ) ;
|
SetControlVisibility( inControl , true , false ) ;
|
||||||
@@ -546,3 +561,30 @@ OSStatus UMADrawThemePlacard( const Rect *inRect , ThemeDrawState inState )
|
|||||||
return ::DrawThemePlacard( inRect , 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
|
||||||
|
}
|
||||||
|
@@ -42,7 +42,7 @@ IMPLEMENT_DYNAMIC_CLASS(wxMenuBar, wxEvtHandler)
|
|||||||
|
|
||||||
// the (popup) menu title has this special id
|
// the (popup) menu title has this special id
|
||||||
static const int idMenuTitle = -2;
|
static const int idMenuTitle = -2;
|
||||||
static int formerHelpMenuItems = 0 ;
|
static MenuItemIndex firstUserHelpMenuItem = 0 ;
|
||||||
|
|
||||||
const short kwxMacMenuBarResource = 1 ;
|
const short kwxMacMenuBarResource = 1 ;
|
||||||
const short kwxMacAppleMenuId = 1 ;
|
const short kwxMacAppleMenuId = 1 ;
|
||||||
@@ -453,7 +453,7 @@ bool wxMenu::MacMenuSelect( wxEvtHandler* handler, long when , int macMenuId, in
|
|||||||
#ifndef __DARWIN__
|
#ifndef __DARWIN__
|
||||||
else if ( macMenuId == kHMHelpMenuID )
|
else if ( macMenuId == kHMHelpMenuID )
|
||||||
{
|
{
|
||||||
int menuItem = formerHelpMenuItems ;
|
int menuItem = firstUserHelpMenuItem-1 ;
|
||||||
for (pos = 0, node = GetMenuItems().First(); node; node = node->Next(), pos++)
|
for (pos = 0, node = GetMenuItems().First(); node; node = node->Next(), pos++)
|
||||||
{
|
{
|
||||||
wxMenuItem * pItem = (wxMenuItem *) node->Data() ;
|
wxMenuItem * pItem = (wxMenuItem *) node->Data() ;
|
||||||
@@ -639,20 +639,13 @@ void wxMenuBar::MacInstallMenuBar()
|
|||||||
int pos ;
|
int pos ;
|
||||||
wxMenu* menu = m_menus[i] , *subMenu = NULL ;
|
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 )
|
if( m_titles[i] == "?" || m_titles[i] == "&?" || m_titles[i] == wxApp::s_macHelpMenuTitleName )
|
||||||
{
|
{
|
||||||
MenuHandle mh = NULL ;
|
MenuHandle mh = NULL ;
|
||||||
if ( HMGetHelpMenuHandle( &mh ) != noErr )
|
if ( UMAGetHelpMenu( &mh , &firstUserHelpMenuItem) != noErr )
|
||||||
{
|
{
|
||||||
continue ;
|
continue ;
|
||||||
}
|
}
|
||||||
if ( formerHelpMenuItems == 0 )
|
|
||||||
{
|
|
||||||
if( mh )
|
|
||||||
formerHelpMenuItems = CountMenuItems( mh ) ;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (pos = 0 , node = menu->GetMenuItems().First(); node; node = node->Next(), pos++)
|
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
|
else
|
||||||
{
|
{
|
||||||
wxMenuItem::MacBuildMenuString( label, NULL , NULL , m_titles[i] , false );
|
wxMenuItem::MacBuildMenuString( label, NULL , NULL , m_titles[i] , false );
|
||||||
|
@@ -1,6 +1,7 @@
|
|||||||
#include "wx/defs.h"
|
#include "wx/defs.h"
|
||||||
#include "wx/dc.h"
|
#include "wx/dc.h"
|
||||||
#include "wx/mac/uma.h"
|
#include "wx/mac/uma.h"
|
||||||
|
#include <MacTextEditor.h>
|
||||||
|
|
||||||
#ifndef __DARWIN__
|
#ifndef __DARWIN__
|
||||||
#include <Navigation.h>
|
#include <Navigation.h>
|
||||||
@@ -12,6 +13,8 @@
|
|||||||
// windows manager, control manager, navigation services etc. are
|
// windows manager, control manager, navigation services etc. are
|
||||||
// present
|
// present
|
||||||
|
|
||||||
|
#define wxUSE_MLTE 0
|
||||||
|
|
||||||
static bool sUMAHasAppearance = false ;
|
static bool sUMAHasAppearance = false ;
|
||||||
static long sUMAAppearanceVersion = 0 ;
|
static long sUMAAppearanceVersion = 0 ;
|
||||||
extern int gAGABackgroundColor ;
|
extern int gAGABackgroundColor ;
|
||||||
@@ -34,6 +37,9 @@ void UMACleanupToolbox()
|
|||||||
{
|
{
|
||||||
NavUnload() ;
|
NavUnload() ;
|
||||||
}
|
}
|
||||||
|
#if wxUSE_MLTE
|
||||||
|
TXNTerminateTextension( ) ;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
void UMAInitToolbox( UInt16 inMoreMastersCalls )
|
void UMAInitToolbox( UInt16 inMoreMastersCalls )
|
||||||
{
|
{
|
||||||
@@ -89,6 +95,15 @@ void UMAInitToolbox( UInt16 inMoreMastersCalls )
|
|||||||
{
|
{
|
||||||
NavLoad() ;
|
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
|
// process manager
|
||||||
@@ -432,7 +447,7 @@ void UMASizeControl( ControlHandle inControl , short x , short y )
|
|||||||
SetControlVisibility( inControl , false , false ) ;
|
SetControlVisibility( inControl , false , false ) ;
|
||||||
Rect ctrlBounds ;
|
Rect ctrlBounds ;
|
||||||
InvalWindowRect(GetControlOwner(inControl),GetControlBounds(inControl,&ctrlBounds) ) ;
|
InvalWindowRect(GetControlOwner(inControl),GetControlBounds(inControl,&ctrlBounds) ) ;
|
||||||
}
|
}
|
||||||
::SizeControl( inControl , x , y ) ;
|
::SizeControl( inControl , x , y ) ;
|
||||||
if ( visible ) {
|
if ( visible ) {
|
||||||
SetControlVisibility( inControl , true , false ) ;
|
SetControlVisibility( inControl , true , false ) ;
|
||||||
@@ -546,3 +561,30 @@ OSStatus UMADrawThemePlacard( const Rect *inRect , ThemeDrawState inState )
|
|||||||
return ::DrawThemePlacard( inRect , 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
|
||||||
|
}
|
||||||
|
Reference in New Issue
Block a user