X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/874c5c9521220cfa6cb9887468c91c6cf8711ccb..4e15d1caa03346c126015019c1fdf093033ef40b:/samples/debugrpt/debugrpt.cpp?ds=sidebyside diff --git a/samples/debugrpt/debugrpt.cpp b/samples/debugrpt/debugrpt.cpp index ba5cb5df9e..7a1f9c83a3 100644 --- a/samples/debugrpt/debugrpt.cpp +++ b/samples/debugrpt/debugrpt.cpp @@ -6,7 +6,7 @@ // Created: 2005-01-20 // RCS-ID: $Id$ // Copyright: (c) 2005 Vadim Zeitlin -// License: wxWindows licence +// Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// // ---------------------------------------------------------------------------- @@ -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" @@ -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 "), - _T("wxWidgets Debug Report Sample"), + wxT("wxDebugReport sample\n(c) 2005 Vadim Zeitlin "), + 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(); }