%% Created: some time ago
%% RCS-ID: $Id$
%% Copyright: (c) 1997-2001 Vadim Zeitlin
-%% License: wxWidgets license
+%% License: wxWindows license
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\section{\class{wxLog}}\label{wxlog}
\latexignore{\rtfignore{\wxheading{Function groups}}}
-\membersection{Static functions}
+\membersection{Global functions}
The functions in this section work with and manipulate the active log target.
The \helpref{OnLog()}{wxlogonlog} is called by the {\it wxLogXXX()} functions
\helpref{Suspend}{wxlogsuspend}\\
\helpref{Resume}{wxlogresume}
-\membersection{Logging functions}
+\membersection{Logging functions}\label{loggingfunctions}
There are two functions which must be implemented by any derived class to
actually process the log messages: \helpref{DoLog}{wxlogdolog} and
\helpref{SetTimestamp}{wxlogsettimestamp}\\
\helpref{GetTimestamp}{wxloggettimestamp}\\
\helpref{SetTraceMask}{wxlogsettracemask}\\
-\helpref{GetTraceMask}{wxloggettracemask}
+\helpref{GetTraceMask}{wxloggettracemask}\\
+\helpref{SetRepetitionCounting}{wxlogsetrepetitioncounting}\\
+\helpref{GetRepetitionCounting}{wxloggetrepetitioncounting}
%%%%% MEMBERS HERE %%%%%
\helponly{\insertatlevel{2}{
\membersection{wxLog::OnLog}\label{wxlogonlog}
-\func{static void}{OnLog}{\param{wxLogLevel }{ level}, \param{const char * }{ message}}
+\func{static void}{OnLog}{\param{wxLogLevel }{ level}, \param{const wxString\& }{ message}}
Forwards the message at specified level to the {\it DoLog()} function of the
active log target if there is any, does nothing otherwise.
\func{static wxLog *}{SetActiveTarget}{\param{wxLog * }{ logtarget}}
Sets the specified log target as the active one. Returns the pointer to the
-previous active log target (may be NULL).
+previous active log target (may be NULL). To suppress logging use a new
+instance of wxLogNull not NULL. If the active log target is set to NULL a
+new default log target will be created when logging occurs.
\membersection{wxLog::Suspend}\label{wxlogsuspend}
\membersection{wxLog::DoLog}\label{wxlogdolog}
-\func{virtual void}{DoLog}{\param{wxLogLevel }{level}, \param{const wxChar }{*msg}, \param{time\_t }{timestamp}}
+\func{virtual void}{DoLog}{\param{wxLogLevel }{level}, \param{const wxString\& }{msg}, \param{time\_t }{timestamp}}
Called to process the message of the specified severity. {\it msg} is the text
of the message as specified in the call of {\it wxLogXXX()} function which
\membersection{wxLog::DoLogString}\label{wxlogdologstring}
-\func{virtual void}{DoLogString}{\param{const wxChar }{*msg}, \param{time\_t }{timestamp}}
+\func{virtual void}{DoLogString}{\param{const wxString\& }{msg}, \param{time\_t }{timestamp}}
-Called to log the specified string. The timestamp is already included into the
+Called to log the specified string. The timestamp is already included in the
string but still passed to this function.
A simple implementation may just send the string to {\tt stdout} or, better,
Returns the current log level limit.
+\membersection{wxLog::SetRepetitionCounting}\label{wxlogsetrepetitioncounting}
+
+\func{static void}{SetRepetitionCounting}{\param{bool }{ repetCounting = true}}
+
+Enables logging mode in which a log message is logged once, and in case exactly
+the same message successively repeats one or more times, only the number of
+repetitions is logged.
+
+\membersection{wxLog::GetRepetitionCounting}\label{wxloggetrepetitioncounting}
+
+\func{static bool}{GetRepetitionCounting}{\void}
+
+Returns whether the repetition counting mode is enabled.
+
+
\membersection{wxLog::SetTimestamp}\label{wxlogsettimestamp}
-\func{void}{SetTimestamp}{\param{const char * }{ format}}
+\func{static void}{SetTimestamp}{\param{const wxString\&}{ format}}
Sets the timestamp format prepended by the default log targets to all
messages. The string may contain any normal characters as well as \%
prefixed format specificators, see {\it strftime()} manual for details.
-Passing a NULL value (not empty string) to this function disables message timestamping.
+Passing an empty string to this function disables message time stamping.
+
+\membersection{wxLog::DisableTimestamp}\label{wxlogdisabletimestamp}
+
+\func{void}{SetTimestamp}{\param{const wxString\&}{ format}}
+
+Disables time stamping of the log messages.
+
+\newsince{2.9}
\membersection{wxLog::GetTimestamp}\label{wxloggettimestamp}
-\constfunc{const char *}{GetTimestamp}{\void}
+\func{static const wxString\&}{GetTimestamp}{\void}
Returns the current timestamp format string.
\membersection{wxLog::GetTraceMask}\label{wxloggettracemask}
+\func{static wxTraceMask}{GetTraceMask}{\void}
+
Returns the current trace mask, see \helpref{Customization}{wxlogcustomization} section
for details.
\membersection{wxLog::IsAllowedTraceMask}\label{wxlogisallowedtracemask}
-\func{static bool}{IsAllowedTraceMask}{\param{const wxChar *}{mask}}
+\func{static bool}{IsAllowedTraceMask}{\param{const wxString\& }{mask}}
Returns true if the {\it mask} is one of allowed masks for
\helpref{wxLogTrace}{wxlogtrace}.
\latexignore{\rtfignore{\wxheading{Members}}}
-\membersection{wxLogChain::wxLogChain}\label{wxlogchainwxlogchain}
+\membersection{wxLogChain::wxLogChain}\label{wxlogchainctor}
\func{}{wxLogChain}{\param{wxLog *}{logger}}
Sets the specified {\tt logger} (which may be {\tt NULL}) as the default log
target but the log messages are also passed to the previous log target if any.
-\membersection{wxLogChain::\destruct{wxLogChain}}
+\membersection{wxLogChain::\destruct{wxLogChain}}\label{wxlogchaindtor}
\func{}{\destruct{wxLogChain}}{\void}
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}
\func{void}{SetLog}{\param{wxLog *}{logger}}
Sets another log target to use (may be {\tt NULL}). The log target specified
-in the \helpref{constructor}{wxlogchainwxlogchain} or in a previous call to
+in the \helpref{constructor}{wxlogchainctor} or in a previous call to
this function is deleted.
This doesn't change the old log target value (the one the messages are
\latexignore{\rtfignore{\wxheading{Members}}}
-\membersection{wxLogGui::wxLogGui}
+\membersection{wxLogGui::wxLogGui}\label{wxlogguictor}
\func{}{wxLogGui}{\void}
\latexignore{\rtfignore{\wxheading{Members}}}
-\membersection{wxLogNull::wxLogNull}
+\membersection{wxLogNull::wxLogNull}\label{wxlognullctor}
\func{}{wxLogNull}{\void}
Suspends logging.
-\membersection{wxLogNull::\destruct{wxLogNull}}
+\membersection{wxLogNull::\destruct{wxLogNull}}\label{wxlognulldtor}
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}
\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 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\latexignore{\rtfignore{\wxheading{Members}}}
-\membersection{wxLogStderr::wxLogStderr}
+\membersection{wxLogStderr::wxLogStderr}\label{wxlogstderrctor}
\func{}{wxLogStderr}{\param{FILE }{*fp = NULL}}
\latexignore{\rtfignore{\wxheading{Members}}}
-\membersection{wxLogStream::wxLogStream}
+\membersection{wxLogStream::wxLogStream}\label{wxlogstreamctor}
\func{}{wxLogStream}{\param{std::ostream }{*ostr = NULL}}
\wxheading{See also}
-\helpref{wxLogTextCtrl}{wxlogtextctrl},\\
+\helpref{wxTextCtrl}{wxtextctrl},\\
\helpref{wxStreamToTextRedirector}{wxstreamtotextredirector}
\latexignore{\rtfignore{\wxheading{Members}}}
-\membersection{wxLogTextCtrl::wxLogTextCtrl}
+\membersection{wxLogTextCtrl::wxLogTextCtrl}\label{wxlogtextctrlctor}
\func{}{wxLogTextCtrl}{\param{wxTextCtrl }{*textctrl}}
\wxheading{Derived from}
-\helpref{wxLogPassThrough}{wxlogpassthrough}
+\helpref{wxLogInterposer}{wxloginterposer}
\wxheading{Include files}
\latexignore{\rtfignore{\wxheading{Members}}}
-\membersection{wxLogWindow::wxLogWindow}
+\membersection{wxLogWindow::wxLogWindow}\label{wxlogwindowctor}
\func{}{wxLogWindow}{\param{wxFrame }{*parent}, \param{const wxChar }{*title}, \param{bool }{show = {\tt true}}, \param{bool }{passToOld = {\tt true}}}
Shows or hides the frame.
-\membersection{wxLogWindow::GetFrame}
+\membersection{wxLogWindow::GetFrame}\label{wxlogwindowgetframe}
\constfunc{wxFrame *}{GetFrame}{\void}
Returns the associated log frame window. This may be used to position or resize
it but use \helpref{wxLogWindow::Show}{wxlogwindowshow} to show or hide it.
-\membersection{wxLogWindow::OnFrameCreate}
+\membersection{wxLogWindow::OnFrameCreate}\label{wxlogwindowonframecreate}
\func{virtual void}{OnFrameCreate}{\param{wxFrame }{*frame}}
\membersection{wxLogWindow::OnFrameClose}\label{wxlogwindowonframeclose}
-\func{virtual void}{OnFrameClose}{\param{wxFrame }{*frame}}
+\func{virtual bool}{OnFrameClose}{\param{wxFrame }{*frame}}
Called if the user closes the window interactively, will not be
called if it is destroyed for another reason (such as when program