X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/55d99c7a77789ff4904bf96eddca3715eb5af9b9..c15d9c859c64f28c56d1e61b7d031a74e6018583:/src/common/menucmn.cpp diff --git a/src/common/menucmn.cpp b/src/common/menucmn.cpp index 5574a19cbb..5e9ea0f289 100644 --- a/src/common/menucmn.cpp +++ b/src/common/menucmn.cpp @@ -81,6 +81,15 @@ wxMenuItemBase::~wxMenuItemBase() #if wxUSE_ACCEL +static inline bool CompareAccelString(const wxString& str, const wxChar *accel) +{ +#if wxUSE_INTL + return str == accel || str == wxGetTranslation(accel); +#else + return str == accel; +#endif +} + // return wxAcceleratorEntry for the given menu string or NULL if none // specified wxAcceleratorEntry *wxGetAccelFromString(const wxString& label) @@ -94,11 +103,11 @@ wxAcceleratorEntry *wxGetAccelFromString(const wxString& label) wxString current; for ( size_t n = (size_t)posTab + 1; n < label.Len(); n++ ) { if ( (label[n] == '+') || (label[n] == '-') ) { - if ( current == _("ctrl") ) + if ( CompareAccelString(current, wxTRANSLATE("ctrl")) ) accelFlags |= wxACCEL_CTRL; - else if ( current == _("alt") ) + else if ( CompareAccelString(current, wxTRANSLATE("alt")) ) accelFlags |= wxACCEL_ALT; - else if ( current == _("shift") ) + else if ( CompareAccelString(current, wxTRANSLATE("shift")) ) accelFlags |= wxACCEL_SHIFT; else { // we may have "Ctrl-+", for example, but we still want to @@ -153,51 +162,38 @@ wxAcceleratorEntry *wxGetAccelFromString(const wxString& label) else { // several special cases current.MakeUpper(); - if ( current == wxT("DEL") ) { + if ( current == wxT("DEL") ) keyCode = WXK_DELETE; - } - else if ( current == wxT("DELETE") ) { + else if ( current == wxT("DELETE") ) keyCode = WXK_DELETE; - } - else if ( current == wxT("INS") ) { + else if ( current == wxT("INS") ) keyCode = WXK_INSERT; - } - else if ( current == wxT("INSERT") ) { + else if ( current == wxT("INSERT") ) keyCode = WXK_INSERT; - } - else if ( current == wxT("ENTER") || current == wxT("RETURN") ) { + else if ( current == wxT("ENTER") || current == wxT("RETURN") ) keyCode = WXK_RETURN; - } - else if ( current == wxT("PGUP") ) { + else if ( current == wxT("PGUP") ) keyCode = WXK_PRIOR; - } - else if ( current == wxT("PGDN") ) { + else if ( current == wxT("PGDN") ) keyCode = WXK_NEXT; - } - else if ( current == wxT("LEFT") ) { + else if ( current == wxT("LEFT") ) keyCode = WXK_LEFT; - } - else if ( current == wxT("RIGHT") ) { + else if ( current == wxT("RIGHT") ) keyCode = WXK_RIGHT; - } - else if ( current == wxT("UP") ) { + else if ( current == wxT("UP") ) keyCode = WXK_UP; - } - else if ( current == wxT("DOWN") ) { + else if ( current == wxT("DOWN") ) keyCode = WXK_DOWN; - } - else if ( current == wxT("HOME") ) { + else if ( current == wxT("HOME") ) keyCode = WXK_HOME; - } - else if ( current == wxT("END") ) { + else if ( current == wxT("END") ) keyCode = WXK_END; - } - else if ( current == wxT("SPACE") ) { + else if ( current == wxT("SPACE") ) keyCode = WXK_SPACE; - } - else if ( current == wxT("TAB") ) { + else if ( current == wxT("TAB") ) keyCode = WXK_TAB; - } + else if ( current == wxT("ESC") || current == wxT("ESCAPE") ) + keyCode = WXK_ESCAPE; else { wxLogDebug(wxT("Unrecognized accel key '%s', accel string ignored."), @@ -323,6 +319,7 @@ bool wxMenuBase::DoAppend(wxMenuItem *item) wxCHECK_MSG( item, FALSE, wxT("invalid item in wxMenu::Append()") ); m_items.Append(item); + item->SetMenu((wxMenu*)this); if ( item->IsSubMenu() ) { AddSubMenu(item->GetSubMenu()); @@ -356,6 +353,7 @@ bool wxMenuBase::DoInsert(size_t pos, wxMenuItem *item) wxCHECK_MSG( node, FALSE, wxT("invalid index in wxMenu::Insert()") ); m_items.Insert(node, item); + item->SetMenu((wxMenu*)this); if ( item->IsSubMenu() ) { AddSubMenu(item->GetSubMenu()); @@ -384,6 +382,7 @@ wxMenuItem *wxMenuBase::DoRemove(wxMenuItem *item) m_items.DeleteNode(node); // item isn't attached to anything any more + item->SetMenu((wxMenu *)NULL); wxMenu *submenu = item->GetSubMenu(); if ( submenu ) { @@ -521,6 +520,15 @@ wxMenuItem *wxMenuBase::FindChildItem(int id, size_t *ppos) const return item; } +// find by position +wxMenuItem* wxMenuBase::FindItemByPosition(size_t position) const +{ + wxCHECK_MSG( position < m_items.GetCount(), NULL, + _T("wxMenu::FindItemByPosition(): invalid menu index") ); + + return m_items.Item( position )->GetData(); +} + // ---------------------------------------------------------------------------- // wxMenu helpers used by derived classes // ----------------------------------------------------------------------------