]> git.saurik.com Git - wxWidgets.git/commitdiff
Added DetachOldLog to avoid destruction of old log target
authorJulian Smart <julian@anthemion.co.uk>
Thu, 21 Jun 2007 12:44:38 +0000 (12:44 +0000)
committerJulian Smart <julian@anthemion.co.uk>
Thu, 21 Jun 2007 12:44:38 +0000 (12:44 +0000)
Renamed wxLogPassThrough to wxLogInterposer
Added wxLogInterposerTemp

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@46580 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

docs/latex/wx/log.tex
docs/latex/wx/tlog.tex
include/wx/log.h
src/common/log.cpp

index 41fd6f6700d8aa8c2980762dd1bfa6510cd75699..ae311235b433a7fdb94435ada0f4c40a5150a72d 100644 (file)
@@ -434,6 +434,13 @@ target but the log messages are also passed to the previous log target if any.
 
 Destroys the previous log target.
 
+\membersection{wxLogChain::DetachOldLog}\label{wxlogchaindetacholdlog}
+
+\func{void}{DetachOldLog}{\void}
+
+Detaches the old log target so it won't be destroyed when the wxLogChain object
+is destroyed.
+
 \membersection{wxLogChain::GetOldLog}\label{wxlogchaingetoldlog}
 
 \constfunc{wxLog *}{GetOldLog}{\void}
@@ -564,19 +571,47 @@ Suspends logging.
 
 Resumes logging.
 
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% wxLogPassThrough %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% wxLogInterposer %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
-\section{\class{wxLogPassThrough}}\label{wxlogpassthrough}
+\section{\class{wxLogInterposer}}\label{wxloginterposer}
 
 A special version of \helpref{wxLogChain}{wxlogchain} which uses itself as the
-new log target. Maybe more clearly, it means that this is a log target which
-forwards the log messages to the previously installed one in addition to
+new log target. It forwards log messages to the previously installed one in addition to
 processing them itself.
 
 Unlike \helpref{wxLogChain}{wxlogchain} which is usually used directly as is,
 this class must be derived from to implement \helpref{DoLog}{wxlogdolog}
 and/or \helpref{DoLogString}{wxlogdologstring} methods.
 
+wxLogInterposer destroys the previous log target in its destructor. If you
+don't want this to happen, use wxLogInterposerTemp instead.
+
+\wxheading{Derived from}
+
+\helpref{wxLogChain}{wxlogchain}
+
+\wxheading{Include files}
+
+<wx/log.h>
+
+\latexignore{\rtfignore{\wxheading{Members}}}
+
+\membersection{wxLogInterposer::wxLogInterposer}\label{wxloginterposerctor}
+
+The default constructor installs this object as the current active log target.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% wxLogInterposerTemp %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\section{\class{wxLogInterposerTemp}}\label{wxloginterposertemp}
+
+A special version of \helpref{wxLogChain}{wxlogchain} which uses itself as the
+new log target. It forwards log messages to the previously installed one in addition to
+processing them itself. Unlike \helpref{wxLogInterposer}{wxloginterposer}, it doesn't
+delete the old target which means it can be used to temporarily redirect log output.
+
+As per wxLogInterposer, this class must be derived from to implement \helpref{DoLog}{wxlogdolog}
+and/or \helpref{DoLogString}{wxlogdologstring} methods.
+
 \wxheading{Derived from}
 
 \helpref{wxLogChain}{wxlogchain}
@@ -587,9 +622,9 @@ and/or \helpref{DoLogString}{wxlogdologstring} methods.
 
 \latexignore{\rtfignore{\wxheading{Members}}}
 
-\membersection{wxLogPassThrough::wxLogPassThrough}\label{wxlogpassthroughctor}
+\membersection{wxLogInterposerTemp::wxLogInterposerTemp}\label{wxloginterposertempctor}
 
-Default ctor installs this object as the current active log target.
+The default constructor installs this object as the current active log target.
 
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% wxLogStderr %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
@@ -693,7 +728,7 @@ them normally by showing the standard log dialog.
 
 \wxheading{Derived from}
 
-\helpref{wxLogPassThrough}{wxlogpassthrough}
+\helpref{wxLogInterposer}{wxloginterposer}
 
 \wxheading{Include files}
 
