X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/874c5c9521220cfa6cb9887468c91c6cf8711ccb..f965a844db8663b80c42afcbb6ae2dc36fd77ac3:/samples/debugrpt/debugrpt.cpp diff --git a/samples/debugrpt/debugrpt.cpp b/samples/debugrpt/debugrpt.cpp index ba5cb5df9e..61f58a1394 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" @@ -112,7 +115,7 @@ public: // ---------------------------------------------------------------------------- // just some functions to get a slightly deeper stack trace -static void bar(const wxChar *p) +static void bar(const char *p) { char *pc = 0; *pc = *p; @@ -122,15 +125,15 @@ static void bar(const wxChar *p) void baz(const wxString& s) { - printf("baz: %s\n", s.c_str()); + printf("baz: %s\n", (const char*)s.c_str()); } void foo(int n) { if ( n % 2 ) - baz(wxT("odd")); + baz("odd"); else - bar(wxT("even")); + bar("even"); } // ---------------------------------------------------------------------------- @@ -142,6 +145,7 @@ enum DebugRpt_Quit = wxID_EXIT, DebugRpt_Crash = 100, DebugRpt_Current, + DebugRpt_Paint, DebugRpt_Upload, DebugRpt_About = wxID_ABOUT }; @@ -155,10 +159,17 @@ 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); - DECLARE_NO_COPY_CLASS(MyFrame) + void OnPaint(wxPaintEvent& event); + + + // number of lines drawn in OnPaint() + int m_numLines; + + wxDECLARE_NO_COPY_CLASS(MyFrame); DECLARE_EVENT_TABLE() }; @@ -193,7 +204,7 @@ public: private: bool m_uploadReport; - DECLARE_NO_COPY_CLASS(MyApp) + wxDECLARE_NO_COPY_CLASS(MyApp); }; IMPLEMENT_APP(MyApp) @@ -210,13 +221,19 @@ 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")) + : wxFrame(NULL, wxID_ANY, _T("wxWidgets Debug Report Sample"), + wxDefaultPosition, wxDefaultSize, wxFULL_REPAINT_ON_RESIZE|wxDEFAULT_FRAME_STYLE) { + m_numLines = 10; + SetIcon(wxICON(sample)); wxMenu *menuFile = new wxMenu; @@ -227,6 +244,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 +283,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 +308,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 // ----------------------------------------------------------------------------