diff --git a/include/wx/msgout.h b/include/wx/msgout.h index 60d7c7b996..bd3719e79d 100755 --- a/include/wx/msgout.h +++ b/include/wx/msgout.h @@ -43,7 +43,8 @@ public: // show a message to the user virtual void Printf(const wxChar* format, ...) ATTRIBUTE_PRINTF_2 = 0; - // gets the current wxMessageOutput object + // gets the current wxMessageOutput object (may be NULL during + // initialization or shutdown) static wxMessageOutput* Get(); // sets the global wxMessageOutput instance; returns the previous one @@ -53,6 +54,20 @@ private: static wxMessageOutput* ms_msgOut; }; +// ---------------------------------------------------------------------------- +// implementation showing the message to the user in "best" possible way: uses +// native message box if available (currently only under Windows) and stderr +// otherwise; unlike wxMessageOutputMessageBox this class is always safe to use +// ---------------------------------------------------------------------------- + +class WXDLLIMPEXP_BASE wxMessageOutputBest : public wxMessageOutput +{ +public: + wxMessageOutputBest() { } + + virtual void Printf(const wxChar* format, ...) ATTRIBUTE_PRINTF_2; +}; + // ---------------------------------------------------------------------------- // implementation which sends output to stderr // ---------------------------------------------------------------------------- diff --git a/src/common/msgout.cpp b/src/common/msgout.cpp index 77c19feb6d..f5642aa6c3 100755 --- a/src/common/msgout.cpp +++ b/src/common/msgout.cpp @@ -88,6 +88,26 @@ wxMessageOutput* wxMessageOutput::Set(wxMessageOutput* msgout) return old; } +// ---------------------------------------------------------------------------- +// wxMessageOutputBest +// ---------------------------------------------------------------------------- + +void wxMessageOutputBest::Printf(const wxChar* format, ...) +{ + va_list args; + va_start(args, format); + wxString out; + + out.PrintfV(format, args); + va_end(args); + +#ifdef __WINDOWS__ + ::MessageBox(NULL, out, _T("wxWidgets"), MB_ICONINFORMATION | MB_OK); +#else // !__WINDOWS__ + fprintf(stderr, "%s", (const char*) out.mb_str()); +#endif // __WINDOWS__/!__WINDOWS__ +} + // ---------------------------------------------------------------------------- // wxMessageOutputStderr // ----------------------------------------------------------------------------