]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/menucmn.cpp
compilation fix
[wxWidgets.git] / src / common / menucmn.cpp
index 5574a19cbb086de28941fffd9ce3845113b88bf2..5e9ea0f289ebca4f233ed53186fcb20cf7cc297b 100644 (file)
@@ -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
 // ----------------------------------------------------------------------------