]> git.saurik.com Git - wxWidgets.git/blobdiff - samples/debugrpt/debugrpt.cpp
use libtiff/libjpeg VC-specific include files for all Win32 compilers, including...
[wxWidgets.git] / samples / debugrpt / debugrpt.cpp
index ba5cb5df9ea74fa443f53cc185fd9c5091060f91..1125ff6cfa797cd6c7b8591ea43417199e4d95ca 100644 (file)
 // ----------------------------------------------------------------------------
 
 #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"
@@ -122,7 +125,7 @@ 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)
@@ -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
 // ----------------------------------------------------------------------------