X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/dca0f651782d5c2659203c97b3243f613966998d..3cfde7c049bddf6fd3b4c2e35a6b8ecdcdc1d74f:/src/msw/menu.cpp?ds=sidebyside diff --git a/src/msw/menu.cpp b/src/msw/menu.cpp index 8ebd4952da..32676538ba 100644 --- a/src/msw/menu.cpp +++ b/src/msw/menu.cpp @@ -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" @@ -40,7 +39,10 @@ #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) @@ -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; @@ -1079,7 +1091,7 @@ 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()); + info.dwTypeData = const_cast<wxChar *>(label.wx_str()); if ( !SetMenuItemInfo(GetHmenu(), id, TRUE, &info) ) { wxLogLastError(wxT("SetMenuItemInfo")); @@ -1346,7 +1358,7 @@ void wxMenuBar::RebuildAccelTable() nAccelCount += (*it)->CopyAccels(&accelEntries[nAccelCount]); } - m_accelTable = wxAcceleratorTable(nAccelCount, accelEntries); + SetAcceleratorTable(wxAcceleratorTable(nAccelCount, accelEntries)); delete [] accelEntries; }