]> git.saurik.com Git - wxWidgets.git/blobdiff - samples/debugrpt/debugrpt.cpp
Fix broken and missing DataView interface items for Phoenix
[wxWidgets.git] / samples / debugrpt / debugrpt.cpp
index ba5cb5df9ea74fa443f53cc185fd9c5091060f91..7a1f9c83a35ad5cdf4cda737a220b647281cfbbd 100644 (file)
@@ -6,7 +6,7 @@
 // Created:     2005-01-20
 // RCS-ID:      $Id$
 // Copyright:   (c) 2005 Vadim Zeitlin <zeitlin@dptmaths.ens-cachan.fr>
-// License:     wxWindows licence
+// Licence:     wxWindows licence
 ///////////////////////////////////////////////////////////////////////////////
 
 // ----------------------------------------------------------------------------
 // ----------------------------------------------------------------------------
 
 #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"
@@ -32,7 +35,7 @@
     #error "This sample can't be built without wxUSE_ON_FATAL_EXCEPTION"
 #endif // wxUSE_ON_FATAL_EXCEPTION
 
-#if !defined(__WXMSW__) && !defined(__WXPM__)
+#ifndef wxHAS_IMAGES_IN_RESOURCES
     #include "../sample.xpm"
 #endif
 
@@ -48,9 +51,9 @@ class MyDebugReport : public wxDebugReportUpload
 public:
     MyDebugReport() : wxDebugReportUpload
                        (
-                        _T("http://your.url.here/"),
-                        _T("report:file"),
-                        _T("action")
+                        wxT("http://your.url.here/"),
+                        wxT("report:file"),
+                        wxT("action")
                        )
     {
     }
@@ -63,19 +66,19 @@ protected:
     {
         if ( reply.IsEmpty() )
         {
-            wxLogError(_T("Didn't receive the expected server reply."));
+            wxLogError(wxT("Didn't receive the expected server reply."));
             return false;
         }
 
-        wxString s(_T("Server replied:\n"));
+        wxString s(wxT("Server replied:\n"));
 
         const size_t count = reply.GetCount();
         for ( size_t n = 0; n < count; n++ )
         {
-            s << _T('\t') << reply[n] << _T('\n');
+            s << wxT('\t') << reply[n] << wxT('\n');
         }
 
-        wxLogMessage(_T("%s"), s.c_str());
+        wxLogMessage(wxT("%s"), s.c_str());
 
         return true;
     }
@@ -94,12 +97,12 @@ public:
     {
         if ( !wxDebugReportCompress::DoProcess() )
             return false;
-        wxMailMessage msg(GetReportName() + _T(" crash report"),
-                          _T("vadim@wxwindows.org"),
+        wxMailMessage msg(GetReportName() + wxT(" crash report"),
+                          wxT("vadim@wxwindows.org"),
                           wxEmptyString, // mail body
                           wxEmptyString, // from address
                           GetCompressedFileName(),
-                          _T("crashreport.zip"));
+                          wxT("crashreport.zip"));
 
         return wxEmail::Send(msg);
     }
