Added CocoaSetKeyEquivalent() that sets the accelerators. Only implemented
for letters, numbers, and ascii control characters. TODO: up/down/etc. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@30040 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -54,6 +54,7 @@ public:
|
|||||||
void CocoaItemSelected();
|
void CocoaItemSelected();
|
||||||
bool Cocoa_validateMenuItem();
|
bool Cocoa_validateMenuItem();
|
||||||
protected:
|
protected:
|
||||||
|
void CocoaSetKeyEquivalent();
|
||||||
WX_NSMenuItem m_cocoaNSMenuItem;
|
WX_NSMenuItem m_cocoaNSMenuItem;
|
||||||
static wxMenuItemCocoaHash sm_cocoaHash;
|
static wxMenuItemCocoaHash sm_cocoaHash;
|
||||||
static wxObjcAutoRefFromAlloc<struct objc_object *> sm_cocoaTarget;
|
static wxObjcAutoRefFromAlloc<struct objc_object *> sm_cocoaTarget;
|
||||||
|
@@ -34,6 +34,7 @@
|
|||||||
#import <AppKit/NSMenu.h>
|
#import <AppKit/NSMenu.h>
|
||||||
#import <Foundation/NSString.h>
|
#import <Foundation/NSString.h>
|
||||||
#import <AppKit/NSCell.h> // NSOnState, NSOffState
|
#import <AppKit/NSCell.h> // NSOnState, NSOffState
|
||||||
|
#import <AppKit/NSEvent.h> // modifier key masks
|
||||||
|
|
||||||
#if wxUSE_MENUS
|
#if wxUSE_MENUS
|
||||||
|
|
||||||
@@ -101,6 +102,44 @@ wxString wxMenuItemBase::GetLabelFromText(const wxString& text)
|
|||||||
return wxStripMenuCodes(text);
|
return wxStripMenuCodes(text);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void wxMenuItemCocoa::CocoaSetKeyEquivalent()
|
||||||
|
{
|
||||||
|
wxAcceleratorEntry *accel = GetAccel();
|
||||||
|
if(!accel)
|
||||||
|
return;
|
||||||
|
|
||||||
|
int accelFlags = accel->GetFlags();
|
||||||
|
int keyModifierMask = 0;
|
||||||
|
if(accelFlags & wxACCEL_ALT)
|
||||||
|
keyModifierMask |= NSAlternateKeyMask;
|
||||||
|
if(accelFlags & wxACCEL_CTRL)
|
||||||
|
keyModifierMask |= NSCommandKeyMask;
|
||||||
|
int keyCode = accel->GetKeyCode();
|
||||||
|
if(isalpha(keyCode))
|
||||||
|
{ // For alpha characters use upper/lower rather than NSShiftKeyMask
|
||||||
|
char alphaChar;
|
||||||
|
if(accelFlags & wxACCEL_SHIFT)
|
||||||
|
alphaChar = toupper(keyCode);
|
||||||
|
else
|
||||||
|
alphaChar = tolower(keyCode);
|
||||||
|
[m_cocoaNSMenuItem setKeyEquivalent:[NSString stringWithCString:&alphaChar length:1]];
|
||||||
|
[m_cocoaNSMenuItem setKeyEquivalentModifierMask:keyModifierMask];
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if(accelFlags & wxACCEL_SHIFT)
|
||||||
|
keyModifierMask |= NSShiftKeyMask;
|
||||||
|
if(keyCode < 128) // low ASCII includes backspace/tab/etc.
|
||||||
|
{ char alphaChar = keyCode;
|
||||||
|
[m_cocoaNSMenuItem setKeyEquivalent:[NSString stringWithCString:&alphaChar length:1]];
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{ // TODO
|
||||||
|
}
|
||||||
|
[m_cocoaNSMenuItem setKeyEquivalentModifierMask:keyModifierMask];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
// ctor & dtor
|
// ctor & dtor
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
@@ -134,6 +173,7 @@ wxMenuItemCocoa::wxMenuItemCocoa(wxMenu *pParentMenu,
|
|||||||
else
|
else
|
||||||
[m_cocoaNSMenuItem setTarget: sm_cocoaTarget];
|
[m_cocoaNSMenuItem setTarget: sm_cocoaTarget];
|
||||||
[menuTitle release];
|
[menuTitle release];
|
||||||
|
CocoaSetKeyEquivalent();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -245,6 +285,7 @@ void wxMenuItem::SetText(const wxString& label)
|
|||||||
wxMenuItemBase::SetText(label);
|
wxMenuItemBase::SetText(label);
|
||||||
wxCHECK_RET(m_kind != wxITEM_SEPARATOR, wxT("Separator items do not have titles."));
|
wxCHECK_RET(m_kind != wxITEM_SEPARATOR, wxT("Separator items do not have titles."));
|
||||||
[m_cocoaNSMenuItem setTitle: wxNSStringWithWxString(wxStripMenuCodes(label))];
|
[m_cocoaNSMenuItem setTitle: wxNSStringWithWxString(wxStripMenuCodes(label))];
|
||||||
|
CocoaSetKeyEquivalent();
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxMenuItem::SetCheckable(bool checkable)
|
void wxMenuItem::SetCheckable(bool checkable)
|
||||||
|
Reference in New Issue
Block a user