1. wxFFile::Close() buglet fixed
2. wxLogTextCtrl doesn't use streams any more git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@3008 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
parent
6a008b33c4
commit
d2e1ef1928
@ -153,6 +153,11 @@ public:
|
|||||||
// add string trace mask
|
// add string trace mask
|
||||||
static void RemoveTraceMask(const wxString& str);
|
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
|
// accessors
|
||||||
// gets the verbose status
|
// gets the verbose status
|
||||||
bool GetVerbose() const { return m_bVerbose; }
|
bool GetVerbose() const { return m_bVerbose; }
|
||||||
@ -162,6 +167,14 @@ public:
|
|||||||
static bool IsAllowedTraceMask(const wxChar *mask)
|
static bool IsAllowedTraceMask(const wxChar *mask)
|
||||||
{ return ms_aTraceMasks.Index(mask) != wxNOT_FOUND; }
|
{ 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
|
// make dtor virtual for all derived classes
|
||||||
virtual ~wxLog() { }
|
virtual ~wxLog() { }
|
||||||
|
|
||||||
@ -185,6 +198,10 @@ private:
|
|||||||
static bool ms_doLog; // FALSE => all logging disabled
|
static bool ms_doLog; // FALSE => all logging disabled
|
||||||
static bool ms_bAutoCreate; // create new log targets on demand?
|
static bool ms_bAutoCreate; // create new log targets on demand?
|
||||||
|
|
||||||
|
// format string for strftime(), if NULL, time stamping log messages is
|
||||||
|
// disabled
|
||||||
|
static const wxChar *ms_timestamp;
|
||||||
|
|
||||||
static wxTraceMask ms_ulTraceMask; // controls wxLogTrace behaviour
|
static wxTraceMask ms_ulTraceMask; // controls wxLogTrace behaviour
|
||||||
static wxArrayString ms_aTraceMasks; // more powerful filter for wxLogTrace
|
static wxArrayString ms_aTraceMasks; // more powerful filter for wxLogTrace
|
||||||
};
|
};
|
||||||
@ -226,16 +243,19 @@ protected:
|
|||||||
|
|
||||||
#ifndef wxUSE_NOGUI
|
#ifndef wxUSE_NOGUI
|
||||||
|
|
||||||
#if wxUSE_STD_IOSTREAM
|
|
||||||
// log everything to a text window (GUI only of course)
|
// log everything to a text window (GUI only of course)
|
||||||
class WXDLLEXPORT wxLogTextCtrl : public wxLogStream
|
class WXDLLEXPORT wxLogTextCtrl : public wxLog
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
// we just create an ostream from wxTextCtrl and use it in base class
|
|
||||||
wxLogTextCtrl(wxTextCtrl *pTextCtrl);
|
wxLogTextCtrl(wxTextCtrl *pTextCtrl);
|
||||||
~wxLogTextCtrl();
|
|
||||||
|
private:
|
||||||
|
// implement sink function
|
||||||
|
virtual void DoLogString(const wxChar *szString, time_t t);
|
||||||
|
|
||||||
|
// the control we use
|
||||||
|
wxTextCtrl *m_pTextCtrl;
|
||||||
};
|
};
|
||||||
#endif
|
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
// GUI log target, the default one for wxWindows programs
|
// GUI log target, the default one for wxWindows programs
|
||||||
|
@ -74,7 +74,7 @@ bool wxFFile::Close()
|
|||||||
{
|
{
|
||||||
if ( IsOpened() )
|
if ( IsOpened() )
|
||||||
{
|
{
|
||||||
if ( !fclose(m_fp) )
|
if ( fclose(m_fp) != 0 )
|
||||||
{
|
{
|
||||||
wxLogSysError(_("can't close file '%s'"), m_name.c_str());
|
wxLogSysError(_("can't close file '%s'"), m_name.c_str());
|
||||||
|
|
||||||
|
@ -315,6 +315,20 @@ void wxLog::RemoveTraceMask(const wxString& str)
|
|||||||
ms_aTraceMasks.Remove((size_t)index);
|
ms_aTraceMasks.Remove((size_t)index);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void wxLog::TimeStamp(wxString *str)
|
||||||
|
{
|
||||||
|
if ( ms_timestamp )
|
||||||
|
{
|
||||||
|
wxChar buf[256];
|
||||||
|
time_t timeNow;
|
||||||
|
(void)time(&timeNow);
|
||||||
|
wxStrftime(buf, WXSIZEOF(buf), ms_timestamp, localtime(&timeNow));
|
||||||
|
|
||||||
|
str->Empty();
|
||||||
|
*str << buf << _T(": ");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void wxLog::DoLog(wxLogLevel level, const wxChar *szString, time_t t)
|
void wxLog::DoLog(wxLogLevel level, const wxChar *szString, time_t t)
|
||||||
{
|
{
|
||||||
switch ( level ) {
|
switch ( level ) {
|
||||||
@ -377,8 +391,9 @@ wxLogStderr::wxLogStderr(FILE *fp)
|
|||||||
|
|
||||||
void wxLogStderr::DoLogString(const wxChar *szString, time_t WXUNUSED(t))
|
void wxLogStderr::DoLogString(const wxChar *szString, time_t WXUNUSED(t))
|
||||||
{
|
{
|
||||||
wxString str(szString);
|
wxString str;
|
||||||
str << _T('\n');
|
TimeStamp(&str);
|
||||||
|
str << szString << _T('\n');
|
||||||
|
|
||||||
fputs(str.mb_str(), m_fp);
|
fputs(str.mb_str(), m_fp);
|
||||||
fflush(m_fp);
|
fflush(m_fp);
|
||||||
@ -415,19 +430,19 @@ void wxLogStream::DoLogString(const wxChar *szString, time_t WXUNUSED(t))
|
|||||||
// wxLogTextCtrl implementation
|
// wxLogTextCtrl implementation
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
#if wxUSE_STD_IOSTREAM
|
|
||||||
wxLogTextCtrl::wxLogTextCtrl(wxTextCtrl *pTextCtrl)
|
wxLogTextCtrl::wxLogTextCtrl(wxTextCtrl *pTextCtrl)
|
||||||
#if !defined(NO_TEXT_WINDOW_STREAM)
|
|
||||||
: wxLogStream(new ostream(pTextCtrl))
|
|
||||||
#endif
|
|
||||||
{
|
{
|
||||||
|
m_pTextCtrl = pTextCtrl;
|
||||||
}
|
}
|
||||||
|
|
||||||
wxLogTextCtrl::~wxLogTextCtrl()
|
void wxLogTextCtrl::DoLogString(const wxChar *szString, time_t t)
|
||||||
{
|
{
|
||||||
delete m_ostr;
|
wxString msg;
|
||||||
|
TimeStamp(&msg);
|
||||||
|
msg << szString << _T('\n');
|
||||||
|
|
||||||
|
m_pTextCtrl->AppendText(msg);
|
||||||
}
|
}
|
||||||
#endif // wxUSE_STD_IOSTREAM
|
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
// wxLogGui implementation (FIXME MT-unsafe)
|
// wxLogGui implementation (FIXME MT-unsafe)
|
||||||
@ -533,12 +548,16 @@ void wxLogGui::DoLog(wxLogLevel level, const wxChar *szString, time_t t)
|
|||||||
#ifdef __WXMSW__
|
#ifdef __WXMSW__
|
||||||
// don't prepend debug/trace here: it goes to the
|
// don't prepend debug/trace here: it goes to the
|
||||||
// debug window anyhow, but do put a timestamp
|
// debug window anyhow, but do put a timestamp
|
||||||
OutputDebugString(wxString(szString) + _T("\n\r"));
|
wxString str;
|
||||||
|
TimeStamp(&str);
|
||||||
|
str << szString << _T("\n\r");
|
||||||
|
OutputDebugString(str);
|
||||||
#else
|
#else
|
||||||
// send them to stderr
|
// send them to stderr
|
||||||
wxFprintf(stderr, _T("%s: %s\n"),
|
wxFprintf(stderr, _T("%s: %s\n"),
|
||||||
level == wxLOG_Trace ? _T("Trace") : _T("Debug"),
|
level == wxLOG_Trace ? _T("Trace")
|
||||||
szString);
|
: _T("Debug"),
|
||||||
|
szString);
|
||||||
fflush(stderr);
|
fflush(stderr);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
@ -832,8 +851,11 @@ void wxLogWindow::DoLogString(const wxChar *szString, time_t WXUNUSED(t))
|
|||||||
pText->SetSelection(nLen, nLen);
|
pText->SetSelection(nLen, nLen);
|
||||||
#endif // Windows
|
#endif // Windows
|
||||||
|
|
||||||
pText->WriteText(szString);
|
wxString msg;
|
||||||
pText->WriteText(_T("\n")); // "\n" ok here (_not_ "\r\n")
|
TimeStamp(&msg);
|
||||||
|
msg << szString << _T('\n');
|
||||||
|
|
||||||
|
pText->AppendText(msg);
|
||||||
|
|
||||||
// TODO ensure that the line can be seen
|
// TODO ensure that the line can be seen
|
||||||
}
|
}
|
||||||
@ -873,6 +895,9 @@ wxLogWindow::~wxLogWindow()
|
|||||||
wxLog *wxLog::ms_pLogger = (wxLog *)NULL;
|
wxLog *wxLog::ms_pLogger = (wxLog *)NULL;
|
||||||
bool wxLog::ms_doLog = TRUE;
|
bool wxLog::ms_doLog = TRUE;
|
||||||
bool wxLog::ms_bAutoCreate = TRUE;
|
bool wxLog::ms_bAutoCreate = TRUE;
|
||||||
|
|
||||||
|
const wxChar *wxLog::ms_timestamp = "%X"; // time only, no date
|
||||||
|
|
||||||
wxTraceMask wxLog::ms_ulTraceMask = (wxTraceMask)0;
|
wxTraceMask wxLog::ms_ulTraceMask = (wxTraceMask)0;
|
||||||
wxArrayString wxLog::ms_aTraceMasks;
|
wxArrayString wxLog::ms_aTraceMasks;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user