X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/f565a6c2f4c6961c96dd330a98d0fa78f20ca8c0..e7492fa205a0a8a548aa437629636a42269c7b88:/samples/event/event.cpp diff --git a/samples/event/event.cpp b/samples/event/event.cpp index 380cdd17bd..4b07cd06e4 100644 --- a/samples/event/event.cpp +++ b/samples/event/event.cpp @@ -1,6 +1,6 @@ ///////////////////////////////////////////////////////////////////////////// // Name: event.cpp -// Purpose: wxWindows sample demonstrating different event usage +// Purpose: wxWidgets sample demonstrating different event usage // Author: Vadim Zeitlin // Modified by: // Created: 31.01.01 @@ -17,13 +17,6 @@ // headers // ---------------------------------------------------------------------------- -#ifdef __GNUG__ - // DO NOT use event.cpp here, it breaks statics initialization in - // src/common/event.cpp and nothing works at all then! - #pragma implementation "eventsample.cpp" - #pragma interface "eventsample.cpp" -#endif - // For compilers that support precompilation, includes "wx/wx.h". #include "wx/wxprec.h" @@ -32,35 +25,28 @@ #endif // for all others, include the necessary headers (this file is usually all you -// need because it includes almost all "standard" wxWindows headers) +// need because it includes almost all "standard" wxWidgets headers) #ifndef WX_PRECOMP #include "wx/wx.h" #endif +#ifndef __WXMSW__ + #include "../sample.xpm" +#endif + // ---------------------------------------------------------------------------- // event constants // ---------------------------------------------------------------------------- -// declare a custom event type -// -// note that in wxWin 2.3+ these macros expand simply into the following code: -// -// extern const wxEventType wxEVT_MY_CUSTOM_COMMAND; -// -// const wxEventType wxEVT_MY_CUSTOM_COMMAND = wxNewEventType(); -// -// and you may use this code directly if you don't care about 2.2 compatibility -BEGIN_DECLARE_EVENT_TYPES() - DECLARE_EVENT_TYPE(wxEVT_MY_CUSTOM_COMMAND, 7777) -END_DECLARE_EVENT_TYPES() - -DEFINE_EVENT_TYPE(wxEVT_MY_CUSTOM_COMMAND) +// define a custom event type (we don't need a separate declaration here but +// usually you would use a matching wxDECLARE_EVENT in a header) +wxDEFINE_EVENT(wxEVT_MY_CUSTOM_COMMAND, wxCommandEvent); // it may also be convenient to define an event table macro for this event type #define EVT_MY_CUSTOM_COMMAND(id, fn) \ DECLARE_EVENT_TABLE_ENTRY( \ - wxEVT_MY_CUSTOM_COMMAND, id, -1, \ - (wxObjectEventFunction)(wxEventFunction)(wxCommandEventFunction)&fn, \ + wxEVT_MY_CUSTOM_COMMAND, id, wxID_ANY, \ + wxCommandEventHandler(fn), \ (wxObject *) NULL \ ), @@ -104,10 +90,10 @@ public: protected: // number of pushed event handlers - size_t m_nPush; + unsigned m_nPush; private: - // any class wishing to process wxWindows events must use this macro + // any class wishing to process wxWidgets events must use this macro DECLARE_EVENT_TABLE() }; @@ -127,7 +113,7 @@ public: } private: - size_t m_level; + unsigned m_level; DECLARE_EVENT_TABLE() }; @@ -159,10 +145,10 @@ enum }; // ---------------------------------------------------------------------------- -// event tables and other macros for wxWindows +// event tables and other macros for wxWidgets // ---------------------------------------------------------------------------- -// the event tables connect the wxWindows events with the functions (event +// the event tables connect the wxWidgets events with the functions (event // handlers) which process them. It can be also done at run-time, but for the // simple menu events like this the static method is much simpler. BEGIN_EVENT_TABLE(MyFrame, wxFrame) @@ -178,17 +164,18 @@ BEGIN_EVENT_TABLE(MyFrame, wxFrame) EVT_UPDATE_UI(Event_Pop, MyFrame::OnUpdateUIPop) - EVT_MY_CUSTOM_COMMAND(-1, MyFrame::OnProcessCustom) + EVT_MY_CUSTOM_COMMAND(wxID_ANY, MyFrame::OnProcessCustom) - // this would also work: - //EVT_CUSTOM(wxEVT_MY_CUSTOM_COMMAND, -1, MyFrame::OnProcessCustom) + // the line below would also work if OnProcessCustom() were defined as + // taking a wxEvent (as required by EVT_CUSTOM) and not wxCommandEvent + //EVT_CUSTOM(wxEVT_MY_CUSTOM_COMMAND, wxID_ANY, MyFrame::OnProcessCustom) END_EVENT_TABLE() BEGIN_EVENT_TABLE(MyEvtHandler, wxEvtHandler) EVT_MENU(Event_Test, MyEvtHandler::OnTest) END_EVENT_TABLE() -// Create a new application object: this macro will allow wxWindows to create +// Create a new application object: this macro will allow wxWidgets to create // the application object during program execution (it's better than using a // static object for many reasons) and also declares the accessor function // wxGetApp() which will return the reference of the right type (i.e. MyApp and @@ -206,18 +193,21 @@ IMPLEMENT_APP(MyApp) // 'Main program' equivalent: the program execution "starts" here bool MyApp::OnInit() { + if ( !wxApp::OnInit() ) + return false; + // create the main application window - MyFrame *frame = new MyFrame(_T("Event wxWindows Sample"), + MyFrame *frame = new MyFrame(_T("Event wxWidgets Sample"), wxPoint(50, 50), wxSize(600, 340)); // and show it (the frames, unlike simple controls, are not shown when // created initially) - frame->Show(TRUE); + frame->Show(true); // success: wxApp::OnRun() will be called which will enter the main message - // loop and the application will run. If we returned FALSE here, the + // loop and the application will run. If we returned false here, the // application would exit immediately. - return TRUE; + return true; } // ---------------------------------------------------------------------------- @@ -226,8 +216,10 @@ bool MyApp::OnInit() // frame constructor MyFrame::MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size) - : wxFrame((wxFrame *)NULL, -1, title, pos, size) + : wxFrame((wxFrame *)NULL, wxID_ANY, title, pos, size) { + SetIcon(wxICON(sample)); + // init members m_nPush = 0; @@ -241,7 +233,7 @@ MyFrame::MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size) wxMenu *menuEvent = new wxMenu; menuEvent->Append(Event_Connect, _T("&Connect\tCtrl-C"), _T("Connect or disconnect the dynamic event handler"), - TRUE /* checkable */); + true /* checkable */); menuEvent->Append(Event_Dynamic, _T("&Dynamic event\tCtrl-D"), _T("Dynamic event sample - only works after Connect")); menuEvent->AppendSeparator(); @@ -265,7 +257,7 @@ MyFrame::MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size) #if wxUSE_STATUSBAR CreateStatusBar(3); - SetStatusText(_T("Welcome to wxWindows event sample")); + SetStatusText(_T("Welcome to wxWidgets event sample")); SetStatusText(_T("Dynamic: off"), Status_Dynamic); SetStatusText(_T("Push count: 0"), Status_Push); #endif // wxUSE_STATUSBAR @@ -277,7 +269,7 @@ MyFrame::~MyFrame() // crashes! while ( m_nPush-- != 0 ) { - PopEventHandler(TRUE /* delete handler */); + PopEventHandler(true /* delete handler */); } } @@ -287,14 +279,14 @@ MyFrame::~MyFrame() void MyFrame::OnQuit(wxCommandEvent& WXUNUSED(event)) { - // TRUE is to force the frame to close - Close(TRUE); + // true is to force the frame to close + Close(true); } void MyFrame::OnAbout(wxCommandEvent& WXUNUSED(event)) { wxMessageBox( wxT("Event sample shows different ways of using events\n") - wxT("© 2001 Vadim Zeitlin"), + wxT("(c) 2001 Vadim Zeitlin"), wxT("About Event Sample"), wxOK | wxICON_INFORMATION, this ); } @@ -316,21 +308,23 @@ void MyFrame::OnConnect(wxCommandEvent& event) { if ( event.IsChecked() ) { - // disconnect - Connect(Event_Dynamic, -1, wxEVT_COMMAND_MENU_SELECTED, - (wxObjectEventFunction) - (wxEventFunction) - (wxCommandEventFunction)&MyFrame::OnDynamic); + Connect(Event_Dynamic, wxEVT_COMMAND_MENU_SELECTED, + wxCommandEventHandler(MyFrame::OnDynamic)); +#if wxUSE_STATUSBAR SetStatusText(_T("You can now use \"Dynamic\" item in the menu")); SetStatusText(_T("Dynamic: on"), Status_Dynamic); +#endif // wxUSE_STATUSBAR } - else // connect + else // disconnect { - Disconnect(Event_Dynamic, -1, wxEVT_COMMAND_MENU_SELECTED); + Disconnect(Event_Dynamic, wxEVT_COMMAND_MENU_SELECTED, + wxCommandEventHandler(MyFrame::OnDynamic)); +#if wxUSE_STATUSBAR SetStatusText(_T("You can no more use \"Dynamic\" item in the menu")); SetStatusText(_T("Dynamic: off"), Status_Dynamic); +#endif // wxUSE_STATUSBAR } } @@ -342,20 +336,24 @@ void MyFrame::OnPushEventHandler(wxCommandEvent& WXUNUSED(event)) { PushEventHandler(new MyEvtHandler(++m_nPush)); +#if wxUSE_STATUSBAR SetStatusText(wxString::Format(_T("Push count: %u"), m_nPush), Status_Push); +#endif // wxUSE_STATUSBAR } void MyFrame::OnPopEventHandler(wxCommandEvent& WXUNUSED(event)) { wxCHECK_RET( m_nPush, _T("this command should be disabled!") ); - PopEventHandler(TRUE /* delete handler */); + PopEventHandler(true /* delete handler */); m_nPush--; +#if wxUSE_STATUSBAR SetStatusText(wxString::Format(_T("Push count: %u"), m_nPush), Status_Push); +#endif // wxUSE_STATUSBAR } -void MyFrame::OnTest(wxCommandEvent& event) +void MyFrame::OnTest(wxCommandEvent& WXUNUSED(event)) { wxLogMessage(_T("This is the test event handler in the main frame")); } @@ -369,14 +367,14 @@ void MyFrame::OnUpdateUIPop(wxUpdateUIEvent& event) // custom event methods // ---------------------------------------------------------------------------- -void MyFrame::OnFireCustom(wxCommandEvent& event) +void MyFrame::OnFireCustom(wxCommandEvent& WXUNUSED(event)) { wxCommandEvent eventCustom(wxEVT_MY_CUSTOM_COMMAND); wxPostEvent(this, eventCustom); } -void MyFrame::OnProcessCustom(wxCommandEvent& event) +void MyFrame::OnProcessCustom(wxCommandEvent& WXUNUSED(event)) { wxLogMessage(_T("Got a custom event!")); }