X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=gui%2Fmainwindow.cpp;h=7d4cab8f7e064b5d9d6baa4476b2cdb19a345782;hb=93e4d1569ac411912ddb2c15b9b130af0171f049;hp=9dc530dbf822385f31a8304fd69a8725a38770c1;hpb=121e3164e0ed7ab91947bd8325e03095dcfcb823;p=apitrace diff --git a/gui/mainwindow.cpp b/gui/mainwindow.cpp index 9dc530d..7d4cab8 100644 --- a/gui/mainwindow.cpp +++ b/gui/mainwindow.cpp @@ -694,6 +694,10 @@ void MainWindow::initConnections() this, SLOT(slotTraceChanged(ApiTraceCall*))); connect(m_trace, SIGNAL(findResult(ApiTrace::SearchResult,ApiTraceCall*)), this, SLOT(slotSearchResult(ApiTrace::SearchResult,ApiTraceCall*))); + connect(m_trace, SIGNAL(foundFrameStart(ApiTraceFrame*)), + this, SLOT(slotFoundFrameStart(ApiTraceFrame*))); + connect(m_trace, SIGNAL(foundFrameEnd(ApiTraceFrame*)), + this, SLOT(slotFoundFrameEnd(ApiTraceFrame*))); connect(m_retracer, SIGNAL(finished(const QString&)), this, SLOT(replayFinished(const QString&))); @@ -930,45 +934,26 @@ void MainWindow::slotSaved() void MainWindow::slotGoFrameStart() { - ApiTraceFrame *frame = selectedFrame(); - if (!frame || frame->isEmpty()) { - return; - } - - QVector::const_iterator itr; - QVector calls = frame->calls(); + ApiTraceFrame *frame = currentFrame(); + ApiTraceCall *call = currentCall(); - itr = calls.constBegin(); - while (itr != calls.constEnd()) { - ApiTraceCall *call = *itr; - QModelIndex idx = m_proxyModel->indexForCall(call); - if (idx.isValid()) { - m_ui.callView->setCurrentIndex(idx); - break; - } - ++itr; + if (!frame && call) { + frame = call->parentFrame(); } + + m_trace->findFrameStart(frame); } void MainWindow::slotGoFrameEnd() { - ApiTraceFrame *frame = selectedFrame(); - if (!frame || frame->isEmpty()) { - return; + ApiTraceFrame *frame = currentFrame(); + ApiTraceCall *call = currentCall(); + + if (!frame && call) { + frame = call->parentFrame(); } - QVector::const_iterator itr; - QVector calls = frame->calls(); - itr = calls.constEnd(); - do { - --itr; - ApiTraceCall *call = *itr; - QModelIndex idx = m_proxyModel->indexForCall(call); - if (idx.isValid()) { - m_ui.callView->setCurrentIndex(idx); - break; - } - } while (itr != calls.constBegin()); + m_trace->findFrameEnd(frame); } ApiTraceFrame * MainWindow::selectedFrame() const @@ -1169,4 +1154,47 @@ ApiTraceCall * MainWindow::currentCall() const } +void MainWindow::slotFoundFrameStart(ApiTraceFrame *frame) +{ + Q_ASSERT(frame->loaded()); + if (!frame || frame->isEmpty()) { + return; + } + + QVector::const_iterator itr; + QVector calls = frame->calls(); + + itr = calls.constBegin(); + while (itr != calls.constEnd()) { + ApiTraceCall *call = *itr; + QModelIndex idx = m_proxyModel->indexForCall(call); + if (idx.isValid()) { + m_ui.callView->setCurrentIndex(idx); + break; + } + ++itr; + } +} + +void MainWindow::slotFoundFrameEnd(ApiTraceFrame *frame) +{ + Q_ASSERT(frame->loaded()); + if (!frame || frame->isEmpty()) { + return; + } + QVector::const_iterator itr; + QVector calls = frame->calls(); + + itr = calls.constEnd(); + do { + --itr; + ApiTraceCall *call = *itr; + QModelIndex idx = m_proxyModel->indexForCall(call); + if (idx.isValid()) { + m_ui.callView->setCurrentIndex(idx); + break; + } + } while (itr != calls.constBegin()); +} + #include "mainwindow.moc"