From efce878a2ae06d22910d4166021fe1c024f30e95 Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Sun, 22 Feb 2009 00:46:25 +0000 Subject: [PATCH] add public wxLog::Log() to avoid ugly casts needed in order to call DoLog() from derived classes git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@59080 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- docs/changes.txt | 3 ++- include/wx/log.h | 10 +++++++++- interface/wx/log.h | 30 +++++++++++++++++++++++++++++- src/common/log.cpp | 11 +++-------- 4 files changed, 43 insertions(+), 11 deletions(-) diff --git a/docs/changes.txt b/docs/changes.txt index f830353777..164e7680fa 100644 --- a/docs/changes.txt +++ b/docs/changes.txt @@ -355,7 +355,8 @@ All: - Added wxProtocol::SetDefaultTimeout(); the default timeout for both wxHTTP and wxFTP protocols is 60 seconds. - Added wxStrnlen() for safe computation of string length. -- Added wxImage::Clear() (troelsk) +- Added wxImage::Clear() (troelsk). +- Added wxLog::Log(). All (Unix): diff --git a/include/wx/log.h b/include/wx/log.h index cfe6b679e4..5a2c119abc 100644 --- a/include/wx/log.h +++ b/include/wx/log.h @@ -243,6 +243,14 @@ public: // change it otherwise) static void TimeStamp(wxString *str); + // this method should only be called from derived classes DoLog() + // implementations and shouldn't be called directly, use logging functions + // instead + void Log(wxLogLevel level, const wxString& msg, time_t t) + { + DoLog(level, msg, t); + } + // make dtor virtual for all derived classes virtual ~wxLog(); @@ -256,7 +264,7 @@ public: #endif protected: - // the logging functions that can be overriden + // the logging functions that can be overridden // default DoLog() prepends the time stamp and a prefix corresponding // to the message to szString and then passes it to DoLogString() diff --git a/interface/wx/log.h b/interface/wx/log.h index 972870e61d..34cbf28abb 100644 --- a/interface/wx/log.h +++ b/interface/wx/log.h @@ -793,7 +793,7 @@ public: Forwards the message at specified level to the @e DoLog() function of the active log target if there is any, does nothing otherwise. */ - static void OnLog(wxLogLevel level, const wxString& szString, time_t t); + static void OnLog(wxLogLevel level, const wxString& msg, time_t t); /** Remove the @a mask from the list of allowed masks for @@ -874,6 +874,34 @@ public: */ static void Suspend(); + /** + Log the given message. + + This function should only be called from the DoLog() implementations in + the derived classes (which can't call wxLog::DoLog() directly as it is + protected), it should not be used for logging new messages which can be + only sent to the currently active logger using OnLog() which also + checks if the logging (for this level) is enabled while this method + just directly calls DoLog(). + + Example of use of this class from wxLogChain: + @code + void wxLogChain::DoLog(wxLogLevel level, const wxString& msg, time_t t) + { + // let the previous logger show it + if ( m_logOld && IsPassingMessages() ) + m_logOld->Log(level, msg, t); + + // and also send it to the new one + if ( m_logNew && m_logNew != this ) + m_logNew->Log(level, msg, t); + } + @endcode + + @since 2.9.0 + */ + void Log(wxLogLevel level, const wxString& msg, time_t timestamp); + protected: /** diff --git a/src/common/log.cpp b/src/common/log.cpp index 9f4134f41b..558f17e658 100644 --- a/src/common/log.cpp +++ b/src/common/log.cpp @@ -915,16 +915,11 @@ void wxLogChain::DoLog(wxLogLevel level, const wxString& szString, time_t t) { // let the previous logger show it if ( m_logOld && IsPassingMessages() ) - { - // bogus cast just to access protected DoLog - ((wxLogChain *)m_logOld)->DoLog(level, szString, t); - } + m_logOld->Log(level, szString, t); + // and also send it to the new one if ( m_logNew && m_logNew != this ) - { - // as above... - ((wxLogChain *)m_logNew)->DoLog(level, szString, t); - } + m_logNew->Log(level, szString, t); } #ifdef __VISUALC__ -- 2.45.2