X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/67a623de6e325179a9124d5dd0a3cd1849d5eba7..cf25a599cd5ec86b3e054efb799dfbafe26a0d50:/src/generic/dbgrptg.cpp diff --git a/src/generic/dbgrptg.cpp b/src/generic/dbgrptg.cpp index 52d43bae35..d959d0ea4f 100644 --- a/src/generic/dbgrptg.cpp +++ b/src/generic/dbgrptg.cpp @@ -23,25 +23,30 @@ #pragma hdrstop #endif +#if wxUSE_DEBUGREPORT && wxUSE_XML + +#include "wx/debugrpt.h" + #ifndef WX_PRECOMP #include "wx/sizer.h" #include "wx/checklst.h" #include "wx/textctrl.h" + #include "wx/intl.h" + #include "wx/stattext.h" + #include "wx/filedlg.h" + #include "wx/valtext.h" + #include "wx/button.h" #endif // WX_PRECOMP -#if wxUSE_DEBUGREPORT - -#include "wx/debugrpt.h" - -#include "wx/intl.h" #include "wx/filename.h" #include "wx/ffile.h" #include "wx/mimetype.h" #include "wx/statline.h" -#include "wx/stattext.h" -#include "wx/filedlg.h" -#include "wx/valtext.h" + +#ifdef __WXMSW__ + #include "wx/evtloop.h" // for SetCriticalWindow() +#endif // __WXMSW__ // ---------------------------------------------------------------------------- // wxDumpPreviewDlg: simple class for showing ASCII preview of dump files @@ -58,7 +63,7 @@ private: // the text we show wxTextCtrl *m_text; - DECLARE_NO_COPY_CLASS(wxDumpPreviewDlg) + wxDECLARE_NO_COPY_CLASS(wxDumpPreviewDlg); }; wxDumpPreviewDlg::wxDumpPreviewDlg(wxWindow *parent, @@ -127,14 +132,21 @@ public: wxString m_command; private: + +#if wxUSE_FILEDLG void OnBrowse(wxCommandEvent& event); +#endif // wxUSE_FILEDLG DECLARE_EVENT_TABLE() - DECLARE_NO_COPY_CLASS(wxDumpOpenExternalDlg) + wxDECLARE_NO_COPY_CLASS(wxDumpOpenExternalDlg); }; BEGIN_EVENT_TABLE(wxDumpOpenExternalDlg, wxDialog) + +#if wxUSE_FILEDLG EVT_BUTTON(wxID_MORE, wxDumpOpenExternalDlg::OnBrowse) +#endif + END_EVENT_TABLE() @@ -176,12 +188,17 @@ wxDumpOpenExternalDlg::wxDumpOpenExternalDlg(wxWindow *parent, ); sizerH->Add(command, wxSizerFlags(1).Align(wxALIGN_CENTER_VERTICAL)); + +#if wxUSE_FILEDLG + wxButton *browse = new wxButton(this, wxID_MORE, wxT(">>"), wxDefaultPosition, wxDefaultSize, wxBU_EXACTFIT); sizerH->Add(browse, wxSizerFlags(0).Align(wxALIGN_CENTER_VERTICAL). Border(wxLEFT)); +#endif // wxUSE_FILEDLG + sizerTop->Add(sizerH, wxSizerFlags(0).Expand().Border()); sizerTop->Add(new wxStaticLine(this), wxSizerFlags().Expand().Border()); @@ -200,6 +217,8 @@ wxDumpOpenExternalDlg::wxDumpOpenExternalDlg(wxWindow *parent, command->SetFocus(); } +#if wxUSE_FILEDLG + void wxDumpOpenExternalDlg::OnBrowse(wxCommandEvent& ) { wxFileName fname(m_command); @@ -218,6 +237,7 @@ void wxDumpOpenExternalDlg::OnBrowse(wxCommandEvent& ) } } +#endif // wxUSE_FILEDLG // ---------------------------------------------------------------------------- // wxDebugReportDialog: class showing debug report to the user @@ -252,7 +272,7 @@ private: wxArrayString m_files; DECLARE_EVENT_TABLE() - DECLARE_NO_COPY_CLASS(wxDebugReportDialog) + wxDECLARE_NO_COPY_CLASS(wxDebugReportDialog); }; // ============================================================================ @@ -277,14 +297,23 @@ wxDebugReportDialog::wxDebugReportDialog(wxDebugReport& dbgrpt) dbgrpt.GetReportName().c_str()), wxDefaultPosition, wxDefaultSize, - wxDEFAULT_DIALOG_STYLE | wxTHICK_FRAME), + wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER), m_dbgrpt(dbgrpt) { // upper part of the dialog: explanatory message wxString msg; + wxString debugDir = dbgrpt.GetDirectory(); + + // The temporary directory can be the short form on Windows; + // normalize it for the benefit of users. +#ifdef __WXMSW__ + wxFileName debugDirFilename(debugDir, wxEmptyString); + debugDirFilename.Normalize(wxPATH_NORM_LONG); + debugDir = debugDirFilename.GetPath(); +#endif msg << _("A debug report has been generated in the directory\n") << _T('\n') - << _T(" \"") << dbgrpt.GetDirectory() << _T("\"\n") + << _T(" \"") << debugDir << _T("\"\n") << _T('\n') << _("The report contains the files listed below. If any of these files contain private information,\nplease uncheck them and they will be removed from the report.\n") << _T('\n') @@ -397,7 +426,7 @@ bool wxDebugReportDialog::TransferDataFromWindow() void wxDebugReportDialog::OnView(wxCommandEvent& ) { const int sel = m_checklst->GetSelection(); - wxCHECK_RET( sel != -1, _T("invalid selection in OnView()") ); + wxCHECK_RET( sel != wxNOT_FOUND, _T("invalid selection in OnView()") ); wxFileName fn(m_dbgrpt.GetDirectory(), m_files[sel]); wxString str; @@ -413,7 +442,7 @@ void wxDebugReportDialog::OnView(wxCommandEvent& ) void wxDebugReportDialog::OnOpen(wxCommandEvent& ) { const int sel = m_checklst->GetSelection(); - wxCHECK_RET( sel != -1, _T("invalid selection in OnOpen()") ); + wxCHECK_RET( sel != wxNOT_FOUND, _T("invalid selection in OnOpen()") ); wxFileName fn(m_dbgrpt.GetDirectory(), m_files[sel]); @@ -439,13 +468,20 @@ void wxDebugReportDialog::OnOpen(wxCommandEvent& ) // if we don't have place marker for file name in the command... wxString cmd = dlg.GetCommand(); - if ( cmd.find(_T('%')) == wxString::npos ) + if ( !cmd.empty() ) { - // ...add it - cmd += _T(" \"%s\""); +#if wxUSE_MIMETYPE + if ( cmd.find(_T('%')) != wxString::npos ) + { + command = wxFileType::ExpandCommand(cmd, fn.GetFullPath()); + } + else // no %s nor %1 +#endif // wxUSE_MIMETYPE + { + // append the file name to the end + command << cmd << _T(" \"") << fn.GetFullPath() << _T('"'); + } } - - command = wxFileType::ExpandCommand(cmd, fn.GetFullPath()); } } @@ -477,8 +513,13 @@ bool wxDebugReportPreviewStd::Show(wxDebugReport& dbgrpt) const wxDebugReportDialog dlg(dbgrpt); +#ifdef __WXMSW__ + // before entering the event loop (from ShowModal()), block the event + // handling for all other windows as this could result in more crashes + wxEventLoop::SetCriticalWindow(&dlg); +#endif // __WXMSW__ + return dlg.ShowModal() == wxID_OK && dbgrpt.GetFilesCount() != 0; } -#endif // wxUSE_DEBUGREPORT - +#endif // wxUSE_DEBUGREPORT && wxUSE_XML