From 5b077ec744c49b77a9efdb050556e361c0865bb7 Mon Sep 17 00:00:00 2001 From: =?utf8?q?V=C3=A1clav=20Slav=C3=ADk?= Date: Thu, 12 Apr 2007 21:13:05 +0000 Subject: [PATCH] moved vararg handling code in wxMessageOutput to single method and added simple Output(wxString) virtual method instead of DoPrintf(format,...) git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@45432 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- include/wx/msgout.h | 13 ++++---- src/common/msgout.cpp | 73 +++++++++++++++++++------------------------ 2 files changed, 39 insertions(+), 47 deletions(-) diff --git a/include/wx/msgout.h b/include/wx/msgout.h index 0445407d28..6364357464 100755 --- a/include/wx/msgout.h +++ b/include/wx/msgout.h @@ -40,7 +40,8 @@ public: WX_DEFINE_VARARG_FUNC_VOID(Printf, DoPrintf) protected: - virtual void DoPrintf(const wxChar* format, ...) ATTRIBUTE_PRINTF_2 = 0; + void DoPrintf(const wxChar* format, ...) ATTRIBUTE_PRINTF_2; + virtual void Output(const wxString& str) = 0; }; #ifdef __VISUALC__ @@ -81,7 +82,7 @@ public: wxMessageOutputBest() { } protected: - virtual void DoPrintf(const wxChar* format, ...) ATTRIBUTE_PRINTF_2; + virtual void Output(const wxString& str); }; // ---------------------------------------------------------------------------- @@ -94,7 +95,7 @@ public: wxMessageOutputStderr() { } protected: - virtual void DoPrintf(const wxChar* format, ...) ATTRIBUTE_PRINTF_2; + virtual void Output(const wxString& str); }; // ---------------------------------------------------------------------------- @@ -109,7 +110,7 @@ public: wxMessageOutputMessageBox() { } protected: - virtual void DoPrintf(const wxChar* format, ...) ATTRIBUTE_PRINTF_2; + virtual void Output(const wxString& str); }; #endif // wxUSE_GUI @@ -124,7 +125,7 @@ public: wxMessageOutputDebug() { } protected: - virtual void DoPrintf(const wxChar* format, ...) ATTRIBUTE_PRINTF_2; + virtual void Output(const wxString& str); }; // ---------------------------------------------------------------------------- @@ -137,7 +138,7 @@ public: wxMessageOutputLog() { } protected: - virtual void DoPrintf(const wxChar* format, ...) ATTRIBUTE_PRINTF_2; + virtual void Output(const wxString& str); }; #endif diff --git a/src/common/msgout.cpp b/src/common/msgout.cpp index 8fb5ed8066..9ba8be65d3 100755 --- a/src/common/msgout.cpp +++ b/src/common/msgout.cpp @@ -76,6 +76,18 @@ wxMessageOutput* wxMessageOutput::Set(wxMessageOutput* msgout) return old; } +void wxMessageOutputBase::DoPrintf(const wxChar* format, ...) +{ + va_list args; + va_start(args, format); + wxString out; + + out.PrintfV(format, args); + va_end(args); + + Output(out); +} + // ---------------------------------------------------------------------------- // wxMessageOutputBest // ---------------------------------------------------------------------------- @@ -95,24 +107,22 @@ static inline bool IsInConsole() #endif // __WINDOWS__ -void wxMessageOutputBest::DoPrintf(const wxChar* format, ...) +void wxMessageOutputBest::Output(const wxString& str) { - va_list args; - va_start(args, format); - wxString out; - - out.PrintfV(format, args); - va_end(args); - #ifdef __WINDOWS__ if ( !IsInConsole() ) { - ::MessageBox(NULL, out, _T("wxWidgets"), MB_ICONINFORMATION | MB_OK); + ::MessageBox(NULL, str, _T("wxWidgets"), MB_ICONINFORMATION | MB_OK); } else #endif // __WINDOWS__/!__WINDOWS__ { - fprintf(stderr, "%s", (const char*) out.mb_str()); + const wxWX2MBbuf buf(str.mb_str()); + + if ( buf ) + fprintf(stderr, "%s", (const char*) buf); + else // print at least something + fprintf(stderr, "%s", (const char*) str.ToAscii()); } } @@ -120,31 +130,23 @@ void wxMessageOutputBest::DoPrintf(const wxChar* format, ...) // wxMessageOutputStderr // ---------------------------------------------------------------------------- -void wxMessageOutputStderr::DoPrintf(const wxChar* format, ...) +void wxMessageOutputStderr::Output(const wxString& str) { - va_list args; - va_start(args, format); - wxString out; - - out.PrintfV(format, args); - va_end(args); + const wxWX2MBbuf buf(str.mb_str()); - fprintf(stderr, "%s", (const char*) out.mb_str()); + if ( buf ) + fprintf(stderr, "%s", (const char*) buf); + else // print at least something + fprintf(stderr, "%s", (const char*) str.ToAscii()); } // ---------------------------------------------------------------------------- // wxMessageOutputDebug // ---------------------------------------------------------------------------- -void wxMessageOutputDebug::DoPrintf(const wxChar* format, ...) +void wxMessageOutputDebug::Output(const wxString& str) { - wxString out; - - va_list args; - va_start(args, format); - - out.PrintfV(format, args); - va_end(args); + wxString out(str); #if defined(__WXMSW__) && !defined(__WXMICROWIN__) out.Replace(wxT("\t"), wxT(" ")); @@ -175,15 +177,9 @@ void wxMessageOutputDebug::DoPrintf(const wxChar* format, ...) // wxMessageOutputLog // ---------------------------------------------------------------------------- -void wxMessageOutputLog::DoPrintf(const wxChar* format, ...) +void wxMessageOutputLog::Output(const wxString& str) { - wxString out; - - va_list args; - va_start(args, format); - - out.PrintfV(format, args); - va_end(args); + wxString out(str); out.Replace(wxT("\t"), wxT(" ")); @@ -198,14 +194,9 @@ void wxMessageOutputLog::DoPrintf(const wxChar* format, ...) #if wxUSE_GUI -void wxMessageOutputMessageBox::DoPrintf(const wxChar* format, ...) +void wxMessageOutputMessageBox::Output(const wxString& str) { - va_list args; - va_start(args, format); - wxString out; - - out.PrintfV(format, args); - va_end(args); + wxString out(str); // the native MSW msg box understands the TABs, others don't #ifndef __WXMSW__ -- 2.45.2