// discarded unless the string "foo" has been added to the list of allowed
// ones with AddTraceMask()
-#define wxTRACE_MemAlloc "memalloc" // trace memory allocation (new/delete)
-#define wxTRACE_Messages "messages" // trace window messages/X callbacks
-#define wxTRACE_ResAlloc "resalloc" // trace GDI resource allocation
-#define wxTRACE_RefCount "refcount" // trace various ref counting operations
+#define wxTRACE_MemAlloc wxT("memalloc") // trace memory allocation (new/delete)
+#define wxTRACE_Messages wxT("messages") // trace window messages/X callbacks
+#define wxTRACE_ResAlloc wxT("resalloc") // trace GDI resource allocation
+#define wxTRACE_RefCount wxT("refcount") // trace various ref counting operations
#ifdef __WXMSW__
- #define wxTRACE_OleCalls "ole" // OLE interface calls
+ #define wxTRACE_OleCalls wxT("ole") // OLE interface calls
#endif
// the trace masks have been superceded by symbolic trace constants, they're
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
static bool ms_doLog; // FALSE => all logging disabled
static bool ms_bAutoCreate; // create new log targets on demand?
+ static size_t ms_suspendCount; // if positive, logs are not flushed
+
// format string for strftime(), if NULL, time stamping log messages is
// disabled
static const wxChar *ms_timestamp;
// empty everything
void Clear();
- wxArrayString m_aMessages;
- wxArrayLong m_aTimes;
+ wxArrayString m_aMessages; // the log message texts
+ wxArrayInt m_aSeverity; // one of wxLOG_XXX values
+ wxArrayLong m_aTimes; // the time of each message
bool m_bErrors, // do we have any errors?
m_bWarnings; // any warnings?
};
// make life easier for people using VC++ IDE: clicking on the message
// will take us immediately to the place of the failed API
#ifdef __VISUALC__
- #define wxLogApiError(api, rc) \
- wxLogDebug(T("%s(%d): '%s' failed with error 0x%08lx (%s)."), \
- __TFILE__, __LINE__, api, \
+ #define wxLogApiError(api, rc) \
+ wxLogDebug(wxT("%s(%d): '%s' failed with error 0x%08lx (%s)."), \
+ __TFILE__, __LINE__, _T(api), \
rc, wxSysErrorMsg(rc))
#else // !VC++
- #define wxLogApiError(api, rc) \
- wxLogDebug(T("In file %s at line %d: '%s' failed with " \
- "error 0x%08lx (%s)."), \
- __TFILE__, __LINE__, api, \
+ #define wxLogApiError(api, rc) \
+ wxLogDebug(wxT("In file %s at line %d: '%s' failed with " \
+ "error 0x%08lx (%s)."), \
+ __TFILE__, __LINE__, _T(api), \
rc, wxSysErrorMsg(rc))
#endif // VC++/!VC++