X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/105fbe1ffa8968cb85fd2cac7192957e522d17ba..74a8f67d96591cec101def2a7d47c64072aff7fd:/src/motif/menu.cpp diff --git a/src/motif/menu.cpp b/src/motif/menu.cpp index 00637cc3b8..02ada167a3 100644 --- a/src/motif/menu.cpp +++ b/src/motif/menu.cpp @@ -33,8 +33,6 @@ #ifdef __VMS__ #pragma message disable nosimpint -#define XtDisplay XTDISPLAY -#define XtWindow XTWINDOW #endif #include #include @@ -54,9 +52,6 @@ // other standard headers #include -IMPLEMENT_DYNAMIC_CLASS(wxMenu, wxEvtHandler) -IMPLEMENT_DYNAMIC_CLASS(wxMenuBar, wxEvtHandler) - // ============================================================================ // implementation // ============================================================================ @@ -74,7 +69,7 @@ void wxMenu::Init() m_popupShell = (WXWidget) NULL; m_buttonWidget = (WXWidget) NULL; m_menuId = 0; - m_topLevelMenu = (wxMenu*) NULL; + m_topLevelMenu = NULL; m_ownedByMenuBar = false; if ( !m_title.empty() ) @@ -162,17 +157,14 @@ void wxMenu::SetTitle(const wxString& label) bool wxMenu::ProcessCommand(wxCommandEvent & event) { - bool processed = false; + // Try the menu's event handler first + wxEvtHandler * const handler = GetEventHandler(); + bool processed = handler ? handler->SafelyProcessEvent(event) : false; - // Try the menu's event handler - if ( !processed && GetEventHandler()) - { - processed = GetEventHandler()->ProcessEvent(event); - } // Try the window the menu was popped up from (and up // through the hierarchy) if ( !processed && GetInvokingWindow()) - processed = GetInvokingWindow()->ProcessEvent(event); + processed = GetInvokingWindow()->HandleWindowEvent(event); return processed; } @@ -221,7 +213,7 @@ void wxMenuBar::EnableTop(size_t WXUNUSED(pos), bool WXUNUSED(flag)) // wxLogWarning("wxMenuBar::EnableTop not yet implemented."); } -void wxMenuBar::SetLabelTop(size_t pos, const wxString& label) +void wxMenuBar::SetMenuLabel(size_t pos, const wxString& label) { wxMenu *menu = GetMenu(pos); if ( !menu ) @@ -236,26 +228,14 @@ void wxMenuBar::SetLabelTop(size_t pos, const wxString& label) XmNlabelString, label_str(), NULL); } + m_titles[pos] = label; } -wxString wxMenuBar::GetLabelTop(size_t pos) const +wxString wxMenuBar::GetMenuLabel(size_t pos) const { - wxMenu *menu = GetMenu(pos); - if ( menu ) - { - Widget w = (Widget)menu->GetButtonWidget(); - if (w) - { - XmString text; - XtVaGetValues(w, - XmNlabelString, &text, - NULL); - - return wxXmStringToString( text ); - } - } - - return wxEmptyString; + wxCHECK_MSG( pos < GetMenuCount(), wxEmptyString, + wxT("invalid menu index in wxMenuBar::GetMenuLabel") ); + return m_titles[pos]; } bool wxMenuBar::Append(wxMenu * menu, const wxString& title) @@ -381,8 +361,8 @@ bool wxMenuBar::CreateMenuBar(wxFrame* parent) Widget tearOff = XmGetTearOffControl(GetWidget(menu)); wxDoChangeForegroundColour((Widget) tearOff, m_foregroundColour); wxDoChangeBackgroundColour((Widget) tearOff, m_backgroundColour, true); -#endif } +#endif } PostCreation(); @@ -400,7 +380,7 @@ bool wxMenuBar::DestroyMenuBar() { if (!m_mainWidget) { - SetMenuBarFrame((wxFrame*) NULL); + SetMenuBarFrame(NULL); return false; } @@ -417,7 +397,7 @@ bool wxMenuBar::DestroyMenuBar() XtDestroyWidget((Widget) m_mainWidget); m_mainWidget = (WXWidget) 0; - SetMenuBarFrame((wxFrame*) NULL); + SetMenuBarFrame(NULL); return true; } @@ -463,7 +443,7 @@ void wxMenu::DestroyWidgetAndDetach() WXWidget wxMenu::CreateMenu (wxMenuBar * menuBar, WXWidget parent, wxMenu * topMenu, - size_t WXUNUSED(index), + size_t menuIndex, const wxString& title, bool pullDown) { @@ -474,7 +454,7 @@ WXWidget wxMenu::CreateMenu (wxMenuBar * menuBar, XtSetArg (args[0], XmNnumColumns, m_numColumns); XtSetArg (args[1], XmNpacking, (m_numColumns > 1) ? XmPACK_COLUMN : XmPACK_TIGHT); - if ( !m_font.Ok() ) + if ( !m_font.IsOk() ) { if ( menuBar ) m_font = menuBar->GetFont(); @@ -510,7 +490,7 @@ WXWidget wxMenu::CreateMenu (wxMenuBar * menuBar, XmNlabelString, label_str(), XmNsubMenuId, menu, (String)wxFont::GetFontTag(), m_font.GetFontTypeC(dpy), - XmNpositionIndex, index, + XmNpositionIndex, menuIndex, NULL); if (mnem != 0) @@ -546,7 +526,7 @@ void wxMenu::DestroyMenu (bool full) node = node->GetNext() ) { wxMenuItem *item = node->GetData(); - item->SetMenuBar((wxMenuBar*) NULL); + item->SetMenuBar(NULL); item->DestroyItem(full); } @@ -572,7 +552,7 @@ WXWidget wxMenu::FindMenuItem (int id, wxMenuItem ** it) const if (id == m_menuId) { if (it) - *it = (wxMenuItem*) NULL; + *it = NULL; return m_buttonWidget; } @@ -599,14 +579,14 @@ WXWidget wxMenu::FindMenuItem (int id, wxMenuItem ** it) const } if (it) - *it = (wxMenuItem*) NULL; + *it = NULL; return (WXWidget) NULL; } void wxMenu::SetBackgroundColour(const wxColour& col) { m_backgroundColour = col; - if (!col.Ok()) + if (!col.IsOk()) return; if (m_menuWidget) wxDoChangeBackgroundColour(m_menuWidget, (wxColour&) col); @@ -631,7 +611,7 @@ void wxMenu::SetBackgroundColour(const wxColour& col) void wxMenu::SetForegroundColour(const wxColour& col) { m_foregroundColour = col; - if (!col.Ok()) + if (!col.IsOk()) return; if (m_menuWidget) wxDoChangeForegroundColour(m_menuWidget, (wxColour&) col); @@ -657,7 +637,7 @@ void wxMenu::ChangeFont(bool keepOriginalSize) { // Lesstif 0.87 hangs here, but 0.93 does not; MBN: sometimes it does #if !wxCHECK_LESSTIF() // || wxCHECK_LESSTIF_VERSION( 0, 93 ) - if (!m_font.Ok() || !m_menuWidget) + if (!m_font.IsOk() || !m_menuWidget) return; Display* dpy = XtDisplay((Widget) m_menuWidget); @@ -677,7 +657,7 @@ void wxMenu::ChangeFont(bool keepOriginalSize) node = node->GetNext() ) { wxMenuItem* item = node->GetData(); - if (m_menuWidget && item->GetButtonWidget() && m_font.Ok()) + if (m_menuWidget && item->GetButtonWidget() && m_font.IsOk()) { XtVaSetValues ((Widget) item->GetButtonWidget(), wxFont::GetFontTag(), m_font.GetFontTypeC(dpy), @@ -701,7 +681,7 @@ bool wxMenuBar::SetBackgroundColour(const wxColour& col) { if (!wxWindowBase::SetBackgroundColour(col)) return false; - if (!col.Ok()) + if (!col.IsOk()) return false; if (m_mainWidget) wxDoChangeBackgroundColour(m_mainWidget, (wxColour&) col); @@ -717,7 +697,7 @@ bool wxMenuBar::SetForegroundColour(const wxColour& col) { if (!wxWindowBase::SetForegroundColour(col)) return false; - if (!col.Ok()) + if (!col.IsOk()) return false; if (m_mainWidget) wxDoChangeForegroundColour(m_mainWidget, (wxColour&) col);