void NewBuildTab::DoProcessOutput(bool compilationEnded, bool isSummaryLine) { if ( !compilationEnded && m_output.Find(wxT("\n")) == wxNOT_FOUND ) { // still dont have a complete line return; } wxArrayString lines = ::wxStringTokenize(m_output, wxT("\n"), wxTOKEN_RET_DELIMS); m_output.Clear(); // Process only completed lines (i.e. a line that ends with '\n') for(size_t i=0; i<lines.GetCount(); i++) { if( !compilationEnded && !lines.Item(i).EndsWith(wxT("\n")) ) { m_output << lines.Item(i); return; } wxString buildLine = lines.Item(i);//.Trim().Trim(false); // If this is a line similar to 'Entering directory `' // add the path in the directories array DoSearchForDirectory(buildLine); BuildLineInfo *buildLineInfo = DoProcessLine(buildLine, isSummaryLine); //keep the line info if(buildLineInfo->GetFilename().IsEmpty() == false) { m_buildInfoPerFile.insert(std::make_pair(buildLineInfo->GetFilename(), buildLineInfo)); } // Append the line content if( buildLineInfo->GetSeverity() == SV_ERROR ) { if ( !isSummaryLine ) { buildLine.Prepend(ERROR_MARKER); } } else if( buildLineInfo->GetSeverity() == SV_WARNING ) { if ( !isSummaryLine ) { buildLine.Prepend(WARNING_MARKER); } } if ( isSummaryLine ) { // Add a marker for drawing the bitmap if ( m_errorCount ) { buildLine.Prepend(SUMMARY_MARKER_ERROR); } else if ( m_warnCount ) { buildLine.Prepend(SUMMARY_MARKER_WARNING); } else { buildLine.Prepend(SUMMARY_MARKER_SUCCESS); } buildLine.Prepend(SUMMARY_MARKER); } wxVector<wxVariant> data; data.push_back( wxVariant(buildLine) ); // Keep the line number in the build tab buildLineInfo->SetLineInBuildTab( m_listctrl->GetItemCount() ); m_listctrl->AppendItem(data, (wxUIntPtr)buildLineInfo); if ( clConfig::Get().Read("build-auto-scroll", true) ) { unsigned int count = m_listctrl->GetStore()->GetItemCount(); wxDataViewItem lastItem = m_listctrl->GetStore()->GetItem(count-1); m_listctrl->EnsureVisible( lastItem ); } } }
void NewBuildTab::DoProcessOutput(bool compilationEnded, bool isSummaryLine) { wxUnusedVar(isSummaryLine); if(!compilationEnded && m_output.Find(wxT("\n")) == wxNOT_FOUND) { // still dont have a complete line return; } wxArrayString lines = ::wxStringTokenize(m_output, wxT("\n"), wxTOKEN_RET_DELIMS); m_output.Clear(); // Process only completed lines (i.e. a line that ends with '\n') for(size_t i = 0; i < lines.GetCount(); ++i) { if(!compilationEnded && !lines.Item(i).EndsWith(wxT("\n"))) { m_output << lines.Item(i); return; } wxString buildLine = lines.Item(i); //.Trim().Trim(false); // If this is a line similar to 'Entering directory `' // add the path in the directories array DoSearchForDirectory(buildLine); BuildLineInfo* buildLineInfo = DoProcessLine(buildLine); // keep the line info if(buildLineInfo->GetFilename().IsEmpty() == false) { m_buildInfoPerFile.insert(std::make_pair(buildLineInfo->GetFilename(), buildLineInfo)); } if(isSummaryLine) { buildLine.Trim(); buildLine.Prepend("===="); buildLine.Append("===="); buildLineInfo->SetSeverity(SV_NONE); } // Keep the line number in the build tab buildLineInfo->SetLineInBuildTab(m_view->GetLineCount() - 1); // -1 because the view always has 1 extra "\n" // Store the line info *before* we add the text // it is needed in the OnStyle function m_viewData.insert(std::make_pair(buildLineInfo->GetLineInBuildTab(), buildLineInfo)); m_view->SetEditable(true); buildLine.Trim(); wxString modText; ::clStripTerminalColouring(buildLine, modText); int curline = m_view->GetLineCount() - 1; m_view->AppendText(modText + "\n"); // get the newly added line width int endPosition = m_view->GetLineEndPosition(curline); // get character position from begin int beginPosition = m_view->PositionFromLine(curline); // and end of line wxPoint beginPos = m_view->PointFromPosition(beginPosition); wxPoint endPos = m_view->PointFromPosition(endPosition); int curLen = (endPos.x - beginPos.x) + 10; m_maxlineWidth = wxMax(m_maxlineWidth, curLen); if(m_maxlineWidth > 0) { m_view->SetScrollWidth(m_maxlineWidth); } m_view->SetEditable(false); if(clConfig::Get().Read(kConfigBuildAutoScroll, true)) { m_view->ScrollToEnd(); } } }