]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/menucmn.cpp
fix Alt-letter navigation with spin controls (bug 672974)
[wxWidgets.git] / src / common / menucmn.cpp
index 1f2b9fcbb7bbd8a255083a51229aff9f385ab780..5574a19cbb086de28941fffd9ce3845113b88bf2 100644 (file)
@@ -6,7 +6,7 @@
 // Created:     26.10.99
 // RCS-ID:      $Id$
 // Copyright:   (c) wxWindows team
-// Licence:     wxWindows license
+// Licence:     wxWindows licence
 ///////////////////////////////////////////////////////////////////////////////
 
 // ============================================================================
@@ -55,6 +55,25 @@ WX_DEFINE_LIST(wxMenuItemList);
 // wxMenuItem
 // ----------------------------------------------------------------------------
 
+wxMenuItemBase::wxMenuItemBase(wxMenu *parentMenu,
+                               int id,
+                               const wxString& text,
+                               const wxString& help,
+                               wxItemKind kind,
+                               wxMenu *subMenu)
+              : m_text(text),
+                m_help(help)
+{
+    wxASSERT_MSG( parentMenu != NULL, wxT("menuitem should have a menu") );
+
+    m_parentMenu  = parentMenu;
+    m_subMenu     = subMenu;
+    m_isEnabled   = TRUE;
+    m_isChecked   = FALSE;
+    m_id          = id;
+    m_kind        = kind;
+}
+
 wxMenuItemBase::~wxMenuItemBase()
 {
     delete m_subMenu;
@@ -113,7 +132,13 @@ wxAcceleratorEntry *wxGetAccelFromString(const wxString& label)
         else {
             if ( current.Len() == 1 ) {
                 // it's a letter
-                keyCode = wxToupper(current[0U]);
+                keyCode = current[0U];
+
+                // Only call wxToupper if control, alt, or shift is held down,
+                // otherwise lower case accelerators won't work.
+                if (accelFlags != wxACCEL_NORMAL) {
+                    keyCode = wxToupper(keyCode);
+                }
             }
             else {
                 // is it a function key?
@@ -140,14 +165,39 @@ wxAcceleratorEntry *wxGetAccelFromString(const wxString& label)
                     else if ( current == wxT("INSERT") ) {
                         keyCode = WXK_INSERT;
                     }
-#if 0
+                    else if ( current == wxT("ENTER") || current == wxT("RETURN") ) {
+                        keyCode = WXK_RETURN;
+                    }
                     else if ( current == wxT("PGUP") ) {
-                        keyCode = VK_PRIOR;
+                        keyCode = WXK_PRIOR;
                     }
                     else if ( current == wxT("PGDN") ) {
-                        keyCode = VK_NEXT;
+                        keyCode = WXK_NEXT;
+                    }
+                    else if ( current == wxT("LEFT") ) {
+                        keyCode = WXK_LEFT;
+                    }
+                    else if ( current == wxT("RIGHT") ) {
+                        keyCode = WXK_RIGHT;
+                    }
+                    else if ( current == wxT("UP") ) {
+                        keyCode = WXK_UP;
+                    }
+                    else if ( current == wxT("DOWN") ) {
+                        keyCode = WXK_DOWN;
+                    }
+                    else if ( current == wxT("HOME") ) {
+                        keyCode = WXK_HOME;
+                    }
+                    else if ( current == wxT("END") ) {
+                        keyCode = WXK_END;
+                    }
+                    else if ( current == wxT("SPACE") ) {
+                        keyCode = WXK_SPACE;
+                    }
+                    else if ( current == wxT("TAB") ) {
+                        keyCode = WXK_TAB;
                     }
-#endif
                     else
                     {
                         wxLogDebug(wxT("Unrecognized accel key '%s', accel string ignored."),
@@ -770,7 +820,7 @@ int wxMenuBarBase::FindMenu(const wxString& title) const
              (wxMenuItem::GetLabelFromText(title2) == label) )
         {
             // found
-            return (int)i; 
+            return (int)i;
         }
     }