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:
David Elliott
2004-10-20 19:18:46 +00:00
parent c87beb79f2
commit 1e85b547a5
2 changed files with 42 additions and 0 deletions

View File

@@ -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;

View File

@@ -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)