#if wxUSE_MENUS
virtual void SetMenuBar(wxMenuBar *menubar);
virtual wxMenuBar *GetMenuBar() const { return m_frameMenuBar; }
+
+ // find the item by id in the frame menu bar: this is an internal function
+ // and exists mainly in order to be overridden in the MDI parent frame
+ // which also looks at its active child menu bar
+ virtual const wxMenuItem *FindItemInMenuBar(int menuId) const;
#endif // wxUSE_MENUS
// process menu command: returns true if processed
virtual void PositionStatusBar() { }
// show the help string for the given menu item using DoGiveHelp() if the
- // given item does have a help string, return false if there is no help for
- // such item
+ // given item does have a help string (as determined by FindInMenuBar()),
+ // return false if there is no help for such item
bool ShowMenuHelp(int helpid);
wxStatusBar *m_frameStatusBar;
virtual WXLRESULT MSWDefWindowProc(WXUINT, WXWPARAM, WXLPARAM);
virtual bool MSWTranslateMessage(WXMSG* msg);
+ // override wxFrameBase function to also look in the active child menu bar
+ virtual const wxMenuItem *FindItemInMenuBar(int menuId) const;
+
protected:
#if wxUSE_MENUS_NATIVE
virtual void InternalSetMenuBar();
wxString helpString;
if ( menuId != wxID_SEPARATOR && menuId != -3 /* wxID_TITLE */ )
{
- wxMenuBar *menuBar = GetMenuBar();
- if ( menuBar )
- {
- // it's ok if we don't find the item because it might belong
- // to the popup menu
- wxMenuItem *item = menuBar->FindItem(menuId);
- if ( item )
- helpString = item->GetHelp();
- }
+ const wxMenuItem * const item = FindItemInMenuBar(menuId);
+ if ( item )
+ helpString = item->GetHelp();
+
+ // notice that it's ok if we don't find the item because it might
+ // belong to the popup menu, so don't assert here
}
DoGiveHelp(helpString, true);
this->AttachMenuBar(menubar);
}
+const wxMenuItem *wxFrameBase::FindItemInMenuBar(int menuId) const
+{
+ const wxMenuBar * const menuBar = GetMenuBar();
+
+ return menuBar ? menuBar->FindItem(menuId) : NULL;
+}
+
#endif // wxUSE_MENUS
}
}
+const wxMenuItem *wxMDIParentFrame::FindItemInMenuBar(int menuId) const
+{
+ const wxMenuItem *item = wxFrame::FindItemInMenuBar(menuId);
+ if ( !item && m_currentChild )
+ {
+ item = m_currentChild->FindItemInMenuBar(menuId);
+ }
+
+ return item;
+}
+
void wxMDIParentFrame::UpdateClientSize()
{
if ( GetClientWindow() )
rc = true;
break;
- case WM_MENUSELECT:
- {
- WXWORD item, flags;
- WXHMENU hmenu;
- UnpackMenuSelect(wParam, lParam, &item, &flags, &hmenu);
-
- if ( m_parentFrameActive )
- {
- processed = HandleMenuSelect(item, flags, hmenu);
- }
- else if (m_currentChild)
- {
- processed = m_currentChild->
- HandleMenuSelect(item, flags, hmenu);
- }
- }
- break;
-
case WM_SIZE:
// though we don't (usually) resize the MDI client to exactly fit the
// client area we need to pass this one to DefFrameProc to allow the children to show