#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
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()
);
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());
command->SetFocus();
}
+#if wxUSE_FILEDLG
+
void wxDumpOpenExternalDlg::OnBrowse(wxCommandEvent& )
{
wxFileName fname(m_command);
}
}
+#endif // wxUSE_FILEDLG
// ----------------------------------------------------------------------------
// wxDebugReportDialog: class showing debug report to the user
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')
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;
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]);
// 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());
}
}
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