X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/7205570233ce8420b71fa5df368054c8953ff0e4..111c1e2c200bf4f8e20073cbd9e263a077eace19:/src/mac/carbon/menuitem.cpp diff --git a/src/mac/carbon/menuitem.cpp b/src/mac/carbon/menuitem.cpp index 33b337518e..6c41427f76 100644 --- a/src/mac/carbon/menuitem.cpp +++ b/src/mac/carbon/menuitem.cpp @@ -46,7 +46,7 @@ int wxMenuItem::MacBuildMenuString(StringPtr outMacItemText, SInt16 *outMacShort { char *p = (char *) &outMacItemText[1] ; short macModifiers = 0 ; - char macShortCut = 0 ; + SInt16 macShortCut = 0 ; const char *inItemName ; wxString inItemTextMac ; @@ -72,31 +72,6 @@ int wxMenuItem::MacBuildMenuString(StringPtr outMacItemText, SInt16 *outMacShort { switch ( *inItemName ) { - // special characters for macintosh menus -> use some replacement - case ';' : - *p++ = ',' ; - break ; - case '^' : - *p++ = ' ' ; - break ; - case '!' : - *p++ = ' ' ; - break ; - case '<' : - *p++ = '[' ; - break ; - case '>' : - *p++ = ']' ; - break ; - case '/' : - *p++ = '|' ; - break ; - case '(' : - *p++ = '[' ; - break ; - case ')' : - *p++ = ']' ; - break ; // shortcuts case '&' : { @@ -115,43 +90,71 @@ int wxMenuItem::MacBuildMenuString(StringPtr outMacItemText, SInt16 *outMacShort case '\t' : { ++inItemName ; - while( *inItemName ) + bool skip = false ; + bool explicitCommandKey = false ; + while( *inItemName && !skip ) { - if (strncmp("Ctrl", inItemName, 4) == 0) + if (wxStrnicmp("Ctrl", inItemName, 4) == 0) { inItemName = inItemName + 5; - macShortCut = *inItemName; + explicitCommandKey = true ; } - else if (strncmp("Cntrl", inItemName, 5) == 0) + else if (wxStrnicmp("Cntrl", inItemName, 5) == 0) { inItemName = inItemName + 6; - macShortCut = *inItemName; + explicitCommandKey = true ; } - else if (strncmp("Alt", inItemName, 3) == 0) + else if (wxStrnicmp("Alt", inItemName, 3) == 0) { inItemName = inItemName + 4; macModifiers |= kMenuOptionModifier ; - macShortCut = *inItemName ; } - else if (strncmp("Shift", inItemName, 5) == 0) + else if (wxStrnicmp("Shift", inItemName, 5) == 0) { inItemName = inItemName + 6; macModifiers |= kMenuShiftModifier ; - macShortCut = *inItemName ; } - else if (strncmp("F", inItemName, 1) == 0) + else { - inItemName += strlen( inItemName ) ; - // no function keys at the moment - // macModifiers |= kMenuShiftModifier ; - // macShortCut = *inItemName ; + skip = true ; } - else + } + 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" ) ) { - break ; + 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 ; @@ -175,24 +178,16 @@ int wxMenuItem::MacBuildMenuString(StringPtr outMacItemText, SInt16 *outMacShort // ctor & dtor // ----------- -wxMenuItem::wxMenuItem(wxMenu *pParentMenu, int id, - const wxString& text, const wxString& strHelp, - bool bCheckable, +wxMenuItem::wxMenuItem(wxMenu *pParentMenu, + int id, + const wxString& text, + const wxString& strHelp, + wxItemKind kind, wxMenu *pSubMenu) + : wxMenuItemBase(pParentMenu, id, text, strHelp, kind, pSubMenu) { - wxASSERT( pParentMenu != NULL ); - - m_parentMenu = pParentMenu; - m_subMenu = pSubMenu; - m_isEnabled = TRUE; - m_isChecked = FALSE; - m_id = id; - m_text = text; - m_isCheckable = bCheckable; - m_help = strHelp; - - - if ( m_text == "E&xit" ||m_text == "Exit" ) + // VZ: what about translations?? (FIXME) + if ( m_text == "E&xit" ||m_text == "Exit" ||m_text.Left(5) == "Exit\t" || m_text.Left(6) == "E&xit\t" ) { m_text = "Quit\tCtrl+Q" ; } @@ -249,30 +244,30 @@ void wxMenuItem::Enable(bool bDoEnable) if ( m_subMenu == NULL ) { // normal menu item - if ( m_parentMenu->GetHMenu() ) + if ( MAC_WXHMENU(m_parentMenu->GetHMenu()) ) { int index = m_parentMenu->MacGetIndexFromItem( this ) ; if ( index >= 1 ) { if ( bDoEnable ) - UMAEnableMenuItem( m_parentMenu->GetHMenu() , index ) ; + UMAEnableMenuItem( MAC_WXHMENU(m_parentMenu->GetHMenu()) , index ) ; else - UMADisableMenuItem( m_parentMenu->GetHMenu() , index ) ; + UMADisableMenuItem( MAC_WXHMENU(m_parentMenu->GetHMenu()) , index ) ; } } } else { // submenu - if ( m_parentMenu->GetHMenu() ) + if ( MAC_WXHMENU(m_parentMenu->GetHMenu()) ) { int index = m_parentMenu->MacGetIndexFromItem( this ) ; if ( index >= 1 ) { if ( bDoEnable ) - UMAEnableMenuItem( m_parentMenu->GetHMenu() , index ) ; + UMAEnableMenuItem( MAC_WXHMENU(m_parentMenu->GetHMenu()) , index ) ; else - UMADisableMenuItem( m_parentMenu->GetHMenu() , index ) ; + UMADisableMenuItem( MAC_WXHMENU(m_parentMenu->GetHMenu()) , index ) ; } } } @@ -288,15 +283,15 @@ void wxMenuItem::Check(bool bDoCheck) if ( m_isChecked != bDoCheck ) { m_isChecked = bDoCheck; - if ( m_parentMenu->GetHMenu() ) + if ( MAC_WXHMENU(m_parentMenu->GetHMenu()) ) { int index = m_parentMenu->MacGetIndexFromItem( this ) ; if ( index >= 1 ) { if ( bDoCheck ) - ::SetItemMark( m_parentMenu->GetHMenu() , index , 0x12 ) ; // checkmark + ::SetItemMark( MAC_WXHMENU(m_parentMenu->GetHMenu()) , index , 0x12 ) ; // checkmark else - ::SetItemMark( m_parentMenu->GetHMenu() , index , 0 ) ; // no mark + ::SetItemMark( MAC_WXHMENU(m_parentMenu->GetHMenu()) , index , 0 ) ; // no mark } } } @@ -312,14 +307,14 @@ void wxMenuItem::SetText(const wxString& text) // OWNER_DRAWN_ONLY( wxOwnerDrawn::SetName(text) ); wxCHECK_RET( m_parentMenu && m_parentMenu->GetHMenu(), wxT("menuitem without menu") ); - if ( m_parentMenu->GetHMenu() ) + if ( MAC_WXHMENU(m_parentMenu->GetHMenu()) ) { int index = m_parentMenu->MacGetIndexFromItem( this ) ; if ( index >= 1 ) { Str255 label; MacBuildMenuString( label , NULL , NULL , text ,false); - ::SetMenuItemText( m_parentMenu->GetHMenu() , index , label ) ; // checkmark + ::SetMenuItemText( MAC_WXHMENU(m_parentMenu->GetHMenu()) , index , label ) ; // checkmark } } @@ -348,8 +343,8 @@ wxMenuItem *wxMenuItemBase::New(wxMenu *parentMenu, int id, const wxString& name, const wxString& help, - bool isCheckable, + wxItemKind kind, wxMenu *subMenu) { - return new wxMenuItem(parentMenu, id, name, help, isCheckable, subMenu); + return new wxMenuItem(parentMenu, id, name, help, kind, subMenu); }