void FindResultsTab::OnSearchMatch(wxCommandEvent& e) { SearchResultList* res = (SearchResultList*)e.GetClientData(); if(!res) return; int m = m_book ? m_book->GetPageIndex(m_recv) : 0; if(m == wxNOT_FOUND) { wxDELETE(res); return; } MatchInfo& matchInfo = GetMatchInfo(m); for(SearchResultList::iterator iter = res->begin(); iter != res->end(); iter++) { if(matchInfo.empty() || matchInfo.rbegin()->second.GetFileName() != iter->GetFileName()) { if(!matchInfo.empty()) { AppendText("\n"); } wxFileName fn(iter->GetFileName()); fn.MakeRelativeTo(); AppendText(fn.GetFullPath() + wxT("\n")); } int lineno = m_recv->GetLineCount() - 1; matchInfo.insert(std::make_pair(lineno, *iter)); wxString text = iter->GetPattern(); int delta = -text.Length(); text.Trim(false); delta += text.Length(); text.Trim(); wxString linenum; if(iter->GetMatchState() == CppWordScanner::STATE_CPP_COMMENT || iter->GetMatchState() == CppWordScanner::STATE_C_COMMENT) linenum = wxString::Format(wxT(" %5u //"), iter->GetLineNumber()); else linenum = wxString::Format(wxT(" %5u "), iter->GetLineNumber()); SearchData* d = GetSearchData(m_recv); // Print the scope name if(d->GetDisplayScope()) { TagEntryPtr tag = TagsManagerST::Get()->FunctionFromFileLine(iter->GetFileName(), iter->GetLineNumber()); wxString scopeName(wxT("global")); if(tag) { scopeName = tag->GetPath(); } linenum << wxT("[ ") << scopeName << wxT(" ] "); iter->SetScope(scopeName); } delta += linenum.Length(); AppendText(linenum + text + wxT("\n")); m_recv->IndicatorFillRange(m_sci->PositionFromLine(lineno) + iter->GetColumn() + delta, iter->GetLen()); } wxDELETE(res); }
void FindResultsTab::OnSearchMatch(wxCommandEvent& e) { SearchResultList* res = (SearchResultList*)e.GetClientData(); if(!res) return; SearchResultList::iterator iter = res->begin(); for(; iter != res->end(); ++iter) { if(m_matchInfo.empty() || m_matchInfo.rbegin()->second.GetFileName() != iter->GetFileName()) { if(!m_matchInfo.empty()) { AppendText("\n"); } wxFileName fn(iter->GetFileName()); fn.MakeRelativeTo(); AppendText(fn.GetFullPath() + wxT("\n")); } int lineno = m_sci->GetLineCount() - 1; m_matchInfo.insert(std::make_pair(lineno, *iter)); wxString text = iter->GetPattern(); // int delta = -text.Length(); // text.Trim(false); // delta += text.Length(); // text.Trim(); wxString linenum = wxString::Format(wxT(" %5u: "), iter->GetLineNumber()); SearchData* d = GetSearchData(); // Print the scope name if(d->GetDisplayScope()) { TagEntryPtr tag = TagsManagerST::Get()->FunctionFromFileLine(iter->GetFileName(), iter->GetLineNumber()); wxString scopeName(wxT("global")); if(tag) { scopeName = tag->GetPath(); } linenum << wxT("[ ") << scopeName << wxT(" ] "); iter->SetScope(scopeName); } AppendText(linenum + text + wxT("\n")); int indicatorStartPos = m_sci->PositionFromLine(lineno) + iter->GetColumn() + linenum.Length(); int indicatorLen = iter->GetLen(); m_indicators.push_back(indicatorStartPos); m_sci->IndicatorFillRange(indicatorStartPos, indicatorLen); } wxDELETE(res); }
void FindUsageTab::ShowUsage(const std::list<CppToken>& matches, const wxString& searchWhat) { Clear(); int lineNumber(0); wxString text; wxString curfile; wxString curfileContent; wxArrayString lines; text = wxString::Format(_("===== Finding references of '%s' =====\n"), searchWhat.c_str()); lineNumber++; std::list<CppToken>::const_iterator iter = matches.begin(); for(; iter != matches.end(); iter++) { // Print the line number wxString file_name(iter->getFilename()); if(curfile != file_name) { curfile = file_name; wxFileName fn(file_name); fn.MakeRelativeTo(); text << fn.GetFullPath() << wxT("\n"); lineNumber++; // Load the file content wxLogNull nolog; wxFFile thefile(file_name, wxT("rb")); if(thefile.IsOpened()) { wxFileOffset size = thefile.Length(); wxString fileData; fileData.Alloc(size); curfileContent.Clear(); wxCSConv fontEncConv(wxFONTENCODING_ISO8859_1); thefile.ReadAll(&curfileContent, fontEncConv); // break the current file into lines, a line can be an empty string lines = wxStringTokenize(curfileContent, wxT("\n"), wxTOKEN_RET_EMPTY_ALL); } } // Keep the match m_matches[lineNumber] = *iter; // Format the message wxString linenum = wxString::Format(wxT(" %5u "), (unsigned int)iter->getLineNumber() + 1); wxString scopeName(wxT("<global>")); TagEntryPtr tag = TagsManagerST::Get()->FunctionFromFileLine(iter->getFilename(), iter->getLineNumber()); if(tag) { scopeName = tag->GetPath(); } text << linenum << wxT("[ ") << scopeName << wxT(" ] "); if(lines.GetCount() > iter->getLineNumber()) { text << lines.Item(iter->getLineNumber()).Trim().Trim(false); } text << wxT("\n"); lineNumber++; } text << wxString::Format(_("===== Found total of %u matches =====\n"), (unsigned int)m_matches.size()); AppendText(text); }