X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/f4322df68b099e5e983acc0a3dad4ad5841b57b5..9d5507f7a2701395e1d5c121bd877bb9066ee6ea:/src/msw/menu.cpp diff --git a/src/msw/menu.cpp b/src/msw/menu.cpp index 3194257990..4c4383e467 100644 --- a/src/msw/menu.cpp +++ b/src/msw/menu.cpp @@ -97,7 +97,7 @@ typedef struct tagMENUINFO // ---------------------------------------------------------------------------- // the (popup) menu title has this special id -static const int idMenuTitle = -3; +static const UINT idMenuTitle = (UINT)-3; // ---------------------------------------------------------------------------- // private functions @@ -227,7 +227,7 @@ const wxMenuInfoList& wxMenuBar::GetMenuInfos() const for( size_t i = 0 ; i < GetMenuCount() ; ++i ) { wxMenuInfo* info = new wxMenuInfo() ; - info->Create( const_cast(this)->GetMenu(i) , GetLabelTop(i) ) ; + info->Create( const_cast(this)->GetMenu(i) , GetMenuLabel(i) ) ; list->Append( info ) ; } return m_menuInfos ; @@ -331,7 +331,7 @@ void wxMenu::UpdateAccel(wxMenuItem *item) } // find the (new) accel for this item - wxAcceleratorEntry *accel = wxAcceleratorEntry::Create(item->GetText()); + wxAcceleratorEntry *accel = wxAcceleratorEntry::Create(item->GetItemLabel()); if ( accel ) accel->m_command = item->GetId(); @@ -399,12 +399,12 @@ bool wxMenu::DoInsertOrAppend(wxMenuItem *pItem, size_t pos) flags |= MF_POPUP; } else { - id = pItem->GetId(); + id = pItem->GetMSWId(); } // prepare to insert the item in the menu - wxString itemText = pItem->GetText(); + wxString itemText = pItem->GetItemLabel(); LPCTSTR pData = NULL; if ( pos == (size_t)-1 ) { @@ -468,7 +468,7 @@ bool wxMenu::DoInsertOrAppend(wxMenuItem *pItem, size_t pos) } mii.cch = itemText.length(); - mii.dwTypeData = wx_const_cast(wxChar *, itemText.c_str()); + mii.dwTypeData = wx_const_cast(wxChar *, itemText.wx_str()); if (flags & MF_POPUP) { @@ -545,10 +545,10 @@ bool wxMenu::DoInsertOrAppend(wxMenuItem *pItem, size_t pos) flags |= MF_STRING; #ifdef __WXWINCE__ - itemText = wxMenuItem::GetLabelFromText(itemText); + itemText = wxMenuItem::GetLabelText(itemText); #endif - pData = (wxChar*)itemText.c_str(); + pData = (wxChar*)itemText.wx_str(); } // item might have already been inserted by InsertMenuItem() above @@ -564,7 +564,7 @@ bool wxMenu::DoInsertOrAppend(wxMenuItem *pItem, size_t pos) // if we just appended the title, highlight it - if ( (int)id == idMenuTitle ) + if ( id == idMenuTitle ) { // visually select the menu title SetDefaultMenuItem(GetHmenu(), id); @@ -731,7 +731,7 @@ void wxMenu::SetTitle(const wxString& label) if ( !label.empty() ) { if ( !::InsertMenu(hMenu, 0u, MF_BYPOSITION | MF_STRING, - (unsigned)idMenuTitle, m_title) || + idMenuTitle, m_title.wx_str()) || !::InsertMenu(hMenu, 1u, MF_BYPOSITION, (unsigned)-1, NULL) ) { wxLogLastError(wxT("InsertMenu")); @@ -759,7 +759,7 @@ void wxMenu::SetTitle(const wxString& label) info.fMask = MIIM_TYPE; info.fType = MFT_STRING; info.cch = m_title.length(); - info.dwTypeData = (LPTSTR) m_title.c_str(); + info.dwTypeData = wx_const_cast(wxChar *, m_title.wx_str()); if ( !SetMenuItemInfo(hMenu, 0, TRUE, & info) ) { wxLogLastError(wxT("SetMenuItemInfo")); @@ -767,7 +767,7 @@ void wxMenu::SetTitle(const wxString& label) #else if ( !ModifyMenu(hMenu, 0u, MF_BYPOSITION | MF_STRING, - (unsigned)idMenuTitle, m_title) ) + idMenuTitle, m_title.wx_str()) ) { wxLogLastError(wxT("ModifyMenu")); } @@ -779,7 +779,7 @@ void wxMenu::SetTitle(const wxString& label) // put the title string in bold face if ( !m_title.empty() ) { - SetDefaultMenuItem(GetHmenu(), (UINT)idMenuTitle); + SetDefaultMenuItem(GetHmenu(), idMenuTitle); } #endif // Win32 } @@ -788,20 +788,22 @@ void wxMenu::SetTitle(const wxString& label) // 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 != idMenuTitle ) { // update the check item when it's clicked wxMenuItem * const item = FindItem(id); if ( item && item->IsCheckable() ) item->Toggle(); - // get the checked status of the menu item: note that menuState is the - // old state of the menu, so the test for MF_CHECKED must be inverted + // get the status of the menu item: note that it has been just changed + // by Toggle() above so here we already get the new state of the item UINT menuState = ::GetMenuState(GetHmenu(), id, MF_BYCOMMAND); - SendEvent(id, !(menuState & MF_CHECKED)); + SendEvent(id, menuState & MF_CHECKED); } return true; @@ -927,41 +929,41 @@ WXHMENU wxMenuBar::Create() if ( m_hMenu != 0 ) return m_hMenu; - if (!GetToolBar()) - return 0; + wxToolMenuBar * const bar = wx_static_cast(wxToolMenuBar *, GetToolBar()); + if ( !bar ) + return NULL; - HWND hCommandBar = (HWND) GetToolBar()->GetHWND(); - HMENU hMenu = (HMENU)::SendMessage(hCommandBar, SHCMBM_GETMENU, (WPARAM)0, (LPARAM)0); + HWND hCommandBar = GetHwndOf(bar); - // hMenu may be zero on Windows Mobile 5. So add the menus anyway. - if (1) // (hMenu) - { - TBBUTTON tbButton; - memset(&tbButton, 0, sizeof(TBBUTTON)); - tbButton.iBitmap = I_IMAGENONE; - tbButton.fsState = TBSTATE_ENABLED; - tbButton.fsStyle = TBSTYLE_DROPDOWN | TBSTYLE_NO_DROPDOWN_ARROW | TBSTYLE_AUTOSIZE; + // notify comctl32.dll about the version of the headers we use before using + // any other TB_XXX messages + SendMessage(hCommandBar, TB_BUTTONSTRUCTSIZE, sizeof(TBBUTTON), 0); - size_t i; - for (i = 0; i < GetMenuCount(); i++) - { - HMENU hPopupMenu = (HMENU) GetMenu(i)->GetHMenu() ; - tbButton.dwData = (DWORD)hPopupMenu; - wxString label = wxStripMenuCodes(GetLabelTop(i)); - tbButton.iString = (int) label.c_str(); + TBBUTTON tbButton; + wxZeroMemory(tbButton); + tbButton.iBitmap = I_IMAGENONE; + tbButton.fsState = TBSTATE_ENABLED; + tbButton.fsStyle = TBSTYLE_DROPDOWN | + TBSTYLE_NO_DROPDOWN_ARROW | + TBSTYLE_AUTOSIZE; - int position = i; + for ( unsigned i = 0; i < GetMenuCount(); i++ ) + { + HMENU hPopupMenu = (HMENU) GetMenu(i)->GetHMenu(); + tbButton.dwData = (DWORD)hPopupMenu; + wxString label = wxStripMenuCodes(GetMenuLabel(i)); + tbButton.iString = (int) label.wx_str(); - tbButton.idCommand = NewControlId(); - if (!::SendMessage(hCommandBar, TB_INSERTBUTTON, position, (LPARAM)&tbButton)) - { - wxLogLastError(wxT("TB_INSERTBUTTON")); - } + tbButton.idCommand = NewControlId(); + if ( !::SendMessage(hCommandBar, TB_INSERTBUTTON, i, (LPARAM)&tbButton) ) + { + wxLogLastError(wxT("TB_INSERTBUTTON")); } } - m_hMenu = (WXHMENU) hMenu; + + m_hMenu = bar->GetHMenu(); return m_hMenu; -#else +#else // !__WXWINCE__ if ( m_hMenu != 0 ) return m_hMenu; @@ -979,7 +981,7 @@ WXHMENU wxMenuBar::Create() { if ( !::AppendMenu((HMENU)m_hMenu, MF_POPUP | MF_STRING, (UINT)(*it)->GetHMenu(), - m_titles[i]) ) + m_titles[i].wx_str()) ) { wxLogLastError(wxT("AppendMenu")); } @@ -987,7 +989,7 @@ WXHMENU wxMenuBar::Create() } return m_hMenu; -#endif +#endif // __WXWINCE__/!__WXWINCE__ } int wxMenuBar::MSWPositionForWxMenu(wxMenu *menu, int wxpos) @@ -1036,7 +1038,7 @@ void wxMenuBar::EnableTop(size_t pos, bool enable) Refresh(); } -void wxMenuBar::SetLabelTop(size_t pos, const wxString& label) +void wxMenuBar::SetMenuLabel(size_t pos, const wxString& label) { wxCHECK_RET( pos < GetMenuCount(), wxT("invalid menu index") ); @@ -1077,7 +1079,7 @@ void wxMenuBar::SetLabelTop(size_t pos, const wxString& label) info.fMask = MIIM_TYPE; info.fType = MFT_STRING; info.cch = label.length(); - info.dwTypeData = (LPTSTR) label.c_str(); + info.dwTypeData = wx_const_cast(wxChar *, label.wx_str()); if ( !SetMenuItemInfo(GetHmenu(), id, TRUE, & info) ) { wxLogLastError(wxT("SetMenuItemInfo")); @@ -1085,7 +1087,7 @@ void wxMenuBar::SetLabelTop(size_t pos, const wxString& label) #else if ( ::ModifyMenu(GetHmenu(), mswpos, MF_BYPOSITION | MF_STRING | flagsOld, - id, label) == (int)0xFFFFFFFF ) + id, label.wx_str()) == (int)0xFFFFFFFF ) { wxLogLastError(wxT("ModifyMenu")); } @@ -1094,12 +1096,12 @@ void wxMenuBar::SetLabelTop(size_t pos, const wxString& label) Refresh(); } -wxString wxMenuBar::GetLabelTop(size_t pos) const +wxString wxMenuBar::GetMenuLabel(size_t pos) const { wxCHECK_MSG( pos < GetMenuCount(), wxEmptyString, - wxT("invalid menu index in wxMenuBar::GetLabelTop") ); + wxT("invalid menu index in wxMenuBar::GetMenuLabel") ); - return wxMenuItem::GetLabelFromText(m_titles[pos]); + return m_titles[pos]; } // --------------------------------------------------------------------------- @@ -1130,7 +1132,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) ) + (UINT)GetHmenuOf(menu), title.wx_str()) ) { wxLogLastError(wxT("InsertMenu")); } @@ -1185,7 +1187,7 @@ bool wxMenuBar::Insert(size_t pos, wxMenu *menu, const wxString& title) HMENU hPopupMenu = (HMENU) menu->GetHMenu() ; tbButton.dwData = (DWORD)hPopupMenu; wxString label = wxStripMenuCodes(title); - tbButton.iString = (int) label.c_str(); + tbButton.iString = (int) label.wx_str(); tbButton.idCommand = NewControlId(); if (!::SendMessage((HWND) GetToolBar()->GetHWND(), TB_INSERTBUTTON, pos, (LPARAM)&tbButton)) @@ -1197,7 +1199,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) ) + (UINT)GetHmenuOf(menu), title.wx_str()) ) { wxLogLastError(wxT("InsertMenu")); } @@ -1246,7 +1248,7 @@ bool wxMenuBar::Append(wxMenu *menu, const wxString& title) HMENU hPopupMenu = (HMENU) menu->GetHMenu() ; tbButton.dwData = (DWORD)hPopupMenu; wxString label = wxStripMenuCodes(title); - tbButton.iString = (int) label.c_str(); + tbButton.iString = (int) label.wx_str(); tbButton.idCommand = NewControlId(); if (!::SendMessage((HWND) GetToolBar()->GetHWND(), TB_INSERTBUTTON, pos, (LPARAM)&tbButton)) @@ -1256,7 +1258,7 @@ bool wxMenuBar::Append(wxMenu *menu, const wxString& title) } #else if ( !::AppendMenu(GetHmenu(), MF_POPUP | MF_STRING, - (UINT)submenu, title) ) + (UINT)submenu, title.wx_str()) ) { wxLogLastError(wxT("AppendMenu")); }