#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>
// ----------------------------------------------------------------------------
// the (popup) menu title has this special id
-static const int idMenuTitle = -3;
+static const UINT idMenuTitle = (UINT)-3;
// ----------------------------------------------------------------------------
// private functions
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)
// 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;
}
else {
- id = pItem->GetId();
+ id = pItem->GetMSWId();
}
}
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)
{
// 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 =
// if we just appended the title, highlight it
- if ( (int)id == idMenuTitle )
+ if ( id == idMenuTitle )
{
// visually select the menu title
SetDefaultMenuItem(GetHmenu(), id);
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
// ---------------------------------------------------------------------------
if ( !label.empty() )
{
if ( !::InsertMenu(hMenu, 0u, MF_BYPOSITION | MF_STRING,
- (unsigned)idMenuTitle, m_title.wx_str()) ||
+ idMenuTitle, m_title.wx_str()) ||
!::InsertMenu(hMenu, 1u, MF_BYPOSITION, (unsigned)-1, NULL) )
{
wxLogLastError(wxT("InsertMenu"));
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"));
#else
if ( !ModifyMenu(hMenu, 0u,
MF_BYPOSITION | MF_STRING,
- (unsigned)idMenuTitle, m_title.wx_str()) )
+ idMenuTitle, m_title.wx_str()) )
{
wxLogLastError(wxT("ModifyMenu"));
}
// put the title string in bold face
if ( !m_title.empty() )
{
- SetDefaultMenuItem(GetHmenu(), (UINT)idMenuTitle);
+ SetDefaultMenuItem(GetHmenu(), idMenuTitle);
}
#endif // Win32
}
// event processing
// ---------------------------------------------------------------------------
-bool wxMenu::MSWCommand(WXUINT WXUNUSED(param), WXWORD id)
+bool wxMenu::MSWCommand(WXUINT WXUNUSED(param), WXWORD id_)
{
+ const int id = (signed short)id_;
+
// ignore commands from the menu title
- if ( id != (WXWORD)idMenuTitle )
+ if ( id != (int)idMenuTitle )
{
// update the check item when it's clicked
wxMenuItem * const item = FindItem(id);
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;
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"));
int mswpos = MSWPositionForWxMenu(GetMenu(pos),pos);
- UINT id;
+ UINT_PTR id;
UINT flagsOld = ::GetMenuState((HMENU)m_hMenu, mswpos, MF_BYPOSITION);
if ( flagsOld == 0xFFFFFFFF )
{
{
// 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
{
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"));
}
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"));
}
#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"));
}
}
#else
if ( !::AppendMenu(GetHmenu(), MF_POPUP | MF_STRING,
- (UINT)submenu, title.wx_str()) )
+ (UINT_PTR)submenu, title.wx_str()) )
{
wxLogLastError(wxT("AppendMenu"));
}
nAccelCount += (*it)->CopyAccels(&accelEntries[nAccelCount]);
}
- m_accelTable = wxAcceleratorTable(nAccelCount, accelEntries);
+ SetAcceleratorTable(wxAcceleratorTable(nAccelCount, accelEntries));
delete [] accelEntries;
}