+
+void UMAAppendSubMenuItem( MenuRef menu , const wxString& title, wxFontEncoding encoding , SInt16 id )
+{
+ AppendMenuItemTextWithCFString( menu,
+ CFSTR("A"), 0, 0,NULL);
+ UMASetMenuItemText( menu, (SInt16) ::CountMenuItems(menu), title , encoding );
+ SetMenuItemHierarchicalID( menu , CountMenuItems( menu ) , id ) ;
+}
+
+void UMAInsertSubMenuItem( MenuRef menu , const wxString& title, wxFontEncoding encoding , MenuItemIndex item , SInt16 id )
+{
+ InsertMenuItemTextWithCFString( menu,
+ CFSTR("A"), item, 0, 0);
+
+ UMASetMenuItemText( menu, item+1, title , encoding );
+ SetMenuItemHierarchicalID( menu , item+1 , id ) ;
+}
+
+void UMASetMenuItemShortcut( MenuRef menu , MenuItemIndex item , wxAcceleratorEntry *entry )
+{
+ if ( !entry )
+ return ;
+
+ UInt8 modifiers = 0 ;
+ SInt16 key = entry->GetKeyCode() ;
+ if ( key )
+ {
+ bool explicitCommandKey = (entry->GetFlags() & wxACCEL_CTRL);
+
+ if (entry->GetFlags() & wxACCEL_ALT)
+ modifiers |= kMenuOptionModifier ;
+
+ if (entry->GetFlags() & wxACCEL_SHIFT)
+ modifiers |= kMenuShiftModifier ;
+
+ SInt16 glyph = 0 ;
+ SInt16 macKey = key ;
+ if ( key >= WXK_F1 && key <= WXK_F15 )
+ {
+ if ( !explicitCommandKey )
+ modifiers |= kMenuNoCommandModifier ;
+
+ // for some reasons this must be 0 right now
+ // everything else leads to just the first function key item
+ // to be selected. Thanks to Ryan Wilcox for finding out.
+ macKey = 0 ;
+ glyph = kMenuF1Glyph + ( key - WXK_F1 ) ;
+ if ( key >= WXK_F13 )
+ glyph += 13 ;
+ }
+ else
+ {
+ switch ( key )
+ {
+ case WXK_BACK :
+ macKey = kBackspaceCharCode ;
+ glyph = kMenuDeleteLeftGlyph ;
+ break ;
+
+ case WXK_TAB :
+ macKey = kTabCharCode ;
+ glyph = kMenuTabRightGlyph ;
+ break ;
+
+ case kEnterCharCode :
+ macKey = kEnterCharCode ;
+ glyph = kMenuEnterGlyph ;
+ break ;
+
+ case WXK_RETURN :
+ macKey = kReturnCharCode ;
+ glyph = kMenuReturnGlyph ;
+ break ;
+
+ case WXK_ESCAPE :
+ macKey = kEscapeCharCode ;
+ glyph = kMenuEscapeGlyph ;
+ break ;
+
+ case WXK_SPACE :
+ macKey = ' ' ;
+ glyph = kMenuSpaceGlyph ;
+ break ;
+
+ case WXK_DELETE :
+ macKey = kDeleteCharCode ;
+ glyph = kMenuDeleteRightGlyph ;
+ break ;
+
+ case WXK_CLEAR :
+ macKey = kClearCharCode ;
+ glyph = kMenuClearGlyph ;
+ break ;
+
+ case WXK_PAGEUP :
+ macKey = kPageUpCharCode ;
+ glyph = kMenuPageUpGlyph ;
+ break ;
+
+ case WXK_PAGEDOWN :
+ macKey = kPageDownCharCode ;
+ glyph = kMenuPageDownGlyph ;
+ break ;
+
+ case WXK_LEFT :
+ macKey = kLeftArrowCharCode ;
+ glyph = kMenuLeftArrowGlyph ;
+ break ;
+
+ case WXK_UP :
+ macKey = kUpArrowCharCode ;
+ glyph = kMenuUpArrowGlyph ;
+ break ;
+
+ case WXK_RIGHT :
+ macKey = kRightArrowCharCode ;
+ glyph = kMenuRightArrowGlyph ;
+ break ;
+
+ case WXK_DOWN :
+ macKey = kDownArrowCharCode ;
+ glyph = kMenuDownArrowGlyph ;
+ break ;
+
+ case WXK_HOME :
+ macKey = kHomeCharCode ;
+ glyph = kMenuNorthwestArrowGlyph ;
+ break ;
+
+ case WXK_END :
+ macKey = kEndCharCode ;
+ glyph = kMenuSoutheastArrowGlyph ;
+ break ;
+ default :
+ macKey = toupper( key ) ;
+ break ;
+ }
+
+ // we now allow non command key shortcuts
+ // remove in case this gives problems
+ if ( !explicitCommandKey )
+ modifiers |= kMenuNoCommandModifier ;
+ }
+
+ // 1d and 1e have special meaning to SetItemCmd, so
+ // do not use for these character codes.
+ if (key != WXK_UP && key != WXK_RIGHT && key != WXK_DOWN && key != WXK_LEFT)
+ SetItemCmd( menu, item , macKey );
+
+ SetMenuItemModifiers( menu, item , modifiers ) ;
+
+ if ( glyph )
+ SetMenuItemKeyGlyph( menu, item , glyph ) ;
+ }
+}
+
+void UMAAppendMenuItem( MenuRef menu , const wxString& title, wxFontEncoding encoding , wxAcceleratorEntry *entry )
+{
+ AppendMenuItemTextWithCFString( menu,
+ CFSTR("A"), 0, 0,NULL);
+ // don't attempt to interpret metacharacters like a '-' at the beginning (would become a separator otherwise)
+ ChangeMenuItemAttributes( menu , ::CountMenuItems(menu), kMenuItemAttrIgnoreMeta , 0 ) ;
+ UMASetMenuItemText(menu, (SInt16) ::CountMenuItems(menu), title , encoding );
+ UMASetMenuItemShortcut( menu , (SInt16) ::CountMenuItems(menu), entry ) ;
+}
+
+void UMAInsertMenuItem( MenuRef menu , const wxString& title, wxFontEncoding encoding , MenuItemIndex item , wxAcceleratorEntry *entry )
+{
+ InsertMenuItemTextWithCFString( menu,
+ CFSTR("A"), item, 0, 0);
+
+ // don't attempt to interpret metacharacters like a '-' at the beginning (would become a separator otherwise)
+ ChangeMenuItemAttributes( menu , item+1, kMenuItemAttrIgnoreMeta , 0 ) ;
+ UMASetMenuItemText(menu, item+1 , title , encoding );
+ UMASetMenuItemShortcut( menu , item+1 , entry ) ;