X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/e51c494324b5e3ee97a559fcfe3a88cd42730b30..debe6624c1e9d4bf3243381153d1e173c849bcd8:/src/common/log.cpp diff --git a/src/common/log.cpp b/src/common/log.cpp index 083eca4523..dd32729b41 100644 --- a/src/common/log.cpp +++ b/src/common/log.cpp @@ -47,11 +47,11 @@ #include #include -// _WINDOWS_ is defined when windows.h is included, -// __WINDOWS__ is defined for MS Windows compilation -#if defined(__WINDOWS__) && !defined(_WINDOWS_) +#ifdef __WINDOWS__ #include -#endif //windows.h +#else //Unix + #include +#endif //Win/Unix // ---------------------------------------------------------------------------- // non member functions @@ -496,6 +496,7 @@ public: // menu callbacks void OnClose(wxCommandEvent& event); + void OnCloseWindow(wxCloseEvent& event); void OnSave (wxCommandEvent& event); void OnClear(wxCommandEvent& event); @@ -521,12 +522,16 @@ BEGIN_EVENT_TABLE(wxLogFrame, wxFrame) EVT_MENU(Menu_Save, wxLogFrame::OnSave) EVT_MENU(Menu_Clear, wxLogFrame::OnClear) - EVT_CLOSE(wxLogFrame::OnClose) + EVT_CLOSE(wxLogFrame::OnCloseWindow) END_EVENT_TABLE() wxLogFrame::wxLogFrame(const char *szTitle) : wxFrame(NULL, -1, szTitle) { + // we don't want to be a top-level frame because it would prevent the + // application termination when all other frames are closed + wxTopLevelWindows.DeleteObject(this); + // @@ kludge: wxSIMPLE_BORDER is simply to prevent wxWindows from creating // a rich edit control instead of a normal one we want m_pTextCtrl = new wxTextCtrl(this, -1, wxEmptyString, wxDefaultPosition, @@ -559,6 +564,12 @@ void wxLogFrame::OnClose(wxCommandEvent& event) Show(FALSE); } +void wxLogFrame::OnCloseWindow(wxCloseEvent& event) +{ + // just hide the window + Show(FALSE); +} + void wxLogFrame::OnSave(wxCommandEvent& event) { // get the file name @@ -608,8 +619,10 @@ void wxLogFrame::OnSave(wxCommandEvent& event) // retrieve text and save it // ------------------------- +#ifdef __GTK__ // @@@@ TODO: no GetNumberOfLines and GetLineText in wxGTK yet -#ifndef __GTK__ + 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()); @@ -630,10 +643,13 @@ void wxLogFrame::OnClear(wxCommandEvent& event) m_pTextCtrl->Clear(); } -wxLogWindow::wxLogWindow(const wxTString& strTitle) +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) @@ -662,8 +678,10 @@ void wxLogWindow::DoLogString(const char *szString) wxTextCtrl *pText = m_pLogFrame->TextCtrl(); // remove selection (WriteText is in fact ReplaceSelection) - long nLen = pText->GetLastPosition(); - pText->SetSelection(nLen, nLen); + #ifdef __WINDOWS__ + long nLen = pText->GetLastPosition(); + pText->SetSelection(nLen, nLen); + #endif // Windows pText->WriteText(szString); pText->WriteText("\n"); // "\n" ok here (_not_ "\r\n") @@ -812,28 +830,28 @@ void wxOnAssert(const char *szFile, int nLine, const char *szMsg) // send it to the normal log destination wxLogDebug(szBuf); - #ifdef __WINDOWS__ - if ( !s_bNoAsserts ) { - strcat(szBuf, _("\nDo you want to stop the program?" - "\nYou can also choose [Cancel] to suppress " - "further warnings.")); - - switch ( ::MessageBox(NULL, szBuf, _("Debug"), - MB_YESNOCANCEL | MB_ICONINFORMATION) ) { - case IDYES: + if ( !s_bNoAsserts ) { + strcat(szBuf, _("\nDo you want to stop the program?" + "\nYou can also choose [Cancel] to suppress " + "further warnings.")); + + switch ( wxMessageBox(szBuf, _("Debug"), + wxYES_NO | wxCANCEL | wxICON_STOP ) ) { + case wxYES: + #ifdef __WINDOWS__ DebugBreak(); - break; + #else // Unix + raise(SIGTRAP); + #endif // Win/Unix + break; - case IDCANCEL: - s_bNoAsserts = TRUE; - break; - } + case wxCANCEL: + s_bNoAsserts = TRUE; + break; + + //case wxNO: nothing to do } - #else // !Windows - // @@@@ don't know how to start the debugger under generic Unix - s_bNoAsserts = TRUE; // suppress 'unused var' warning - abort(); - #endif // Windows/!Windows + } } #endif //DEBUG