-
-void wxLogFrame::OnSave(wxCommandEvent& event)
-{
- // get the file name
- // -----------------
- const char *szFileName = wxSaveFileSelector("log", "txt", "log.txt");
- if ( szFileName == NULL ) {
- // cancelled
- return;
- }
-
- // open file
- // ---------
- wxFile file;
- bool bOk;
- if ( wxFile::Exists(szFileName) ) {
- bool bAppend;
- 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
- // -------------------------
-
-#ifdef __GTK__
- // @@@@ TODO: no GetNumberOfLines and GetLineText in wxGTK yet
- wxLogError("Sorry, this function is not implemented under GTK");
-#else
- int nLines = m_pTextCtrl->GetNumberOfLines();
- for ( int nLine = 0; bOk && nLine < nLines; nLine++ ) {
- bOk = file.Write(m_pTextCtrl->GetLineText(nLine) + wxTextFile::GetEOL());
- }
-#endif //GTK
-
- if ( bOk )
- bOk = file.Close();
-
- if ( !bOk ) {
- wxLogError("Can't save log contents to file.");
- return;
- }
-}
-
-void wxLogFrame::OnClear(wxCommandEvent& event)
-{
- m_pTextCtrl->Clear();
-}
-
-wxLogWindow::wxLogWindow(const wxTString& strTitle, bool bShow)
-{
- m_pOldLog = wxLog::GetActiveTarget();
- m_pLogFrame = new wxLogFrame(strTitle);
-
- if ( bShow )
- m_pLogFrame->Show(TRUE);
-}
-
-void wxLogWindow::Show(bool bShow)
-{
- m_pLogFrame->Show(bShow);
-}
-
-void wxLogWindow::DoLog(wxLogLevel level, const char *szString)
-{
- // first let the previous logger show it
- if ( m_pOldLog != NULL ) {
- // @@@ 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);
- }
-
- // and this will format it nicely and call our DoLogString()
- wxLog::DoLog(level, szString);
-}
-
-void wxLogWindow::DoLogString(const char *szString)
-{
- // put the text into our window
- wxTextCtrl *pText = m_pLogFrame->TextCtrl();
-
- // remove selection (WriteText is in fact ReplaceSelection)
- #ifdef __WINDOWS__
- long nLen = pText->GetLastPosition();
- pText->SetSelection(nLen, nLen);
- #endif // Windows
-
- pText->WriteText(szString);
- pText->WriteText("\n"); // "\n" ok here (_not_ "\r\n")
-
- // ensure that the line can be seen
- // @@@ TODO
-}
-
-wxLogWindow::~wxLogWindow()
-{
- m_pLogFrame->Close(TRUE);
-}
-
-#endif //WX_TEST_MINIMAL