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:
Vadim Zeitlin 1999-07-15 15:45:50 +00:00
parent 6a008b33c4
commit d2e1ef1928
3 changed files with 65 additions and 20 deletions

View File

@ -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

View File

@ -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());

View File

@ -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;