index 713757d6ca88a4475c0935e4bb8c3c224a1b096d..f195d43ede85b267484f657dcdf69aa326b4e34d 100644 (file)
@@ -8,7 +8,8 @@ Classes: \helpref{wxLog}{wxlog},\\
 \helpref{wxLogGui}{wxloggui},\\
 \helpref{wxLogNull}{wxlognull},\\
 \helpref{wxLogChain}{wxlogchain},\\
-\helpref{wxLogPassThrough}{wxlogpassthrough},\\
+\helpref{wxLogInterposer}{wxloginterposer},\\
+\helpref{wxLogInterposerTemp}{wxloginterposertemp},\\
 \helpref{wxStreamToTextRedirector}{wxstreamtotextredirector}
 
 This is a general overview of logging classes provided by wxWidgets. The word
@@ -166,6 +167,6 @@ reasons it is unwanted, just use this construction:
 
 The log targets can also be combined: for example you may wish to redirect the
 messages somewhere else (for example, to a log file) but also process them as
-normally. For this the \helpref{wxLogChain}{wxlogchain} and 
-\helpref{wxLogPassThrough}{wxlogpassthrough} can be used.
+normally. For this the \helpref{wxLogChain}{wxlogchain}, \helpref{wxLogInterposer}{wxloginterposer} and\rtfsp
+\helpref{wxLogInterposerTemp}{wxloginterposertemp} can be used.
 
index a28d31300c2dbd7d6ec3f85df68ce7dcecf7ba6f..4b4f745408b3183ea2bb166756caab4ed36db7c5 100644 (file)
@@ -439,6 +439,9 @@ public:
     // override base class version to flush the old logger as well
     virtual void Flush();
 
+    // call to avoid destroying the old log target
+    void DetachOldLog() { m_logOld = NULL; }
+
 protected:
     // pass the chain to the old logger if needed
     virtual void DoLog(wxLogLevel level, const wxString& szString, time_t t);
@@ -457,13 +460,28 @@ private:
 };
 
 // a chain log target which uses itself as the new logger
-class WXDLLIMPEXP_BASE wxLogPassThrough : public wxLogChain
+
+#define wxLogPassThrough wxLogInterposer
+
+class WXDLLIMPEXP_BASE wxLogInterposer : public wxLogChain
+{
+public:
+    wxLogInterposer();
+
+private:
+    DECLARE_NO_COPY_CLASS(wxLogInterposer)
+};
+
+// a temporary interposer which doesn't destroy the old log target
+// (calls DetachOldLog)
+
+class WXDLLIMPEXP_BASE wxLogInterposerTemp : public wxLogChain
 {
 public:
-    wxLogPassThrough();
+    wxLogInterposerTemp();
 
 private:
-    DECLARE_NO_COPY_CLASS(wxLogPassThrough)
+    DECLARE_NO_COPY_CLASS(wxLogInterposerTemp)
 };
 
 #if wxUSE_GUI
index e0bc9671105b3bcf90b42ca61dea903c71bc2028..89ed1264fcb3fca2087408c1c0772a2e9902122a 100644 (file)
@@ -865,18 +865,28 @@ void wxLogChain::DoLog(wxLogLevel level, const wxString& szString, time_t t)
     }
 }
 
-// ----------------------------------------------------------------------------
-// wxLogPassThrough
-// ----------------------------------------------------------------------------
-
 #ifdef __VISUALC__
     // "'this' : used in base member initializer list" - so what?
     #pragma warning(disable:4355)
 #endif // VC++
 
-wxLogPassThrough::wxLogPassThrough()
+// ----------------------------------------------------------------------------
+// wxLogInterposer
+// ----------------------------------------------------------------------------
+
+wxLogInterposer::wxLogInterposer()
+                : wxLogChain(this)
+{
+}
+
+// ----------------------------------------------------------------------------
+// wxLogInterposerTemp
+// ----------------------------------------------------------------------------
+
+wxLogInterposerTemp::wxLogInterposerTemp()
                 : wxLogChain(this)
 {
+       DetachOldLog();
 }
 
 #ifdef __VISUALC__