X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/0758c46ee65053bc70bd0ef5a73fb30aeec7986c..059d234d4176165d975048eaa5436ef40af7d037:/src/generic/logg.cpp diff --git a/src/generic/logg.cpp b/src/generic/logg.cpp index ae690ab5ff..c2e487c0ea 100644 --- a/src/generic/logg.cpp +++ b/src/generic/logg.cpp @@ -53,10 +53,6 @@ #include "wx/arrstr.h" #include "wx/msgout.h" -#if wxUSE_THREADS - #include "wx/thread.h" -#endif // wxUSE_THREADS - #ifdef __WXMSW__ // for OutputDebugString() #include "wx/msw/private.h" @@ -80,7 +76,7 @@ #include "wx/datetime.h" // the suffix we add to the button to show that the dialog can be expanded -#define EXPAND_SUFFIX _T(" >>") +#define EXPAND_SUFFIX wxT(" >>") #define CAN_SAVE_FILES (wxUSE_FILE && wxUSE_FILEDLG) @@ -100,7 +96,7 @@ static wxString TimeStamp(const wxString& format, time_t t) if ( !wxStrftime(buf, WXSIZEOF(buf), format, wxLocaltime_r(&t, &tm)) ) { // buffer is too small? - wxFAIL_MSG(_T("strftime() failed")); + wxFAIL_MSG(wxT("strftime() failed")); } return wxString(buf); #else // !wxUSE_DATETIME @@ -298,6 +294,8 @@ wxLogGui::DoShowMultipleLogMessages(const wxArrayString& messages, void wxLogGui::Flush() { + wxLog::Flush(); + if ( !m_bHasMessages ) return; @@ -373,7 +371,7 @@ void wxLogGui::DoLogRecord(wxLogLevel level, wxFrame *pFrame = NULL; // check if the frame was passed to us explicitly - wxUIntPtr ptr = NULL; + wxUIntPtr ptr = 0; if ( info.GetNumValue(wxLOG_KEY_FRAME, &ptr) ) { pFrame = static_cast(wxUIntToPtr(ptr)); @@ -451,14 +449,11 @@ public: #endif // CAN_SAVE_FILES void OnClear(wxCommandEvent& event); - // this function is safe to call from any thread (notice that it should be - // also called from the main thread to ensure that the messages logged from - // it appear in correct order with the messages from the other threads) - void AddLogMessage(const wxString& message); - - // actually append the messages logged from secondary threads to the text - // control during idle time in the main thread - virtual void OnInternalIdle(); + // do show the message in the text control + void ShowLogMessage(const wxString& message) + { + m_pTextCtrl->AppendText(message + wxS('\n')); + } private: // use standard ids for our commands! @@ -472,24 +467,9 @@ private: // common part of OnClose() and OnCloseWindow() void DoClose(); - // do show the message in the text control - void DoShowLogMessage(const wxString& message) - { - m_pTextCtrl->AppendText(message + wxS('\n')); - } - wxTextCtrl *m_pTextCtrl; wxLogWindow *m_log; - // queue of messages logged from other threads which need to be displayed - wxArrayString m_pendingMessages; - -#if wxUSE_THREADS - // critical section to protect access to m_pendingMessages - wxCriticalSection m_critSection; -#endif // wxUSE_THREADS - - DECLARE_EVENT_TABLE() wxDECLARE_NO_COPY_CLASS(wxLogFrame); }; @@ -602,43 +582,6 @@ void wxLogFrame::OnClear(wxCommandEvent& WXUNUSED(event)) m_pTextCtrl->Clear(); } -void wxLogFrame::OnInternalIdle() -{ - { - wxCRIT_SECT_LOCKER(locker, m_critSection); - - const size_t count = m_pendingMessages.size(); - for ( size_t n = 0; n < count; n++ ) - { - DoShowLogMessage(m_pendingMessages[n]); - } - - m_pendingMessages.clear(); - } // release m_critSection - - wxFrame::OnInternalIdle(); -} - -void wxLogFrame::AddLogMessage(const wxString& message) -{ - wxCRIT_SECT_LOCKER(locker, m_critSection); - -#if wxUSE_THREADS - if ( !wxThread::IsMain() || !m_pendingMessages.empty() ) - { - // message needs to be queued for later showing - m_pendingMessages.Add(message); - - wxWakeUpIdle(); - } - else // we are the main thread and no messages are queued, so we can - // log the message directly -#endif // wxUSE_THREADS - { - DoShowLogMessage(message); - } -} - wxLogFrame::~wxLogFrame() { m_log->OnFrameDelete(this); @@ -681,7 +624,7 @@ void wxLogWindow::DoLogTextAtLevel(wxLogLevel level, const wxString& msg) if ( level == wxLOG_Trace ) return; - m_pLogFrame->AddLogMessage(msg); + m_pLogFrame->ShowLogMessage(msg); } wxFrame *wxLogWindow::GetFrame() const @@ -864,10 +807,10 @@ void wxLogDialog::CreateDetailsControls(wxWindow *parent) // no need to translate these strings as they're not shown to the // user anyhow (we use wxLC_NO_HEADER style) - m_listctrl->InsertColumn(0, _T("Message")); + m_listctrl->InsertColumn(0, wxT("Message")); if (hasTimeStamp) - m_listctrl->InsertColumn(1, _T("Time")); + m_listctrl->InsertColumn(1, wxT("Time")); // prepare the imagelist static const int ICON_SIZE = 16;