]> git.saurik.com Git - wxWidgets.git/blobdiff - src/msw/menu.cpp
Fixed wxPropertyGridManager::CreatePropertyGrid(), corrected documentation about...
[wxWidgets.git] / src / msw / menu.cpp
index 2daee69f0124f958b424fc0cc828bf064438a469..32676538ba3a4255ed265144fd90a7b5d5b342e7 100644 (file)
@@ -29,7 +29,6 @@
 #include "wx/menu.h"
 
 #ifndef WX_PRECOMP
-    #include "wx/msw/wrapcctl.h" // include <commctrl.h> "properly"
     #include "wx/frame.h"
     #include "wx/utils.h"
     #include "wx/intl.h"
     #include "wx/ownerdrw.h"
 #endif
 
+#include "wx/ptr_scpd.h"
+
 #include "wx/msw/private.h"
+#include "wx/msw/wrapcctl.h" // include <commctrl.h> "properly"
 
 #ifdef __WXWINCE__
 #include <windows.h>
@@ -372,7 +374,8 @@ bool wxMenu::DoInsertOrAppend(wxMenuItem *pItem, size_t pos)
     UpdateAccel(pItem);
 #endif // wxUSE_ACCEL
 
-    UINT flags = 0;
+    // we should support disabling the item even prior to adding it to the menu
+    UINT flags = pItem->IsEnabled() ? MF_ENABLED : MF_GRAYED;
 
     // if "Break" has just been called, insert a menu break before this item
     // (and don't forget to reset the flag)
@@ -387,14 +390,14 @@ bool wxMenu::DoInsertOrAppend(wxMenuItem *pItem, size_t pos)
 
     // id is the numeric id for normal menu items and HMENU for submenus as
     // required by ::AppendMenu() API
-    UINT id;
+    UINT_PTR id;
     wxMenu *submenu = pItem->GetSubMenu();
     if ( submenu != NULL ) {
         wxASSERT_MSG( submenu->GetHMenu(), wxT("invalid submenu") );
 
         submenu->SetParent(this);
 
-        id = (UINT)submenu->GetHMenu();
+        id = (UINT_PTR)submenu->GetHMenu();
 
         flags |= MF_POPUP;
     }
@@ -468,7 +471,7 @@ bool wxMenu::DoInsertOrAppend(wxMenuItem *pItem, size_t pos)
                 }
 
                 mii.cch = itemText.length();
