X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/e306597309a120f2ae91385c731a5cb2722c52aa..3285ee538be44537a0d4e43252db18f5e7362782:/samples/dynamic/dynamic.cpp diff --git a/samples/dynamic/dynamic.cpp b/samples/dynamic/dynamic.cpp index 06847f1253..ea9c0e3d06 100644 --- a/samples/dynamic/dynamic.cpp +++ b/samples/dynamic/dynamic.cpp @@ -1,17 +1,17 @@ ///////////////////////////////////////////////////////////////////////////// // Name: dynamic.cpp -// Purpose: Dynamic events wxWindows sample +// Purpose: Dynamic events wxWidgets sample // Author: Julian Smart // Modified by: // Created: 04/01/98 // RCS-ID: $Id$ -// Copyright: (c) Julian Smart and Markus Holzem +// Copyright: (c) Julian Smart // Licence: wxWindows license ///////////////////////////////////////////////////////////////////////////// -#ifdef __GNUG__ -#pragma implementation "dynamic.cpp" -#pragma interface "dynamic.cpp" +#if defined(__GNUG__) && !defined(__APPLE__) +#pragma implementation +#pragma interface #endif // For compilers that support precompilation, includes "wx/wx.h". @@ -25,30 +25,45 @@ #include "wx/wx.h" #endif -#if defined(__WXGTK__) || defined(__WXMOTIF__) +#include "wx/clntdata.h" + +#if defined(__WXGTK__) || defined(__WXX11__) || defined(__WXMOTIF__) || defined(__WXMAC__) || defined(__WXMGL__) || defined(__WXCOCOA__) #include "mondrian.xpm" #endif // Define a new application type class MyApp: public wxApp -{ public: +{ +public: bool OnInit(void); }; // Define a new frame type class MyFrame: public wxFrame -{ public: - MyFrame(wxFrame *frame, char *title, int x, int y, int w, int h); +{ +public: + MyFrame(wxFrame *frame, wxChar *title, int x, int y, int w, int h); - public: +public: void OnQuit(wxCommandEvent& event); + void OnTest(wxCommandEvent& event); void OnAbout(wxCommandEvent& event); + +protected: + wxShadowObject m_shadow; +}; + +// Define another new frame type +class MySecondFrame: public MyFrame +{ +public: + MySecondFrame(wxFrame *frame, wxChar *title, int x, int y, int w, int h); }; // ID for the menu commands -#define DYNAMIC_QUIT 1 -#define DYNAMIC_TEXT 101 -#define DYNAMIC_ABOUT 102 +#define DYNAMIC_QUIT wxID_EXIT +#define DYNAMIC_TEST 101 +#define DYNAMIC_ABOUT wxID_ABOUT // Create a new application object IMPLEMENT_APP (MyApp) @@ -56,61 +71,110 @@ IMPLEMENT_APP (MyApp) // `Main program' equivalent, creating windows and returning main app frame bool MyApp::OnInit(void) { - // Create the main frame window - MyFrame *frame = new MyFrame(NULL, "Dynamic wxWindows App", 50, 50, 450, 340); - - frame->Connect( DYNAMIC_QUIT, -1, wxEVT_COMMAND_MENU_SELECTED, - (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) - &MyFrame::OnQuit ); - frame->Connect( DYNAMIC_ABOUT, -1, wxEVT_COMMAND_MENU_SELECTED, - (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction) - &MyFrame::OnAbout ); - - // Give it an icon -#ifdef __WXMSW__ - frame->SetIcon(wxIcon("mondrian")); -#else - frame->SetIcon(wxIcon(mondrian_xpm)); -#endif + // Create the main frame window + MyFrame *frame = new MyFrame(NULL, _T("Dynamic wxWidgets App"), 50, 50, 450, 340); - // Make a menubar - wxMenu *file_menu = new wxMenu; + // Show the frame + frame->Show(true); + + // Create the main frame window + MySecondFrame *frame2 = new MySecondFrame(NULL, _T("Dynamic wxWidgets App"), 150, 150, 450, 340); + + // Show the frame + frame2->Show(true); - file_menu->Append(DYNAMIC_ABOUT, "&About"); - file_menu->Append(DYNAMIC_QUIT, "E&xit"); - wxMenuBar *menu_bar = new wxMenuBar; - menu_bar->Append(file_menu, "&File"); - frame->SetMenuBar(menu_bar); + SetTopWindow(frame); - // Make a panel with a message - wxPanel *panel = new wxPanel(frame, -1, wxPoint(0, 0), wxSize(400, 200), wxTAB_TRAVERSAL); - - (void)new wxStaticText(panel, 311, "Hello!", wxPoint(10, 10), wxSize(-1, -1), 0); + return true; +} - // Show the frame - frame->Show(TRUE); +// ------------------------------------- +// MyFrame +// ------------------------------------- - SetTopWindow(frame); +// Callback from wxShadowObject - return TRUE; +int cb_MyFrame_InitStatusbar( void* window, void* param ) +{ + MyFrame *frame = (MyFrame*) window; + frame->SetStatusText( wxT("Hello from MyFrame"), 0 ); + return 0; } // My frame constructor -MyFrame::MyFrame(wxFrame *frame, char *title, int x, int y, int w, int h): - wxFrame(frame, -1, title, wxPoint(x, y), wxSize(w, h)) -{} +MyFrame::MyFrame(wxFrame *frame, wxChar *title, int x, int y, int w, int h): + wxFrame(frame, wxID_ANY, title, wxPoint(x, y), wxSize(w, h)) +{ + // Give it an icon +#ifdef __WXMSW__ + SetIcon(wxIcon(_T("mondrian"))); +#else + SetIcon(wxIcon(mondrian_xpm)); +#endif + + // Make a menubar + wxMenu *file_menu = new wxMenu; + + file_menu->Append(DYNAMIC_ABOUT, _T("&About")); + file_menu->Append(DYNAMIC_TEST, _T("&Test")); + file_menu->Append(DYNAMIC_QUIT, _T("E&xit")); + wxMenuBar *menu_bar = new wxMenuBar; + menu_bar->Append(file_menu, _T("&File")); + SetMenuBar(menu_bar); + + // Make a panel with a message + wxPanel *panel = new wxPanel(this, wxID_ANY, wxPoint(0, 0), wxSize(400, 200), wxTAB_TRAVERSAL); + + (void)new wxStaticText(panel, 311, _T("Hello!"), wxPoint(10, 10), wxDefaultSize, 0); + + // You used to have to do some casting for param 4, but now there are type-safe handlers + Connect( DYNAMIC_QUIT, wxID_ANY, + wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler(MyFrame::OnQuit) ); + Connect( DYNAMIC_TEST, wxID_ANY, + wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler(MyFrame::OnTest) ); + Connect( DYNAMIC_ABOUT, wxID_ANY, + wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler(MyFrame::OnAbout) ); + + CreateStatusBar(); + m_shadow.AddMethod( wxT("OnTest"), &cb_MyFrame_InitStatusbar ); +} void MyFrame::OnQuit(wxCommandEvent& WXUNUSED(event) ) { - Close(TRUE); + Close(true); +} + +void MyFrame::OnTest(wxCommandEvent& WXUNUSED(event) ) +{ + m_shadow.InvokeMethod( wxT("OnTest"), this, NULL, NULL ); } void MyFrame::OnAbout(wxCommandEvent& WXUNUSED(event) ) { - wxMessageDialog dialog(this, "This demonstrates dynamic event handling", - "About Dynamic", wxYES_NO|wxCANCEL); + wxMessageDialog dialog(this, _T("This demonstrates dynamic event handling"), + _T("About Dynamic"), wxYES_NO|wxCANCEL); + + dialog.ShowModal(); +} - dialog.ShowModal(); + +// ------------------------------------- +// MySecondFrame +// ------------------------------------- + +// Callback from wxShadowObject + +int cb_MySecondFrame_InitStatusbar( void* window, void* param ) +{ + MySecondFrame *frame = (MySecondFrame*) window; + frame->SetStatusText( wxT("Hello from MySecondFrame"), 0 ); + return 0; } +// My frame constructor +MySecondFrame::MySecondFrame(wxFrame *frame, wxChar *title, int x, int y, int w, int h): + MyFrame(frame, title, x, y, w, h ) +{ + m_shadow.AddMethod( wxT("OnTest"), &cb_MySecondFrame_InitStatusbar ); +}