X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/874c5c9521220cfa6cb9887468c91c6cf8711ccb..c687b303a5040da07009ea93504121aeec56682a:/samples/debugrpt/debugrpt.cpp?ds=sidebyside diff --git a/samples/debugrpt/debugrpt.cpp b/samples/debugrpt/debugrpt.cpp index ba5cb5df9e..9b379a1f51 100644 --- a/samples/debugrpt/debugrpt.cpp +++ b/samples/debugrpt/debugrpt.cpp @@ -14,10 +14,13 @@ // ---------------------------------------------------------------------------- #include "wx/app.h" +#include "wx/log.h" #include "wx/frame.h" +#include "wx/icon.h" #include "wx/menu.h" #include "wx/msgdlg.h" #include "wx/button.h" +#include "wx/dcclient.h" #include "wx/datetime.h" #include "wx/ffile.h" @@ -142,6 +145,7 @@ enum DebugRpt_Quit = wxID_EXIT, DebugRpt_Crash = 100, DebugRpt_Current, + DebugRpt_Paint, DebugRpt_Upload, DebugRpt_About = wxID_ABOUT }; @@ -155,9 +159,16 @@ private: void OnQuit(wxCommandEvent& event); void OnReportForCrash(wxCommandEvent& event); void OnReportForCurrent(wxCommandEvent& event); + void OnReportPaint(wxCommandEvent& event); void OnReportUpload(wxCommandEvent& event); void OnAbout(wxCommandEvent& event); + void OnPaint(wxPaintEvent& event); + + + // number of lines drawn in OnPaint() + int m_numLines; + DECLARE_NO_COPY_CLASS(MyFrame) DECLARE_EVENT_TABLE() }; @@ -210,13 +221,18 @@ BEGIN_EVENT_TABLE(MyFrame, wxFrame) EVT_MENU(DebugRpt_Quit, MyFrame::OnQuit) EVT_MENU(DebugRpt_Crash, MyFrame::OnReportForCrash) EVT_MENU(DebugRpt_Current, MyFrame::OnReportForCurrent) + EVT_MENU(DebugRpt_Paint, MyFrame::OnReportPaint) EVT_MENU(DebugRpt_Upload, MyFrame::OnReportUpload) EVT_MENU(DebugRpt_About, MyFrame::OnAbout) + + EVT_PAINT(MyFrame::OnPaint) END_EVENT_TABLE() MyFrame::MyFrame() : wxFrame(NULL, wxID_ANY, _T("wxWidgets Debug Report Sample")) { + m_numLines = 10; + SetIcon(wxICON(sample)); wxMenu *menuFile = new wxMenu; @@ -227,6 +243,8 @@ MyFrame::MyFrame() _T("Provoke a crash inside the program and create report for it")); menuReport->Append(DebugRpt_Current, _T("Report for c&urrent context\tCtrl-U"), _T("Create report for the current program context")); + menuReport->Append(DebugRpt_Paint, _T("Report for &paint handler\tCtrl-P"), + _T("Provoke a repeatable crash in wxEVT_PAINT handler")); menuReport->AppendSeparator(); menuReport->AppendCheckItem(DebugRpt_Upload, _T("Up&load debug report"), _T("You need to configure a web server accepting debug report uploads to use this function")); @@ -264,6 +282,15 @@ void MyFrame::OnReportForCurrent(wxCommandEvent& WXUNUSED(event)) wxGetApp().GenerateReport(wxDebugReport::Context_Current); } +void MyFrame::OnReportPaint(wxCommandEvent& WXUNUSED(event)) +{ + // this will result in a crash in OnPaint() + m_numLines = 0; + + // ensure it's called immediately + Refresh(); +} + void MyFrame::OnReportUpload(wxCommandEvent& event) { wxGetApp().UploadReport(event.IsChecked()); @@ -280,6 +307,14 @@ void MyFrame::OnAbout(wxCommandEvent& WXUNUSED(event)) ); } +void MyFrame::OnPaint(wxPaintEvent& WXUNUSED(event)) +{ + wxPaintDC dc(this); + const wxSize size = GetClientSize(); + for ( wxCoord x = 0; x < size.x; x += size.x/m_numLines ) + dc.DrawLine(x, 0, x, size.y); +} + // ---------------------------------------------------------------------------- // MyApp // ----------------------------------------------------------------------------