]> git.saurik.com Git - wxWidgets.git/blobdiff - src/generic/dbgrptg.cpp
wxSizer::Fit() now sets client size
[wxWidgets.git] / src / generic / dbgrptg.cpp
index 8a5b73ce39bee6a90ebc50e796e2e082dc261156..f809ca1cd3a1aec527096270cb62fcc0f4dfba2d 100644 (file)
     #pragma hdrstop
 #endif
 
     #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"
 #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
 
 #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/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
 
 // ----------------------------------------------------------------------------
 // wxDumpPreviewDlg: simple class for showing ASCII preview of dump files
@@ -127,14 +132,21 @@ public:
     wxString m_command;
 
 private:
     wxString m_command;
 
 private:
+
+#if wxUSE_FILEDLG
     void OnBrowse(wxCommandEvent& event);
     void OnBrowse(wxCommandEvent& event);
+#endif // wxUSE_FILEDLG
 
     DECLARE_EVENT_TABLE()
     DECLARE_NO_COPY_CLASS(wxDumpOpenExternalDlg)
 };
 
 BEGIN_EVENT_TABLE(wxDumpOpenExternalDlg, wxDialog)
 
     DECLARE_EVENT_TABLE()
     DECLARE_NO_COPY_CLASS(wxDumpOpenExternalDlg)
 };
 
 BEGIN_EVENT_TABLE(wxDumpOpenExternalDlg, wxDialog)
+
+#if wxUSE_FILEDLG
     EVT_BUTTON(wxID_MORE, wxDumpOpenExternalDlg::OnBrowse)
     EVT_BUTTON(wxID_MORE, wxDumpOpenExternalDlg::OnBrowse)
+#endif
+
 END_EVENT_TABLE()
 
 
 END_EVENT_TABLE()
 
 
@@ -176,12 +188,17 @@ wxDumpOpenExternalDlg::wxDumpOpenExternalDlg(wxWindow *parent,
                               );
     sizerH->Add(command,
                     wxSizerFlags(1).Align(wxALIGN_CENTER_VERTICAL));
                               );
     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));
 
     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());
     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();
 }
 
     command->SetFocus();
 }
 
+#if wxUSE_FILEDLG
+
 void wxDumpOpenExternalDlg::OnBrowse(wxCommandEvent& )
 {
     wxFileName fname(m_command);
 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
 
 // ----------------------------------------------------------------------------
 // wxDebugReportDialog: class showing debug report to the user
@@ -277,23 +297,27 @@ wxDebugReportDialog::wxDebugReportDialog(wxDebugReport& dbgrpt)
                               dbgrpt.GetReportName().c_str()),
                               wxDefaultPosition,
                               wxDefaultSize,
                               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;
                      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')
     msg << _("A debug report has been generated in the directory\n")
         << _T('\n')
-        << _T("             \"") << dbgrpt.GetDirectory() << _T("\"\n")
+        << _T("             \"") << debugDir << _T("\"\n")
         << _T('\n')
         << _T('\n')
-        << _("The report contains the files listed below. If any of these ")
-        << _("files contain private information,\n")
-        << _("please uncheck them and they will be removed from the report.\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')
         << _T('\n')
-        << _("If you wish to suppress this debug report completely, please ")
-        << _("choose the \"Cancel\" button,\n")
-        << _("but be warned that it may hinder improving the program, so if\n")
-        << _("at all possible please do continue with the report generation.\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')
         << _("              Thank you and we're sorry for the inconvenience!\n")
         << _T("\n\n"); // just some white space to separate from other stuff
         << _T('\n')
         << _("              Thank you and we're sorry for the inconvenience!\n")
         << _T("\n\n"); // just some white space to separate from other stuff
@@ -327,8 +351,7 @@ wxDebugReportDialog::wxDebugReportDialog(wxDebugReport& dbgrpt)
     // lower part of the dialog: notes field
     wxSizer *sizerNotes = new wxStaticBoxSizer(wxVERTICAL, this, _("&Notes:"));
 
     // lower part of the dialog: notes field
     wxSizer *sizerNotes = new wxStaticBoxSizer(wxVERTICAL, this, _("&Notes:"));
 
-    msg = _("If you have any additional information pertaining to this bug\n");
-    msg << _("report, please enter it here and it will be joined to it:");
+    msg = _("If you have any additional information pertaining to this bug\nreport, please enter it here and it will be joined to it:");
 
     m_notes = new wxTextCtrl(this, wxID_ANY, wxEmptyString,
                              wxDefaultPosition, wxDefaultSize,
 
     m_notes = new wxTextCtrl(this, wxID_ANY, wxEmptyString,
                              wxDefaultPosition, wxDefaultSize,
@@ -389,14 +412,8 @@ bool wxDebugReportDialog::TransferDataFromWindow()
     const wxString notes = m_notes->GetValue();
     if ( !notes.empty() )
     {
     const wxString notes = m_notes->GetValue();
     if ( !notes.empty() )
     {
-        // for now it's fixed, could make it configurable in the future...
-        const wxChar *NOTES_FILE_NAME = _T("notes.txt");
-        wxFileName fn(m_dbgrpt.GetDirectory(), NOTES_FILE_NAME);
-        wxFFile file(fn.GetFullPath(), _T("w"));
-        if ( file.IsOpened() && file.Write(notes) )
-        {
-            m_dbgrpt.AddFile(NOTES_FILE_NAME, _T("user notes"));
-        }
+        // for now filename fixed, could make it configurable in the future...
+        m_dbgrpt.AddText(_T("notes.txt"), notes, _T("user notes"));
     }
 
     return true;
     }
 
     return true;
@@ -409,7 +426,7 @@ bool wxDebugReportDialog::TransferDataFromWindow()
 void wxDebugReportDialog::OnView(wxCommandEvent& )
 {
     const int sel = m_checklst->GetSelection();
 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;
 
     wxFileName fn(m_dbgrpt.GetDirectory(), m_files[sel]);
     wxString str;
@@ -425,18 +442,21 @@ void wxDebugReportDialog::OnView(wxCommandEvent& )
 void wxDebugReportDialog::OnOpen(wxCommandEvent& )
 {
     const int sel = m_checklst->GetSelection();
 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]);
 
     // try to get the command to open this kind of files ourselves
     wxString command;
 
     wxFileName fn(m_dbgrpt.GetDirectory(), m_files[sel]);
 
     // try to get the command to open this kind of files ourselves
     wxString command;
+#if wxUSE_MIMETYPE
     wxFileType *
         ft = wxTheMimeTypesManager->GetFileTypeFromExtension(fn.GetExt());
     if ( ft )
     {
         command = ft->GetOpenCommand(fn.GetFullPath());
     wxFileType *
         ft = wxTheMimeTypesManager->GetFileTypeFromExtension(fn.GetExt());
     if ( ft )
     {
         command = ft->GetOpenCommand(fn.GetFullPath());
+        delete ft;
     }
     }
+#endif // wxUSE_MIMETYPE
 
     // if we couldn't, ask the user
     if ( command.empty() )
 
     // if we couldn't, ask the user
     if ( command.empty() )
@@ -448,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 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());
         }
     }
 
         }
     }
 
@@ -486,8 +513,13 @@ bool wxDebugReportPreviewStd::Show(wxDebugReport& dbgrpt) const
 
     wxDebugReportDialog dlg(dbgrpt);
 
 
     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;
 }
 
     return dlg.ShowModal() == wxID_OK && dbgrpt.GetFilesCount() != 0;
 }
 
-#endif // wxUSE_DEBUGREPORT
-
+#endif // wxUSE_DEBUGREPORT && wxUSE_XML