X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=gui%2Fapitrace.cpp;h=023a094a93f2e2867117d3861153e1f4735b90c0;hb=ad513b3f5f6e3b1e460d9cf77479715cc05319b4;hp=bc862097099c75c0d48ce1a093ba3aff70711866;hpb=ae2b4d32ed56e3ac193cc7205aeb58082c448ce8;p=apitrace diff --git a/gui/apitrace.cpp b/gui/apitrace.cpp index bc86209..023a094 100644 --- a/gui/apitrace.cpp +++ b/gui/apitrace.cpp @@ -25,14 +25,12 @@ ApiTrace::ApiTrace() SLOT(loaderFrameLoaded(ApiTraceFrame*,QVector,quint64))); connect(m_loader, SIGNAL(finishedParsing()), this, SLOT(finishedParsing())); - connect(this, SIGNAL(loaderSearchNext(int,QString,Qt::CaseSensitivity)), - m_loader, SLOT(searchNext(int,QString,Qt::CaseSensitivity))); - connect(this, SIGNAL(loaderSearchPrev(int,QString,Qt::CaseSensitivity)), - m_loader, SLOT(searchPrev(int,QString,Qt::CaseSensitivity))); + connect(this, SIGNAL(loaderSearch(ApiTrace::SearchRequest)), + m_loader, SLOT(search(ApiTrace::SearchRequest))); connect(m_loader, - SIGNAL(searchResult(ApiTrace::SearchResult,ApiTraceCall*)), + SIGNAL(searchResult(ApiTrace::SearchRequest,ApiTrace::SearchResult,ApiTraceCall*)), this, - SLOT(loaderSearchResult(ApiTrace::SearchResult,ApiTraceCall*))); + SLOT(loaderSearchResult(ApiTrace::SearchRequest,ApiTrace::SearchResult,ApiTraceCall*))); connect(this, SIGNAL(loaderFindFrameStart(ApiTraceFrame*)), m_loader, SLOT(findFrameStart(ApiTraceFrame*))); connect(this, SIGNAL(loaderFindFrameEnd(ApiTraceFrame*)), @@ -148,10 +146,12 @@ void ApiTrace::setFileName(const QString &name) { if (m_fileName != name) { m_fileName = name; + m_tempFileName = QString(); m_frames.clear(); m_errors.clear(); m_editedCalls.clear(); + m_queuedErrors.clear(); m_needsSaving = false; emit invalidated(); @@ -318,11 +318,13 @@ void ApiTrace::findNext(ApiTraceFrame *frame, { ApiTraceCall *foundCall = 0; int frameIdx = m_frames.indexOf(frame); + SearchRequest request(SearchRequest::Next, + frame, from, str, sensitivity); if (frame->isLoaded()) { foundCall = frame->findNextCall(from, str, sensitivity); if (foundCall) { - emit findResult(SearchResult_Found, foundCall); + emit findResult(request, SearchResult_Found, foundCall); return; } @@ -331,20 +333,23 @@ void ApiTrace::findNext(ApiTraceFrame *frame, frameIdx += 1; } + //for the rest of the frames we search from beginning + request.from = 0; for (int i = frameIdx; i < m_frames.count(); ++i) { ApiTraceFrame *frame = m_frames[i]; + request.frame = frame; if (!frame->isLoaded()) { - emit loaderSearchNext(i, str, sensitivity); + emit loaderSearch(request); return; } else { ApiTraceCall *call = frame->findNextCall(0, str, sensitivity); if (call) { - emit findResult(SearchResult_Found, call); + emit findResult(request, SearchResult_Found, call); return; } } } - emit findResult(SearchResult_Wrapped, 0); + emit findResult(request, SearchResult_Wrapped, 0); } void ApiTrace::findPrev(ApiTraceFrame *frame, @@ -354,11 +359,13 @@ void ApiTrace::findPrev(ApiTraceFrame *frame, { ApiTraceCall *foundCall = 0; int frameIdx = m_frames.indexOf(frame); + SearchRequest request(SearchRequest::Prev, + frame, from, str, sensitivity); if (frame->isLoaded()) { foundCall = frame->findPrevCall(from, str, sensitivity); if (foundCall) { - emit findResult(SearchResult_Found, foundCall); + emit findResult(request, SearchResult_Found, foundCall); return; } @@ -367,28 +374,31 @@ void ApiTrace::findPrev(ApiTraceFrame *frame, frameIdx -= 1; } + request.from = 0; for (int i = frameIdx; i >= 0; --i) { ApiTraceFrame *frame = m_frames[i]; + request.frame = frame; if (!frame->isLoaded()) { - emit loaderSearchPrev(i, str, sensitivity); + emit loaderSearch(request); return; } else { ApiTraceCall *call = frame->findPrevCall(0, str, sensitivity); if (call) { - emit findResult(SearchResult_Found, call); + emit findResult(request, SearchResult_Found, call); return; } } } - emit findResult(SearchResult_Wrapped, 0); + emit findResult(request, SearchResult_Wrapped, 0); } -void ApiTrace::loaderSearchResult(ApiTrace::SearchResult result, +void ApiTrace::loaderSearchResult(const ApiTrace::SearchRequest &request, + ApiTrace::SearchResult result, ApiTraceCall *call) { //qDebug()<<"Search result = "<