X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/e6e6fcc922ec529e761feb6b52cf01f9db934e79..d1efca1a2ac2dd20d47d217ce2be1bcc506377e0:/src/common/appcmn.cpp diff --git a/src/common/appcmn.cpp b/src/common/appcmn.cpp index 05d7cb3bfe..2398dad313 100644 --- a/src/common/appcmn.cpp +++ b/src/common/appcmn.cpp @@ -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" @@ -182,12 +183,40 @@ void wxAppBase::SetActive(bool active, wxWindow * WXUNUSED(lastFocus)) #endif // wxUSE_GUI +int wxAppBase::FilterEvent(wxEvent& WXUNUSED(event)) +{ + // process the events normally by default + 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); @@ -418,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 ) { @@ -495,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; @@ -516,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