- extern void WXDLLEXPORT wxLog##level(wxTString strFormat, ...)
-
-// one function per each level
-DECLARE_LOG_FUNCTION(FatalError);
-DECLARE_LOG_FUNCTION(Error);
-DECLARE_LOG_FUNCTION(Warning);
-DECLARE_LOG_FUNCTION(Message);
-DECLARE_LOG_FUNCTION(Info);
-DECLARE_LOG_FUNCTION(Status);
-DECLARE_LOG_FUNCTION(Verbose);
-
-// additional one: as wxLogError, but also logs last system call error code
-// and the corresponding error message if available
-DECLARE_LOG_FUNCTION(SysError);
-
-// and another one which also takes the error code (for those broken APIs
-// that don't set the errno (like registry APIs in Win32))
-void WXDLLEXPORT wxLogSysError(long lErrCode, wxTString strFormat, ...);
-
-// debug functions don't translate their arguments
-#undef DECLARE_LOG_FUNCTION
-#define DECLARE_LOG_FUNCTION(level) \
- extern void WXDLLEXPORT wxLog##level(const char *szFormat, ...)
-
-DECLARE_LOG_FUNCTION(Debug);
-DECLARE_LOG_FUNCTION(Trace);
-
-// are we in 'verbose' mode?
-// (note that it's often handy to change this var manually from the
-// debugger, thus enabling/disabling verbose reporting for some
-// parts of the program only)
-WXDLLEXPORT_DATA(extern bool) g_bVerbose;
-
-// fwd decl to avoid including iostream.h here
-class ostream;
-
-// ----------------------------------------------------------------------------
-// get error code/error message from system in a portable way
-// ----------------------------------------------------------------------------
-
-// return the last system error code
-unsigned long WXDLLEXPORT wxSysErrorCode();
-// return the error message for given (or last if 0) error code
-const char* WXDLLEXPORT wxSysErrorMsg(unsigned long nErrCode = 0);
-
-// ----------------------------------------------------------------------------
-// debug only logging functions: use them with API name and error code
-// ----------------------------------------------------------------------------
+extern void WXDLLEXPORT wxLog##level(const wxChar *szFormat, ...)
+#define DECLARE_LOG_FUNCTION2(level, arg1) \
+extern void WXDLLEXPORT wxLog##level(arg1, const wxChar *szFormat, ...)
+
+ // a generic function for all levels (level is passes as parameter)
+ DECLARE_LOG_FUNCTION2(Generic, wxLogLevel level);
+
+ // one function per each level
+ DECLARE_LOG_FUNCTION(FatalError);
+ DECLARE_LOG_FUNCTION(Error);
+ DECLARE_LOG_FUNCTION(Warning);
+ DECLARE_LOG_FUNCTION(Message);
+ DECLARE_LOG_FUNCTION(Info);
+ DECLARE_LOG_FUNCTION(Verbose);
+
+ // this function sends the log message to the status line of the top level
+ // application frame, if any
+ DECLARE_LOG_FUNCTION(Status);
+
+ // this one is the same as previous except that it allows to explicitly
+ // specify the frame to which the output should go
+ DECLARE_LOG_FUNCTION2(Status, wxFrame *pFrame);
+
+ // additional one: as wxLogError, but also logs last system call error code
+ // and the corresponding error message if available
+ DECLARE_LOG_FUNCTION(SysError);
+
+ // and another one which also takes the error code (for those broken APIs
+ // that don't set the errno (like registry APIs in Win32))
+ DECLARE_LOG_FUNCTION2(SysError, long lErrCode);
+
+ // debug functions do nothing in release mode
+#ifdef __WXDEBUG__
+ DECLARE_LOG_FUNCTION(Debug);
+
+ // first king of LogTrace is uncoditional: it doesn't check the level,
+ DECLARE_LOG_FUNCTION(Trace);
+
+ // this second version will only log the message if the mask had been
+ // added to the list of masks with AddTraceMask()
+ DECLARE_LOG_FUNCTION2(Trace, const char *mask);
+
+ // the last one does nothing if all of level bits are not set
+ // in wxLog::GetActive()->GetTraceMask() - it's deprecated in favour of
+ // string identifiers
+ DECLARE_LOG_FUNCTION2(Trace, wxTraceMask mask);
+#else //!debug
+ // these functions do nothing in release builds
+ inline void wxLogDebug(const wxChar *, ...) { }
+ inline void wxLogTrace(const wxChar *, ...) { }
+ inline void wxLogTrace(wxTraceMask, const wxChar *, ...) { }
+ inline void wxLogTrace(const wxChar *, const wxChar *, ...) { }
+#endif
+
+
+ // are we in 'verbose' mode?
+ // (note that it's often handy to change this var manually from the
+ // debugger, thus enabling/disabling verbose reporting for some
+ // parts of the program only)
+ WXDLLEXPORT_DATA(extern bool) g_bVerbose;
+
+ // ----------------------------------------------------------------------------
+ // get error code/error message from system in a portable way
+ // ----------------------------------------------------------------------------
+
+ // return the last system error code
+ WXDLLEXPORT unsigned long wxSysErrorCode();
+ // return the error message for given (or last if 0) error code
+ WXDLLEXPORT const wxChar* wxSysErrorMsg(unsigned long nErrCode = 0);
+
+ // ----------------------------------------------------------------------------
+ // debug only logging functions: use them with API name and error code
+ // ----------------------------------------------------------------------------
+
+#ifndef __TFILE__
+#define __XFILE__(x) _T(x)
+#define __TFILE__ __XFILE__(__FILE__)
+#endif
+
+#ifdef __WXDEBUG__
+ // 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, \
+ 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, \
+ rc, wxSysErrorMsg(rc))
+#endif // VC++/!VC++
+
+ #define wxLogLastError(api) wxLogApiError(api, wxSysErrorCode())