// RCS-ID: $Id$
// Copyright: (c) 1997 Julian Smart
// (c) 2008 Vadim Zeitlin
-// Licence: wxWindows license
+// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
// ===========================================================================
#include "wx/toolbar.h"
-#if !defined(__WXMSW__)
+#ifndef wxHAS_IMAGES_IN_RESOURCES
#include "../sample.xpm"
#include "chart.xpm"
#endif
EVT_MOUSE_EVENTS(MyCanvas::OnEvent)
END_EVENT_TABLE()
+BEGIN_EVENT_TABLE(MyChild::EventHandler, wxEvtHandler)
+ EVT_MENU(MDI_REFRESH, MyChild::EventHandler::OnRefresh)
+END_EVENT_TABLE()
+
// ===========================================================================
// implementation
// ===========================================================================
// Make a menubar
#if wxUSE_MENUS
- wxMenu *file_menu = new wxMenu;
-
- file_menu->Append(wxID_NEW, "&New window\tCtrl-N", "Create a new child window");
- file_menu->AppendCheckItem(MDI_FULLSCREEN, "Show &fullscreen\tCtrl-F");
- file_menu->Append(wxID_EXIT, "&Exit\tAlt-X", "Quit the program");
-
- wxMenu *help_menu = new wxMenu;
- help_menu->Append(wxID_ABOUT, "&About\tF1");
-
- wxMenuBar *menu_bar = new wxMenuBar;
-
- menu_bar->Append(file_menu, "&File");
- menu_bar->Append(help_menu, "&Help");
-
// Associate the menu bar with the frame
- SetMenuBar(menu_bar);
+ SetMenuBar(CreateMainMenubar());
// This shows that the standard window menu may be customized:
Disconnect(wxEVT_SIZE, wxSizeEventHandler(MyFrame::OnSize));
}
+#if wxUSE_MENUS
+/* static */
+wxMenuBar *MyFrame::CreateMainMenubar()
+{
+ wxMenu *menuFile = new wxMenu;
+
+ menuFile->Append(wxID_NEW, "&New window\tCtrl-N", "Create a new child window");
+ menuFile->AppendCheckItem(MDI_FULLSCREEN, "Show &full screen\tCtrl-F");
+ menuFile->Append(wxID_EXIT, "&Exit\tAlt-X", "Quit the program");
+
+ wxMenu *menuHelp = new wxMenu;
+ menuHelp->Append(wxID_ABOUT, "&About\tF1");
+
+ wxMenuBar *mbar = new wxMenuBar;
+ mbar->Append(menuFile, "&File");
+ mbar->Append(menuHelp, "&Help");
+
+ return mbar;
+}
+#endif // wxUSE_MENUS
+
void MyFrame::OnClose(wxCloseEvent& event)
{
unsigned numChildren = MyChild::GetChildrenCount();
const bool canBeResized = !IsAlwaysMaximized();
- // create our menubar: it will be shown instead of the main frame one when
+ // create our menu bar: it will be shown instead of the main frame one when
// we're active
#if wxUSE_MENUS
- // Make a menubar
- wxMenu *file_menu = new wxMenu;
+ wxMenuBar *mbar = MyFrame::CreateMainMenubar();
+ mbar->GetMenu(0)->Insert(1, wxID_CLOSE, "&Close child\tCtrl-W",
+ "Close this window");
- file_menu->Append(wxID_NEW, "&New window\tCtrl-N");
- file_menu->Append(wxID_CLOSE, "&Close child\tCtrl-W", "Close this window");
- file_menu->AppendCheckItem(MDI_FULLSCREEN, "Show &fullscreen\tCtrl-F");
- file_menu->Append(wxID_EXIT, "&Exit\tAlt-X", "Quit the program");
+ wxMenu *menuChild = new wxMenu;
- wxMenu *option_menu = new wxMenu;
-
- option_menu->Append(MDI_REFRESH, "&Refresh picture");
- option_menu->Append(MDI_CHANGE_TITLE, "Change &title...\tCtrl-T");
+ menuChild->Append(MDI_REFRESH, "&Refresh picture");
+ menuChild->Append(MDI_CHANGE_TITLE, "Change &title...\tCtrl-T");
if ( canBeResized )
{
- option_menu->AppendSeparator();
- option_menu->Append(MDI_CHANGE_POSITION, "Move frame\tCtrl-M");
- option_menu->Append(MDI_CHANGE_SIZE, "Resize frame\tCtrl-S");
+ menuChild->AppendSeparator();
+ menuChild->Append(MDI_CHANGE_POSITION, "Move frame\tCtrl-M");
+ menuChild->Append(MDI_CHANGE_SIZE, "Resize frame\tCtrl-S");
}
#if wxUSE_CLIPBOARD
- option_menu->AppendSeparator();
- option_menu->Append(wxID_PASTE, "Copy text from clipboard\tCtrl-V");
+ menuChild->AppendSeparator();
+ menuChild->Append(wxID_PASTE, "Copy text from clipboard\tCtrl-V");
#endif // wxUSE_CLIPBOARD
- wxMenu *help_menu = new wxMenu;
- help_menu->Append(wxID_ABOUT, "&About");
-
- wxMenuBar *menu_bar = new wxMenuBar;
-
- menu_bar->Append(file_menu, "&File");
- menu_bar->Append(option_menu, "&Child");
- menu_bar->Append(help_menu, "&Help");
+ mbar->Insert(1, menuChild, "&Child");
// Associate the menu bar with the frame
- SetMenuBar(menu_bar);
+ SetMenuBar(mbar);
#endif // wxUSE_MENUS
// this should work for MDI frames as well as for normal ones, provided
// they can be resized at all
if ( canBeResized )
SetSizeHints(100, 100);
+
+ // test that event handlers pushed on top of MDI children do work (this
+ // used to be broken, see #11225)
+ PushEventHandler(new EventHandler(ms_numChildren));
}
MyChild::~MyChild()
{
+ PopEventHandler(true);
+
ms_numChildren--;
}