X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/1483e5db8d719803c2d04984fd5ad85176964e16..2a45803fc3877afd0ae3ce356dfe216505165882:/samples/mdi/mdi.cpp diff --git a/samples/mdi/mdi.cpp b/samples/mdi/mdi.cpp index e4b581a2c4..c65e285682 100644 --- a/samples/mdi/mdi.cpp +++ b/samples/mdi/mdi.cpp @@ -7,7 +7,7 @@ // RCS-ID: $Id$ // Copyright: (c) 1997 Julian Smart // (c) 2008 Vadim Zeitlin -// Licence: wxWindows license +// Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// // =========================================================================== @@ -32,7 +32,7 @@ #include "wx/toolbar.h" -#if !defined(__WXMSW__) +#ifndef wxHAS_IMAGES_IN_RESOURCES #include "../sample.xpm" #include "chart.xpm" #endif @@ -99,6 +99,10 @@ BEGIN_EVENT_TABLE(MyCanvas, wxScrolledWindow) 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 // =========================================================================== @@ -135,22 +139,8 @@ MyFrame::MyFrame() // 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: @@ -216,6 +206,27 @@ MyFrame::~MyFrame() 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(); @@ -329,7 +340,7 @@ MyCanvas::MyCanvas(wxWindow *parent, const wxPoint& pos, const wxSize& size) wxNO_FULL_REPAINT_ON_RESIZE | wxVSCROLL | wxHSCROLL) { - SetBackgroundColour(wxColour("WHITE")); + SetBackgroundColour(*wxWHITE); SetCursor(wxCursor(wxCURSOR_PENCIL)); SetScrollbars(20, 20, 50, 50); @@ -412,53 +423,48 @@ MyChild::MyChild(wxMDIParentFrame *parent) 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--; }