X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/96be256b3e1802de10f45953c41ed33bce399b54..6ba718d7aee2f519d9146b90424ccec9e2243479:/src/motif/menuitem.cpp diff --git a/src/motif/menuitem.cpp b/src/motif/menuitem.cpp index e2da6fa88a..afd2d75675 100644 --- a/src/motif/menuitem.cpp +++ b/src/motif/menuitem.cpp @@ -1,10 +1,9 @@ /////////////////////////////////////////////////////////////////////////////// -// Name: menuitem.cpp +// Name: src/motif/menuitem.cpp // Purpose: wxMenuItem implementation // Author: Julian Smart // Modified by: // Created: 17/09/98 -// RCS-ID: $Id$ // Copyright: (c) Julian Smart // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -13,10 +12,6 @@ // declarations // ============================================================================ -#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) - #pragma implementation "menuitem.h" -#endif - // ---------------------------------------------------------------------------- // headers // ---------------------------------------------------------------------------- @@ -24,12 +19,14 @@ // For compilers that support precompilation, includes "wx.h". #include "wx/wxprec.h" -#include "wx/defs.h" - -#include "wx/menu.h" #include "wx/menuitem.h" -#include "wx/utils.h" -#include "wx/frame.h" +#include "wx/stockitem.h" + +#ifndef WX_PRECOMP + #include "wx/utils.h" + #include "wx/frame.h" + #include "wx/menu.h" +#endif #ifdef __VMS__ #pragma message disable nosimpint @@ -65,8 +62,6 @@ static void wxMenuItemDisarmCallback(Widget w, XtPointer clientData, XtPointer p // dynamic classes implementation // ---------------------------------------------------------------------------- -IMPLEMENT_DYNAMIC_CLASS(wxMenuItem, wxObject) - // ---------------------------------------------------------------------------- // wxMenuItem // ---------------------------------------------------------------------------- @@ -138,12 +133,6 @@ void wxMenuItem::Check(bool bDoCheck) } } -/* static */ -wxString wxMenuItemBase::GetLabelFromText(const wxString& text) -{ - return wxStripMenuCodes(text); -} - // ---------------------------------------------------------------------------- // wxMenuItemBase // ---------------------------------------------------------------------------- @@ -162,7 +151,8 @@ wxMenuItem *wxMenuItemBase::New(wxMenu *parentMenu, // Motif-specific // ---------------------------------------------------------------------------- -void wxMenuItem::CreateItem (WXWidget menu, wxMenuBar * menuBar, wxMenu * topMenu) +void wxMenuItem::CreateItem (WXWidget menu, wxMenuBar * menuBar, + wxMenu * topMenu, size_t index) { m_menuBar = menuBar; m_topMenu = topMenu; @@ -174,19 +164,33 @@ void wxMenuItem::CreateItem (WXWidget menu, wxMenuBar * menuBar, wxMenu * topMen (wxStripMenuCodes(m_text), xmLabelGadgetClass, (Widget) menu, NULL); } - else if ((!m_text.IsNull() && m_text != "") && (!m_subMenu)) + else if (!IsSeparator() && !m_subMenu) { - wxString strName = wxStripMenuCodes(m_text); + wxString txt = m_text; + + if (m_text.IsEmpty()) + { + wxASSERT_MSG(wxIsStockID(GetId()), wxT("A non-stock menu item with an empty label?")); + txt = wxGetStockLabel(GetId(), wxSTOCK_WITH_ACCELERATOR|wxSTOCK_WITH_MNEMONIC); + } + + wxString strName = wxStripMenuCodes(txt); if (IsCheckable()) { m_buttonWidget = (WXWidget) XtVaCreateManagedWidget (strName, xmToggleButtonGadgetClass, (Widget) menu, +#ifdef XmNpositionIndex + XmNpositionIndex, index, +#endif NULL); XtVaSetValues ((Widget) m_buttonWidget, XmNset, (Boolean) IsChecked(), NULL); } else m_buttonWidget = (WXWidget) XtVaCreateManagedWidget (strName, xmPushButtonGadgetClass, (Widget) menu, +#ifdef XmNpositionIndex + XmNpositionIndex, index, +#endif NULL); char mnem = wxFindMnemonic (m_text); if (mnem != 0) @@ -226,14 +230,18 @@ void wxMenuItem::CreateItem (WXWidget menu, wxMenuBar * menuBar, wxMenu * topMen (XtCallbackProc) wxMenuItemDisarmCallback, (XtPointer) this); } - else if (GetId() == wxID_SEPARATOR) + else if (IsSeparator()) { m_buttonWidget = (WXWidget) XtVaCreateManagedWidget ("separator", - xmSeparatorGadgetClass, (Widget) menu, NULL); + xmSeparatorGadgetClass, (Widget) menu, +#ifndef XmNpositionIndex + XmNpositionIndex, index, +#endif + NULL); } else if (m_subMenu) { - m_buttonWidget = m_subMenu->CreateMenu (menuBar, menu, topMenu, m_text, true); + m_buttonWidget = m_subMenu->CreateMenu (menuBar, menu, topMenu, index, m_text, true); m_subMenu->SetButtonWidget(m_buttonWidget); XtAddCallback ((Widget) m_buttonWidget, XmNcascadingCallback, @@ -251,7 +259,7 @@ void wxMenuItem::DestroyItem(bool full) ; // Nothing } - else if ((!m_text.IsNull() && (m_text != "")) && !m_subMenu) + else if (!m_text.empty() && !m_subMenu) { if (m_buttonWidget) { @@ -267,7 +275,7 @@ void wxMenuItem::DestroyItem(bool full) wxMenuItemDisarmCallback, (XtPointer) this); } } - else if (GetId() == wxID_SEPARATOR) + else if (IsSeparator()) { ; // Nothing @@ -291,7 +299,7 @@ void wxMenuItem::DestroyItem(bool full) } } -void wxMenuItem::SetText(const wxString& label) +void wxMenuItem::SetItemLabel(const wxString& label) { char mnem = wxFindMnemonic (label); wxString label2 = wxStripMenuCodes(label); @@ -329,7 +337,7 @@ void wxMenuItemCallback (Widget WXUNUSED(w), XtPointer clientData, wxMenuItem *item = (wxMenuItem *) clientData; if (item) { - wxCommandEvent event(wxEVT_COMMAND_MENU_SELECTED, item->GetId()); + wxCommandEvent event(wxEVT_MENU, item->GetId()); event.SetInt( item->GetId() ); if (item->IsCheckable()) @@ -349,7 +357,7 @@ void wxMenuItemCallback (Widget WXUNUSED(w), XtPointer clientData, event.SetEventObject(item->GetMenuBar()->GetMenuBarFrame()); item->GetMenuBar()->GetMenuBarFrame() - ->GetEventHandler()->ProcessEvent(event); + ->HandleWindowEvent(event); } // this is the child of a popup menu else if (item->GetTopMenu()) @@ -381,7 +389,7 @@ void wxMenuItemArmCallback (Widget WXUNUSED(w), XtPointer clientData, menuEvent.SetEventObject(item->GetMenuBar()->GetMenuBarFrame()); item->GetMenuBar()->GetMenuBarFrame() - ->GetEventHandler()->ProcessEvent(menuEvent); + ->HandleWindowEvent(menuEvent); } } } @@ -401,8 +409,7 @@ wxMenuItemDisarmCallback (Widget WXUNUSED(w), XtPointer clientData, menuEvent.SetEventObject(item->GetMenuBar()->GetMenuBarFrame()); item->GetMenuBar()->GetMenuBarFrame() - ->GetEventHandler()->ProcessEvent(menuEvent); + ->HandleWindowEvent(menuEvent); } } } -