- }
-
- // message buffering
- // flush shows all messages if they're not logged immediately
- // (FILE and iostream logs don't need it, but wxGuiLog does to avoid
- // showing 17 modal dialogs one after another)
- virtual void Flush();
- // call to Flush() may be optimized: call it only if this function
- // returns true (although Flush() also returns immediately if there
- // is no messages, this functions is more efficient because inline)
- bool HasPendingMessages() const { return m_bHasMessages; }
-
- // only one sink is active at each moment
- // get current log target, will call wxApp::CreateLogTarget() to create one
- // if none exists
- static wxLog *GetActiveTarget();
- // change log target, pLogger may be NULL
- static wxLog *SetActiveTarget(wxLog *pLogger);
-
- // functions controlling the default wxLog behaviour
- // verbose mode is activated by standard command-line '-verbose' option
- void SetVerbose(bool bVerbose = TRUE) { m_bVerbose = bVerbose; }
- // sets the format for timestamp prepended by wxLog::DoLog(): it's
- // passed to strftime() function, see it's documentation for details.
- // no time stamp at all if szTF is NULL or empty
- // NB: the string is not copied, so it's lifetime must be long enough!
- void SetTimeStampFormat(const char *szTF) { m_szTimeFormat = szTF; }
- // trace mask (see wxTraceXXX constants for details)
- static void SetTraceMask(wxTraceMask ulMask) { ms_ulTraceMask = ulMask; }
- // should GetActiveTarget() try to create a new log object if the current
- // is NULL?
- static void DontCreateOnDemand() { ms_bAutoCreate = FALSE; }
-
- // accessors
- // gets the verbose status
- bool GetVerbose() const { return m_bVerbose; }
- // get current time format
- const char *GetTimeStampFormat() const { return m_szTimeFormat; }
- // get trace mask
- static wxTraceMask GetTraceMask() { return ms_ulTraceMask; }
-
- // make dtor virtual for all derived classes
- virtual ~wxLog() { }
+
+ // message buffering
+ // flush shows all messages if they're not logged immediately (FILE
+ // and iostream logs don't need it, but wxGuiLog does to avoid showing
+ // 17 modal dialogs one after another)
+ virtual void Flush();
+ // call to Flush() may be optimized: call it only if this function
+ // returns true (although Flush() also returns immediately if there is
+ // no messages, this functions is more efficient because inline)
+ bool HasPendingMessages() const { return m_bHasMessages; }
+
+ // only one sink is active at each moment
+ // flush the active target if any
+ static void FlushActive()
+ {
+ if ( !ms_suspendCount )
+ {
+ wxLog *log = GetActiveTarget();
+ if ( log && log->HasPendingMessages() )
+ log->Flush();
+ }
+ }
+ // get current log target, will call wxApp::CreateLogTarget() to
+ // create one if none exists
+ static wxLog *GetActiveTarget();
+ // change log target, pLogger may be NULL
+ static wxLog *SetActiveTarget(wxLog *pLogger);
+
+ // suspend the message flushing of the main target until the next call
+ // to Resume() - this is mainly for internal use (to prevent wxYield()
+ // from flashing the messages)
+ static void Suspend() { ms_suspendCount++; }
+ // must be called for each Suspend()!
+ static void Resume() { ms_suspendCount--; }
+
+ // functions controlling the default wxLog behaviour
+ // verbose mode is activated by standard command-line '-verbose'
+ // option
+ void SetVerbose(bool bVerbose = TRUE) { m_bVerbose = bVerbose; }
+ // should GetActiveTarget() try to create a new log object if the
+ // current is NULL?
+ static void DontCreateOnDemand() { ms_bAutoCreate = FALSE; }
+
+ // trace mask (see wxTraceXXX constants for details)
+ static void SetTraceMask(wxTraceMask ulMask) { ms_ulTraceMask = ulMask; }
+ // add string trace mask
+ static void AddTraceMask(const wxString& str) { ms_aTraceMasks.Add(str); }
+ // add string trace mask
+ static void RemoveTraceMask(const wxString& str);
+
+ // sets the timestamp string: this is used as strftime() format string
+ // for the log targets which add time stamps to the messages - set it
+ // to NULL to disable time stamping completely.
+ static void SetTimestamp(const wxChar *ts) { ms_timestamp = ts; }
+
+ // accessors
+ // gets the verbose status
+ bool GetVerbose() const { return m_bVerbose; }
+ // get trace mask
+ static wxTraceMask GetTraceMask() { return ms_ulTraceMask; }
+ // is this trace mask in the list?
+ static bool IsAllowedTraceMask(const wxChar *mask)
+ { return ms_aTraceMasks.Index(mask) != wxNOT_FOUND; }
+
+ // get the current timestamp format string (may be NULL)
+ static const wxChar *GetTimestamp() { return ms_timestamp; }
+
+ // helpers
+ // put the time stamp into the string if ms_timestamp != NULL (don't
+ // change it otherwise)
+ static void TimeStamp(wxString *str);
+
+ // make dtor virtual for all derived classes
+ virtual ~wxLog() { }