-#ifndef wxUSE_NOGUI
-// ----------------------------------------------------------------------------
-// wxLogTextCtrl implementation
-// ----------------------------------------------------------------------------
-wxLogTextCtrl::wxLogTextCtrl(wxTextCtrl *pTextCtrl)
-// @@@ TODO: in wxGTK wxTextCtrl doesn't derive from streambuf
-
-// Also, in DLL mode in wxMSW, can't use it.
-#if defined(NO_TEXT_WINDOW_STREAM)
-#else
- : wxLogStream(new ostream(pTextCtrl))
-#endif
-{
-}
-
-wxLogTextCtrl::~wxLogTextCtrl()
-{
- delete m_ostr;
-}
-
-// ----------------------------------------------------------------------------
-// wxLogGui implementation
-// ----------------------------------------------------------------------------
-
-wxLogGui::wxLogGui()
-{
- m_bErrors = FALSE;
-}
-
-void wxLogGui::Flush()
-{
- if ( !m_bHasMessages )
- return;
-
- // do it right now to block any new calls to Flush() while we're here
- m_bHasMessages = FALSE;
-
- // @@@ ugly...
-
- // concatenate all strings (but not too many to not overfill the msg box)
- wxString str;
- size_t nLines = 0,
- nMsgCount = m_aMessages.Count();
-
- // start from the most recent message
- for ( size_t n = nMsgCount; n > 0; n-- ) {
- // for Windows strings longer than this value are wrapped (NT 4.0)
- const size_t nMsgLineWidth = 156;
-
- nLines += (m_aMessages[n - 1].Len() + nMsgLineWidth - 1) / nMsgLineWidth;
-
- if ( nLines > 25 ) // don't put too many lines in message box
- break;
-
- str << m_aMessages[n - 1] << "\n";
- }
-
- if ( m_bErrors ) {
- wxMessageBox(str, _("Error"), wxOK | wxICON_EXCLAMATION);
- }
- else {
- wxMessageBox(str, _("Information"), wxOK | wxICON_INFORMATION);
- }
-
- // no undisplayed messages whatsoever
- m_bErrors = FALSE;
- m_aMessages.Empty();
-}
-
-// the default behaviour is to discard all informational messages if there
-// are any errors/warnings.
-void wxLogGui::DoLog(wxLogLevel level, const char *szString)
-{
- switch ( level ) {
- case wxLOG_Info:
- if ( GetVerbose() )
- case wxLOG_Message:
- if ( !m_bErrors ) {
- m_aMessages.Add(szString);
- m_bHasMessages = TRUE;
- }
- break;
-
- case wxLOG_Status:
- {
- // find the top window and set it's status text if it has any
- wxFrame *pFrame = gs_pFrame;
- if ( pFrame == NULL ) {
- wxWindow *pWin = wxTheApp->GetTopWindow();
- if ( pWin != NULL && pWin->IsKindOf(CLASSINFO(wxFrame)) ) {
- pFrame = (wxFrame *)pWin;
- }
- }
-
- if ( pFrame != NULL )
- pFrame->SetStatusText(szString);
- }
- break;
-
- case wxLOG_Trace:
- case wxLOG_Debug:
- #ifdef __WXDEBUG__
- {
- wxString strTime = TimeStamp();
-
- #ifdef __WXMSW__
- // don't prepend debug/trace here: it goes to the debug window
- // anyhow, but do put a timestamp
- OutputDebugString(strTime + szString + "\n\r");
- #else
- // send them to stderr
- /*
- fprintf(stderr, "%s %s: %s\n",
- strTime.c_str(),
- level == wxLOG_Trace ? _("Trace") : _("Debug"),
- szString);
- */
- fprintf(stderr, "%s\n",
- szString);
- fflush(stderr);
- #endif
- }
- #endif
- break;
-
- case wxLOG_FatalError:
- // show this one immediately
- wxMessageBox(szString, _("Fatal error"), wxICON_HAND);
- break;
-
- case wxLOG_Error:
- case wxLOG_Warning:
- // discard earlier informational messages if this is the 1st error
- if ( !m_bErrors ) {
- m_aMessages.Empty();
- m_bHasMessages = TRUE;
- m_bErrors = TRUE;
- }
-
- m_aMessages.Add(szString);
- break;
-
- default:
- wxFAIL_MSG(_("unknown log level in wxLogGui::DoLog"));
- }
-}