]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/appcmn.cpp
Fixed size buffers are not a good thing. Period.
[wxWidgets.git] / src / common / appcmn.cpp
index 3e0ecff92977985e9598e089c19217f31f80a29b..2398dad313fc922cc080d3a163589646bd27d010 100644 (file)
@@ -42,6 +42,7 @@
 #include "wx/confbase.h"
 #include "wx/tokenzr.h"
 #include "wx/utils.h"
+#include "wx/msgout.h"
 
 #if wxUSE_GUI
     #include "wx/artprov.h"
@@ -188,12 +189,34 @@ int wxAppBase::FilterEvent(wxEvent& WXUNUSED(event))
     return -1;
 }
 
+void wxAppBase::DoInit()
+{
+    if (wxMessageOutput::Get())
+        return;
+        
+    // NB: The standard way of printing help on command line arguments (app --help)
+    //     is (according to common practice):
+    //     - console apps: to stderr (on any platform)
+    //     - GUI apps: stderr on Unix platforms (!)
+    //                 message box under Windows and others
+#if wxUSE_GUI && !defined(__UNIX__)
+    #ifdef __WXMOTIF__
+    wxMessageOutput::Set(new wxMessageOutputLog);
+    #else
+    wxMessageOutput::Set(new wxMessageOutputMessageBox);
+    #endif
+#else
+    wxMessageOutput::Set(new wxMessageOutputStderr);
+#endif
+}
+
 // ----------------------------------------------------------------------------
 // cmd line parsing
 // ----------------------------------------------------------------------------
 
 bool wxAppBase::OnInit()
 {
+    DoInit();
 #if wxUSE_CMDLINE_PARSER
     wxCmdLineParser parser(argc, argv);
 
@@ -424,23 +447,22 @@ void wxTrap()
 
 // show the assert modal dialog
 static
-void ShowAssertDialog(const wxChar *szFile, int nLine, const wxChar *szMsg)
+void ShowAssertDialog(const wxChar *szFile,
+                      int nLine,
+                      const wxChar *szCond,
+                      const wxChar *szMsg)
 {
     // this variable can be set to true to suppress "assert failure" messages
     static bool s_bNoAsserts = FALSE;
 
     wxChar szBuf[4096];
 
-    // make life easier for people using VC++ IDE: clicking on the message
-    // will take us immediately to the place of the failed assert
+    // make life easier for people using VC++ IDE by using this format: like
+    // this, clicking on the message will take us immediately to the place of
+    // the failed assert
     wxSnprintf(szBuf, WXSIZEOF(szBuf),
-#ifdef __VISUALC__
-               wxT("%s(%d): assert failed"),
-#else  // !VC++
-    // make the error message more clear for all the others
-               wxT("Assert failed in file %s at line %d"),
-#endif // VC/!VC
-               szFile, nLine);
+               wxT("%s(%d): assert \"%s\" failed"),
+               szFile, nLine, szCond);
 
     if ( szMsg != NULL )
     {
@@ -501,7 +523,10 @@ void ShowAssertDialog(const wxChar *szFile, int nLine, const wxChar *szMsg)
 }
 
 // this function is called when an assert fails
-void wxOnAssert(const wxChar *szFile, int nLine, const wxChar *szMsg)
+void wxOnAssert(const wxChar *szFile,
+                int nLine,
+                const wxChar *szCond,
+                const wxChar *szMsg)
 {
     // FIXME MT-unsafe
     static bool s_bInAssert = FALSE;
@@ -522,20 +547,23 @@ void wxOnAssert(const wxChar *szFile, int nLine, const wxChar *szMsg)
     {
         // by default, show the assert dialog box - we can't customize this
         // behaviour
-        ShowAssertDialog(szFile, nLine, szMsg);
+        ShowAssertDialog(szFile, nLine, szCond, szMsg);
     }
     else
     {
         // let the app process it as it wants
-        wxTheApp->OnAssert(szFile, nLine, szMsg);
+        wxTheApp->OnAssert(szFile, nLine, szCond, szMsg);
     }
 
     s_bInAssert = FALSE;
 }
 
-void wxAppBase::OnAssert(const wxChar *file, int line, const wxChar *msg)
+void wxAppBase::OnAssert(const wxChar *file,
+                         int line,
+                         const wxChar *cond,
+                         const wxChar *msg)
 {
-    ShowAssertDialog(file, line, msg);
+    ShowAssertDialog(file, line, cond, msg);
 }
 
 #endif  //WXDEBUG