From e12a951e754d0e6a67a211a1d8fb788e0a166094 Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Mon, 6 Jun 2005 23:34:24 +0000 Subject: [PATCH] added wxMessageOutputBest which tries to show the message to the user in the best possible way git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@34555 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- include/wx/msgout.h | 17 ++++++++++++++++- src/common/msgout.cpp | 20 ++++++++++++++++++++ 2 files changed, 36 insertions(+), 1 deletion(-) 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 // ---------------------------------------------------------------------------- -- 2.45.2