--- ../src/mac/uma.cpp	Sat Feb  7 13:24:27 2004
+++ ../src/mac/uma.cpp.new	Sat Feb  7 13:20:36 2004
@@ -213,14 +213,31 @@
 //#endif
 }
 
+
+void UMASetMenuItemText(  MenuRef menu,  MenuItemIndex item, const wxString& title )
+{
+    wxString str = wxStripMenuCodes( title ) ;
+#if TARGET_CARBON
+    SetMenuItemTextWithCFString( menu , item , wxMacCFStringHolder(str) ) ;
+#else
+    Str255 ptitle ;
+    wxMacStringToPascal( str , ptitle ) ;
+    SetMenuItemText( menu , item , ptitle ) ;
+#endif
+}
+
+
 UInt32 UMAMenuEvent( EventRecord *inEvent )
 {
 		return MenuEvent( inEvent ) ;
 }
 
-void 			UMAEnableMenuItem( MenuRef inMenu , MenuItemIndex inItem )
+void UMAEnableMenuItem( MenuRef inMenu , MenuItemIndex inItem , bool enable)
 {
+    if ( enable )
 	EnableMenuItem( inMenu , inItem ) ;
+    else
+        DisableMenuItem( inMenu , inItem ) ;
 }
 
 void 			UMADisableMenuItem( MenuRef inMenu , MenuItemIndex inItem )
@@ -392,6 +409,136 @@
 	SetMenuItemText(menu, item+1 , l);
 	UMASetMenuItemShortcut( menu , item+1 , key , modifiers ) ;
 }
+
+
+
+
+void UMASetMenuItemShortcut( MenuRef menu , MenuItemIndex item , wxAcceleratorEntry *entry )
+{
+    if ( !entry )
+        return ;
+
+    UInt8 modifiers = 0 ;
+    SInt16 key = entry->GetKeyCode() ;
+    if ( key )
+    {
+        bool explicitCommandKey = false ;
+
+        if ( entry->GetFlags() & wxACCEL_CTRL )
+        {
+            explicitCommandKey = true ;
+        }
+
+        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 )
+        {
+            // 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 ;
+            if ( !explicitCommandKey )
+                modifiers |= kMenuNoCommandModifier ;
+          }
+        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_PRIOR : // PAGE UP
+                    macKey = kPageUpCharCode ;
+                    glyph = kMenuPageUpGlyph ;
+                    break ;
+                case WXK_NEXT :
+                    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 ;
+            }
+        }
+
+        SetItemCmd( menu, item , macKey );
+        SetMenuItemModifiers(menu, item , modifiers ) ;
+
+        if ( glyph )
+            SetMenuItemKeyGlyph(menu, item , glyph ) ;
+    }
+}
+
+void UMAAppendMenuItem( MenuRef menu , const wxString& title , wxAcceleratorEntry *entry )
+{
+    MacAppendMenu(menu, "\pA");
+    UMASetMenuItemText(menu, (SInt16) ::CountMenuItems(menu), title );
+    UMASetMenuItemShortcut( menu ,  (SInt16) ::CountMenuItems(menu), entry ) ;
+}
+
+void UMAInsertMenuItem( MenuRef menu , const wxString& title , MenuItemIndex item , wxAcceleratorEntry *entry )
+{
+    MacInsertMenuItem( menu , "\pA" , item) ;
+    UMASetMenuItemText(menu, item+1 , title );
+    UMASetMenuItemShortcut( menu , item+1 , entry ) ;
+}
+
+
 
 // quickdraw
 
