// Author: Vadim Zeitlin, Andrej Putrin
// Modified by:
// Created: 2005-01-21
-// RCS-ID: $Id$
// Copyright: (c) 2005 Vadim Zeitlin <zeitlin@dptmaths.ens-cachan.fr>
-// License: wxWindows licence
+// Licence: wxWindows licence
///////////////////////////////////////////////////////////////////////////////
// ============================================================================
#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"
+#ifdef wxUSE_FFILE
+ #include "wx/ffile.h"
+#else
+ #include "wx/file.h"
+#endif
#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()
+ #include "wx/scopeguard.h"
+#endif // __WXMSW__
// ----------------------------------------------------------------------------
// wxDumpPreviewDlg: simple class for showing ASCII preview of dump files
// the text we show
wxTextCtrl *m_text;
- DECLARE_NO_COPY_CLASS(wxDumpPreviewDlg)
+ wxDECLARE_NO_COPY_CLASS(wxDumpPreviewDlg);
};
wxDumpPreviewDlg::wxDumpPreviewDlg(wxWindow *parent,
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()
);
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);
fname.GetPathWithSep(),
fname.GetFullName()
#ifdef __WXMSW__
- , _("Executable files (*.exe)|*.exe|All files (*.*)|*.*||")
+ , _("Executable files (*.exe)|*.exe|") + wxALL_FILES
#endif // __WXMSW__
);
if ( dlg.ShowModal() == wxID_OK )
}
}
+#endif // wxUSE_FILEDLG
// ----------------------------------------------------------------------------
// wxDebugReportDialog: class showing debug report to the user
wxArrayString m_files;
DECLARE_EVENT_TABLE()
- DECLARE_NO_COPY_CLASS(wxDebugReportDialog)
+ wxDECLARE_NO_COPY_CLASS(wxDebugReportDialog);
};
// ============================================================================
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('\n')
+ << wxT('\n')
+ << wxT(" \"") << debugDir << wxT("\"\n")
+ << wxT('\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')
+ << wxT('\n')
<< _("If you wish to suppress this debug report completely, please choose the \"Cancel\" button,\nbut be warned that it may hinder improving the program, so if\nat all possible please do continue with the report generation.\n")
- << _T('\n')
+ << wxT('\n')
<< _(" Thank you and we're sorry for the inconvenience!\n")
- << _T("\n\n"); // just some white space to separate from other stuff
+ << wxT("\n\n"); // just some white space to separate from other stuff
const wxSizerFlags flagsFixed(SizerFlags(0));
const wxSizerFlags flagsExpand(SizerFlags(1));
// ... and the list of files in this debug report with buttons to view them
wxSizer *sizerFileBtns = new wxBoxSizer(wxVERTICAL);
sizerFileBtns->AddStretchSpacer(1);
- sizerFileBtns->Add(new wxButton(this, wxID_VIEW_DETAILS, _T("&View...")),
+ sizerFileBtns->Add(new wxButton(this, wxID_VIEW_DETAILS, _("&View...")),
wxSizerFlags().Border(wxBOTTOM));
- sizerFileBtns->Add(new wxButton(this, wxID_OPEN, _T("&Open...")),
+ sizerFileBtns->Add(new wxButton(this, wxID_OPEN, _("&Open...")),
wxSizerFlags().Border(wxTOP));
sizerFileBtns->AddStretchSpacer(1);
desc;
if ( m_dbgrpt.GetFile(n, &name, &desc) )
{
- m_checklst->Append(name + _T(" (") + desc + _T(')'));
+ m_checklst->Append(name + wxT(" (") + desc + wxT(')'));
m_checklst->Check(n);
m_files.Add(name);
if ( !notes.empty() )
{
// for now filename fixed, could make it configurable in the future...
- m_dbgrpt.AddText(_T("notes.txt"), notes, _T("user notes"));
+ m_dbgrpt.AddText(wxT("notes.txt"), notes, wxT("user notes"));
}
return true;
void wxDebugReportDialog::OnView(wxCommandEvent& )
{
const int sel = m_checklst->GetSelection();
- wxCHECK_RET( sel != -1, _T("invalid selection in OnView()") );
+ wxCHECK_RET( sel != wxNOT_FOUND, wxT("invalid selection in OnView()") );
wxFileName fn(m_dbgrpt.GetDirectory(), m_files[sel]);
wxString str;
- wxFFile file(fn.GetFullPath());
+ const wxString& fullPath = fn.GetFullPath();
+#if wxUSE_FFILE
+ wxFFile file(fullPath);
+#elif wxUSE_FILE
+ wxFile file(fullPath);
+#endif
if ( file.IsOpened() && file.ReadAll(&str) )
{
wxDumpPreviewDlg dlg(this, m_files[sel], 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, wxT("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(wxT('%')) != 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 << wxT(" \"") << fn.GetFullPath() << wxT('"');
+ }
}
-
- 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);
+
+ wxON_BLOCK_EXIT1( wxEventLoop::SetCriticalWindow,
+ static_cast<wxWindow *>(NULL) );
+#endif // __WXMSW__
+
return dlg.ShowModal() == wxID_OK && dbgrpt.GetFilesCount() != 0;
}
-#endif // wxUSE_DEBUGREPORT
-
+#endif // wxUSE_DEBUGREPORT && wxUSE_XML