-                mii.dwTypeData = wx_const_cast(wxChar *, itemText.wx_str());
+                mii.dwTypeData = const_cast<wxChar *>(itemText.wx_str());
 
                 if (flags & MF_POPUP)
                 {
@@ -488,7 +491,7 @@ bool wxMenu::DoInsertOrAppend(wxMenuItem *pItem, size_t pos)
                 //     item and this looks downright ugly
                 //
                 // so instead draw it ourselves in MSWOnDrawItem()
-                mii.dwItemData = wx_reinterpret_cast(ULONG_PTR, pItem);
+                mii.dwItemData = reinterpret_cast<ULONG_PTR>(pItem);
                 if ( pItem->IsCheckable() )
                 {
                     mii.hbmpChecked =
@@ -713,6 +716,15 @@ size_t wxMenu::CopyAccels(wxAcceleratorEntry *accels) const
     return count;
 }
 
+wxAcceleratorTable *wxMenu::CreateAccelTable() const
+{
+    const size_t count = m_accels.size();
+    wxScopedArray<wxAcceleratorEntry> accels(new wxAcceleratorEntry[count]);
+    CopyAccels(accels.get());
+
+    return new wxAcceleratorTable(count, accels.get());
+}
+
 #endif // wxUSE_ACCEL
 
 // ---------------------------------------------------------------------------
@@ -759,7 +771,7 @@ void wxMenu::SetTitle(const wxString& label)
             info.fMask = MIIM_TYPE;
             info.fType = MFT_STRING;
             info.cch = m_title.length();
-            info.dwTypeData = wx_const_cast(wxChar *, m_title.wx_str());
+            info.dwTypeData = const_cast<wxChar *>(m_title.wx_str());
             if ( !SetMenuItemInfo(hMenu, 0, TRUE, & info) )
             {
                 wxLogLastError(wxT("SetMenuItemInfo"));
@@ -929,7 +941,7 @@ WXHMENU wxMenuBar::Create()
     if ( m_hMenu != 0 )
         return m_hMenu;
 
-    wxToolMenuBar * const bar = wx_static_cast(wxToolMenuBar *, GetToolBar());
+    wxToolMenuBar * const bar = static_cast<wxToolMenuBar *>(GetToolBar());
     if ( !bar )
         return NULL;
 
@@ -980,7 +992,7 @@ WXHMENU wxMenuBar::Create()
         for ( i = 0, it = m_menus.begin(); i < count; i++, it++ )
         {
             if ( !::AppendMenu((HMENU)m_hMenu, MF_POPUP | MF_STRING,
-                               (UINT)(*it)->GetHMenu(),
+                               (UINT_PTR)(*it)->GetHMenu(),
                                m_titles[i].wx_str()) )
             {
                 wxLogLastError(wxT("AppendMenu"));
@@ -1052,7 +1064,7 @@ void wxMenuBar::SetMenuLabel(size_t pos, const wxString& label)
 
     int mswpos = MSWPositionForWxMenu(GetMenu(pos),pos);
 
-    UINT id;
+    UINT_PTR id;
     UINT flagsOld = ::GetMenuState((HMENU)m_hMenu, mswpos, MF_BYPOSITION);
     if ( flagsOld == 0xFFFFFFFF )
     {
@@ -1065,7 +1077,7 @@ void wxMenuBar::SetMenuLabel(size_t pos, const wxString& label)
     {
         // HIBYTE contains the number of items in the submenu in this case
         flagsOld &= 0xff;
-        id = (UINT)::GetSubMenu((HMENU)m_hMenu, mswpos);
+        id = (UINT_PTR)::GetSubMenu((HMENU)m_hMenu, mswpos);
     }
     else
     {
@@ -1079,8 +1091,8 @@ void wxMenuBar::SetMenuLabel(size_t pos, const wxString& label)
     info.fMask = MIIM_TYPE;
     info.fType = MFT_STRING;
     info.cch = label.length();
-    info.dwTypeData = wx_const_cast(wxChar *, label.wx_str());
-    if ( !SetMenuItemInfo(GetHmenu(), id, TRUE, & info) )
+    info.dwTypeData = const_cast<wxChar *>(label.wx_str());
+    if ( !SetMenuItemInfo(GetHmenu(), id, TRUE, &info) )
     {
         wxLogLastError(wxT("SetMenuItemInfo"));
     }
@@ -1132,7 +1144,7 @@ wxMenu *wxMenuBar::Replace(size_t pos, wxMenu *menu, const wxString& title)
 
         if ( !::InsertMenu(GetHmenu(), (UINT)mswpos,
                            MF_BYPOSITION | MF_POPUP | MF_STRING,
-                           (UINT)GetHmenuOf(menu), title.wx_str()) )
+                           (UINT_PTR)GetHmenuOf(menu), title.wx_str()) )
         {
             wxLogLastError(wxT("InsertMenu"));
         }
@@ -1199,7 +1211,7 @@ bool wxMenuBar::Insert(size_t pos, wxMenu *menu, const wxString& title)
 #else
         if ( !::InsertMenu(GetHmenu(), mswpos,
                            MF_BYPOSITION | MF_POPUP | MF_STRING,
-                           (UINT)GetHmenuOf(menu), title.wx_str()) )
+                           (UINT_PTR)GetHmenuOf(menu), title.wx_str()) )
         {
             wxLogLastError(wxT("InsertMenu"));
         }
@@ -1258,7 +1270,7 @@ bool wxMenuBar::Append(wxMenu *menu, const wxString& title)
         }
 #else
         if ( !::AppendMenu(GetHmenu(), MF_POPUP | MF_STRING,
-                           (UINT)submenu, title.wx_str()) )
+                           (UINT_PTR)submenu, title.wx_str()) )
         {
             wxLogLastError(wxT("AppendMenu"));
         }
@@ -1346,7 +1358,7 @@ void wxMenuBar::RebuildAccelTable()
             nAccelCount += (*it)->CopyAccels(&accelEntries[nAccelCount]);
         }
 
-        m_accelTable = wxAcceleratorTable(nAccelCount, accelEntries);
+        SetAcceleratorTable(wxAcceleratorTable(nAccelCount, accelEntries));
 
         delete [] accelEntries;
     }