-// Helper Functions to get Mac Menus the way they should be ;-)
-//
-
-void wxMacCtoPString(const char* theCString, Str255 thePString);
-
-// remove inappropriate characters, if useShortcuts is false, the ampersand will not auto-generate a mac menu-shortcut
-
-int wxMenuItem::MacBuildMenuString(StringPtr outMacItemText, SInt16 *outMacShortcutChar , UInt8 *outMacModifiers , const char *inItemText , bool useShortcuts )
-{
- char *p = (char *) &outMacItemText[1] ;
- short macModifiers = 0 ;
- SInt16 macShortCut = 0 ;
- const char *inItemName ;
- wxString inItemTextMac ;
-
- if (wxApp::s_macDefaultEncodingIsPC)
- {
- inItemTextMac = wxMacMakeMacStringFromPC( inItemText ) ;
- inItemName = inItemTextMac ;
- }
- else
- {
- inItemName = inItemText ;
- }
-
- if ( useShortcuts && !wxApp::s_macSupportPCMenuShortcuts )
- useShortcuts = false ;
-
- // we have problems with a leading hypen - it will be taken as a separator
-
- while ( *inItemName == '-' )
- inItemName++ ;
-
- while( *inItemName )
- {
- switch ( *inItemName )
- {
- // shortcuts
- case '&' :
- {
- ++inItemName ;
- if ( *inItemName )
- {
- *p++ = *inItemName ;
- if ( useShortcuts )
- macShortCut = *inItemName ;
- }
- else
- --inItemName ;
- }
- break ;
- // win-like accelerators
- case '\t' :
- {
- ++inItemName ;
- bool skip = false ;
- bool explicitCommandKey = false ;
- while( *inItemName && !skip )
- {
- if (wxStrnicmp("Ctrl", inItemName, 4) == 0)
- {
- inItemName = inItemName + 5;
- explicitCommandKey = true ;
- }
- else if (wxStrnicmp("Cntrl", inItemName, 5) == 0)
- {
- inItemName = inItemName + 6;
- explicitCommandKey = true ;
- }
- else if (wxStrnicmp("Alt", inItemName, 3) == 0)
- {
- inItemName = inItemName + 4;
- macModifiers |= kMenuOptionModifier ;
- }
- else if (wxStrnicmp("Shift", inItemName, 5) == 0)
- {
- inItemName = inItemName + 6;
- macModifiers |= kMenuShiftModifier ;
- }
- else
- {
- skip = true ;
- }
- }
- if ( *inItemName )
- {
- if ( strlen(inItemName) == 1 )
- {
- macShortCut = *inItemName;
- }
- else if ( !wxStricmp( inItemName , "Delete" ) || !wxStricmp( inItemName , "Del" ) )
- {
- macShortCut = WXK_DELETE ;
- }
- else if ( !wxStricmp( inItemName , "Back" ) || !wxStricmp( inItemName , "Backspace" ) )
- {
- macShortCut = WXK_BACK ;
- }
- else if ( !wxStricmp( inItemName , "Return" ) )
- {
- macShortCut = WXK_RETURN ;
- }
- else if ( !wxStricmp( inItemName , "Enter" ) )
- {
- macShortCut = kEnterCharCode ;
- }
- else if ( *inItemName == 'F' )
- {
- int fkey = atol(inItemName+1) ;
- if (fkey >= 1 && fkey < 15 )
- {
- macShortCut = WXK_F1 + fkey - 1 ;
- }
- if ( !explicitCommandKey )
- macModifiers |= kMenuNoCommandModifier ;
- }
- }
-
- inItemName += strlen( inItemName ) ;
-
- if ( *inItemName == 0 )
- --inItemName ;
-
- }
- break ;
- default :
- *p++ = *inItemName ;
- }
- ++inItemName ;
- }
-
- outMacItemText[0] = (p - (char *)outMacItemText) - 1;
- if ( outMacShortcutChar )
- *outMacShortcutChar = macShortCut ;
- if ( outMacModifiers )
- *outMacModifiers = macModifiers ;
-
- return 0 ;
-}
-