@@ -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,34 +221,42 @@ 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, wxT("wxWidgets Debug Report Sample"),
+                 wxDefaultPosition, wxDefaultSize, wxFULL_REPAINT_ON_RESIZE|wxDEFAULT_FRAME_STYLE)
 {
+    m_numLines = 10;
+
     SetIcon(wxICON(sample));
 
     wxMenu *menuFile = new wxMenu;
-    menuFile->Append(DebugRpt_Quit, _T("E&xit\tAlt-X"));
+    menuFile->Append(DebugRpt_Quit, wxT("E&xit\tAlt-X"));
 
     wxMenu *menuReport = new wxMenu;
-    menuReport->Append(DebugRpt_Crash, _T("Report for &crash\tCtrl-C"),
-                       _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_Crash, wxT("Report for &crash\tCtrl-C"),
+                       wxT("Provoke a crash inside the program and create report for it"));
+    menuReport->Append(DebugRpt_Current, wxT("Report for c&urrent context\tCtrl-U"),
+                       wxT("Create report for the current program context"));
+    menuReport->Append(DebugRpt_Paint, wxT("Report for &paint handler\tCtrl-P"),
+                       wxT("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"));
+    menuReport->AppendCheckItem(DebugRpt_Upload, wxT("Up&load debug report"),
+                       wxT("You need to configure a web server accepting debug report uploads to use this function"));
 
     wxMenu *menuHelp = new wxMenu;
-    menuHelp->Append(DebugRpt_About, _T("&About...\tF1"));
+    menuHelp->Append(DebugRpt_About, wxT("&About\tF1"));
 
     wxMenuBar *mbar = new wxMenuBar();
-    mbar->Append(menuFile, _T("&File"));
-    mbar->Append(menuReport, _T("&Report"));
-    mbar->Append(menuHelp, _T("&Help"));
+    mbar->Append(menuFile, wxT("&File"));
+    mbar->Append(menuReport, wxT("&Report"));
+    mbar->Append(menuHelp, wxT("&Help"));
     SetMenuBar(mbar);
 
     CreateStatusBar();
@@ -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());
@@ -273,20 +301,28 @@ void MyFrame::OnAbout(wxCommandEvent& WXUNUSED(event))
 {
     wxMessageBox
     (
-        _T("wxDebugReport sample\n(c) 2005 Vadim Zeitlin <vadim@wxwindows.org>"),
-        _T("wxWidgets Debug Report Sample"),
+        wxT("wxDebugReport sample\n(c) 2005 Vadim Zeitlin <vadim@wxwindows.org>"),
+        wxT("wxWidgets Debug Report Sample"),
         wxOK | wxICON_INFORMATION,
         this
     );
 }
 
+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
 // ----------------------------------------------------------------------------
 
 MyApp::MyApp()
 {
-    // user needs to explicitely enable this
+    // user needs to explicitly enable this
     m_uploadReport = false;
 
     // call this to tell the library to call our OnFatalException()
@@ -320,23 +356,23 @@ void MyApp::GenerateReport(wxDebugReport::Context ctx)
     // you can also call report->AddFile(...) with your own log files, files
     // created using wxRegKey::Export() and so on, here we just add a test
     // file containing the date of the crash
-    wxFileName fn(report->GetDirectory(), _T("timestamp.my"));
-    wxFFile file(fn.GetFullPath(), _T("w"));
+    wxFileName fn(report->GetDirectory(), wxT("timestamp.my"));
+    wxFFile file(fn.GetFullPath(), wxT("w"));
     if ( file.IsOpened() )
     {
         wxDateTime dt = wxDateTime::Now();
-        file.Write(dt.FormatISODate() + _T(' ') + dt.FormatISOTime());
+        file.Write(dt.FormatISODate() + wxT(' ') + dt.FormatISOTime());
         file.Close();
     }
 
-    report->AddFile(fn.GetFullName(), _T("timestamp of this report"));
+    report->AddFile(fn.GetFullName(), wxT("timestamp of this report"));
 
     // can also add an existing file directly, it will be copied
     // automatically
 #ifdef __WXMSW__
-    report->AddFile(_T("c:\\autoexec.bat"), _T("DOS startup file"));
+    report->AddFile(wxT("c:\\autoexec.bat"), wxT("DOS startup file"));
 #else
-    report->AddFile(_T("/etc/motd"), _T("Message of the day"));
+    report->AddFile(wxT("/etc/motd"), wxT("Message of the day"));
 #endif
 
     // calling Show() is not mandatory, but is more polite
@@ -346,11 +382,11 @@ void MyApp::GenerateReport(wxDebugReport::Context ctx)
         {
             if ( m_uploadReport )
             {
-                wxLogMessage(_T("Report successfully uploaded."));
+                wxLogMessage(wxT("Report successfully uploaded."));
             }
             else
             {
-                wxLogMessage(_T("Report generated in \"%s\"."),
+                wxLogMessage(wxT("Report generated in \"%s\"."),
                              report->GetCompressedFileName().c_str());
                 report->Reset();
             }