X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/204d3530fd27ff7c6597d6895b9503a4ea700692..13e24d79876b78545ba300e6b6871bc47af60848:/src/generic/dbgrptg.cpp?ds=inline diff --git a/src/generic/dbgrptg.cpp b/src/generic/dbgrptg.cpp index 734054bfca..38b6e8534f 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 && wxUSE_XML - -#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 @@ -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) }; 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 @@ -277,7 +297,7 @@ 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 @@ -397,7 +417,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 +433,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 +459,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 +504,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