void NewBuildTab::OnBuildEnded(clCommandEvent& e) { e.Skip(); CL_DEBUG("Build Ended!"); m_buildInProgress = false; DoProcessOutput(true, false); std::vector<LEditor*> editors; clMainFrame::Get()->GetMainBook()->GetAllEditors(editors, MainBook::kGetAll_Default); for(size_t i = 0; i < editors.size(); i++) { MarkEditor(editors.at(i)); } // Add a summary line wxString problemcount = wxString::Format(wxT("%d %s, %d %s"), m_errorCount, _("errors"), m_warnCount, _("warnings")); wxString term = problemcount; long elapsed = m_sw.Time() / 1000; if(elapsed > 10) { long sec = elapsed % 60; long hours = elapsed / 3600; long minutes = (elapsed % 3600) / 60; term << wxString::Format(wxT(", %s: %02ld:%02ld:%02ld %s"), _("total time"), hours, minutes, sec, _("seconds")); } m_output = term; DoProcessOutput(true, true); if(m_buildInterrupted) { wxString InterruptedMsg; InterruptedMsg << _("(Build Cancelled)") << wxT("\n\n"); m_output = InterruptedMsg; DoProcessOutput(true, false); } // Hide / Show the build tab according to the settings DoToggleWindow(); // make it invalid m_curError = m_errorsAndWarningsList.begin(); CL_DEBUG("Posting wxEVT_BUILD_ENDED event"); // notify the plugins that the build has ended clBuildEvent buildEvent(wxEVT_BUILD_ENDED); buildEvent.SetErrorCount(m_errorCount); buildEvent.SetWarningCount(m_warnCount); EventNotifier::Get()->AddPendingEvent(buildEvent); }
bool NewBuildTab::DoSelectAndOpen(const wxDataViewItem& item) { if( item.IsOk() == false ) return false; m_listctrl->UnselectAll(); // Clear any selection m_listctrl->EnsureVisible(item); m_listctrl->Select(item); BuildLineInfo* bli = (BuildLineInfo*)m_listctrl->GetItemData(item); if( bli ) { wxFileName fn(bli->GetFilename()); if ( !fn.IsAbsolute() ) { std::vector<wxFileName> files; std::vector<wxFileName> candidates; ManagerST::Get()->GetWorkspaceFiles(files, true); for(size_t i=0; i<files.size(); ++i) { if( files.at(i).GetFullName() == fn.GetFullName() ) { candidates.push_back( files.at(i) ); } } if ( candidates.empty() ) return false; if ( candidates.size() == 1 ) fn = candidates.at(0); else { // prompt the user wxArrayString fileArr; for(size_t i=0; i<candidates.size(); ++i) { fileArr.Add( candidates.at(i).GetFullPath() ); } wxString selection = wxGetSingleChoice(_("Select a file to open:"), _("Choose a file"), fileArr); if(selection.IsEmpty()) return false; fn = wxFileName(selection); // if we resolved it now, open the file there is no point in searching this file // in m_buildInfoPerFile since the key on this map is kept as full name LEditor* editor = clMainFrame::Get()->GetMainBook()->FindEditor(fn.GetFullPath()); if ( !editor ) { editor = clMainFrame::Get()->GetMainBook()->OpenFile(fn.GetFullPath(), wxT(""), bli->GetLineNumber(), wxNOT_FOUND, OF_AddJump); } if ( editor ) { // We already got compiler markers set here, just goto the line clMainFrame::Get()->GetMainBook()->SelectPage( editor ); editor->GotoLine(bli->GetLineNumber()); SetActive(editor); return true; } } } if ( fn.IsAbsolute() ) { // try to locate the editor first LEditor* editor = clMainFrame::Get()->GetMainBook()->FindEditor(fn.GetFullPath()); if ( !editor ) { // Open it editor = clMainFrame::Get()->GetMainBook()->OpenFile(bli->GetFilename(), wxT(""), bli->GetLineNumber(), wxNOT_FOUND, OF_AddJump); } if ( editor ) { if ( !editor->HasCompilerMarkers()) MarkEditor( editor ); int lineNumber = bli->GetLineNumber(); if ( lineNumber > 0 ) { lineNumber --; } // We already got compiler markers set here, just goto the line clMainFrame::Get()->GetMainBook()->SelectPage( editor ); editor->GotoLine( bli->GetLineNumber() ); editor->ScrollToLine( bli->GetLineNumber() ); editor->EnsureVisible( lineNumber ); editor->EnsureCaretVisible(); SetActive(editor); return true; } } } return false; }
bool NewBuildTab::DoSelectAndOpen(int buildViewLine, bool centerLine) { if(!m_viewData.count(buildViewLine)) { return false; } BuildLineInfo* bli = m_viewData.find(buildViewLine)->second; if(bli) { wxFileName fn(bli->GetFilename()); // Highlight the clicked line on the view m_view->MarkerDeleteAll(LEX_GCC_MARKER); m_view->MarkerAdd(bli->GetLineInBuildTab(), LEX_GCC_MARKER); if(!fn.IsAbsolute()) { std::set<wxString> files; std::vector<wxFileName> candidates; ManagerST::Get()->GetWorkspaceFiles(files); std::for_each(files.begin(), files.end(), [&](const wxString& filepath) { wxFileName fnFilePath(filepath); if(fnFilePath.GetFullName() == fn.GetFullName()) { candidates.push_back(fnFilePath); } }); if(candidates.empty()) { return false; } if(candidates.size() == 1) { fn = candidates.at(0); } else { // prompt the user wxArrayString fileArr; for(size_t i = 0; i < candidates.size(); ++i) { fileArr.Add(candidates.at(i).GetFullPath()); } clSingleChoiceDialog dlg(EventNotifier::Get()->TopFrame(), fileArr); dlg.SetLabel(_("Select a file to open")); if(dlg.ShowModal() != wxID_OK) return false; wxString selection = dlg.GetSelection(); if(selection.IsEmpty()) return false; fn = wxFileName(selection); // if we resolved it now, open the file there is no point in searching this file // in m_buildInfoPerFile since the key on this map is kept as full name clEditor* editor = clMainFrame::Get()->GetMainBook()->FindEditor(fn.GetFullPath()); if(!editor) { editor = clMainFrame::Get()->GetMainBook()->OpenFile(fn.GetFullPath(), wxT(""), bli->GetLineNumber(), wxNOT_FOUND, OF_AddJump); } if(editor) { DoCentreErrorLine(bli, editor, centerLine); return true; } } } if(fn.IsAbsolute()) { // try to locate the editor first clEditor* editor = clMainFrame::Get()->GetMainBook()->FindEditor(fn.GetFullPath()); if(!editor) { // Open it editor = clMainFrame::Get()->GetMainBook()->OpenFile(bli->GetFilename(), wxT(""), bli->GetLineNumber(), wxNOT_FOUND, OF_AddJump); } if(editor) { if(!editor->HasCompilerMarkers()) MarkEditor(editor); int lineNumber = bli->GetLineNumber(); if(lineNumber > 0) { lineNumber--; } DoCentreErrorLine(bli, editor, centerLine); return true; } } } return false; }