- // open file
- // ---------
- wxFile file;
- bool bOk = FALSE;
- if ( wxFile::Exists(szFileName) ) {
- bool bAppend = FALSE;
- wxString strMsg;
- strMsg.Printf(_("Append log to file '%s' "
- "(choosing [No] will overwrite it)?"), szFileName);
- switch ( wxMessageBox(strMsg, _("Question"), wxYES_NO | wxCANCEL) ) {
- case wxYES:
- bAppend = TRUE;
- break;
-
- case wxNO:
- bAppend = FALSE;
- break;
-
- case wxCANCEL:
- return;
-
- default:
- wxFAIL_MSG(_("invalid message box return value"));
- }
-
- if ( bAppend ) {
- bOk = file.Open(szFileName, wxFile::write_append);
- }
- else {
- bOk = file.Create(szFileName, TRUE /* overwrite */);
- }
- }
- else {
- bOk = file.Create(szFileName);
- }
-
- // retrieve text and save it
- // -------------------------
- int nLines = m_pTextCtrl->GetNumberOfLines();
- for ( int nLine = 0; bOk && nLine < nLines; nLine++ ) {
- bOk = file.Write(m_pTextCtrl->GetLineText(nLine) +
- // we're not going to pull in the whole wxTextFile if all we need is this...
-#if wxUSE_TEXTFILE
- wxTextFile::GetEOL()
-#else // !wxUSE_TEXTFILE
- '\n'
-#endif // wxUSE_TEXTFILE
- );
- }
-
- if ( bOk )
- bOk = file.Close();
-
- if ( !bOk ) {
- wxLogError(_("Can't save log contents to file."));
- }
- else {
- wxLogStatus(this, _("Log saved to the file '%s'."), szFileName);
- }
-}
-#endif // wxUSE_FILE
-
-void wxLogFrame::OnClear(wxCommandEvent& WXUNUSED(event))
-{
- m_pTextCtrl->Clear();
-}
-
-wxLogFrame::~wxLogFrame()
-{
- m_log->OnFrameDelete(this);
-}
-
-// wxLogWindow
-// -----------
-wxLogWindow::wxLogWindow(wxFrame *pParent,
- const wxChar *szTitle,
- bool bShow,
- bool bDoPass)
-{
- m_bPassMessages = bDoPass;
-
- m_pLogFrame = new wxLogFrame(pParent, this, szTitle);
- m_pOldLog = wxLog::SetActiveTarget(this);
-
- if ( bShow )
- m_pLogFrame->Show(TRUE);
-}
-
-void wxLogWindow::Show(bool bShow)
-{
- m_pLogFrame->Show(bShow);
-}
-
-void wxLogWindow::Flush()
-{
- if ( m_pOldLog != NULL )
- m_pOldLog->Flush();
-
- m_bHasMessages = FALSE;
-}
-
-void wxLogWindow::DoLog(wxLogLevel level, const wxChar *szString, time_t t)
-{
- // first let the previous logger show it
- if ( m_pOldLog != NULL && m_bPassMessages ) {
- // FIXME why can't we access protected wxLog method from here (we derive
- // from wxLog)? gcc gives "DoLog is protected in this context", what
- // does this mean? Anyhow, the cast is harmless and let's us do what
- // we want.
- ((wxLogWindow *)m_pOldLog)->DoLog(level, szString, t);
- }
-
- if ( m_pLogFrame ) {
- switch ( level ) {
- case wxLOG_Status:
- // by default, these messages are ignored by wxLog, so process
- // them ourselves
- if ( !wxIsEmpty(szString) )
- {
- wxString str;
- str << _("Status: ") << szString;
- DoLogString(str, t);
- }
- break;
-
- // don't put trace messages in the text window for 2 reasons:
- // 1) there are too many of them
- // 2) they may provoke other trace messages thus sending a program
- // into an infinite loop
- case wxLOG_Trace:
- break;
-
- default:
- // and this will format it nicely and call our DoLogString()
- wxLog::DoLog(level, szString, t);
- }