From: Zack Rusin Date: Mon, 11 Apr 2011 04:15:07 +0000 (-0400) Subject: Implement jumping to a specific call. X-Git-Url: https://git.cworth.org/git?a=commitdiff_plain;h=c52d18a3319956aea59dfa6648c56ddd1df9414f;p=apitrace Implement jumping to a specific call. --- diff --git a/gui/CMakeLists.txt b/gui/CMakeLists.txt index 068ffa3..1ed291f 100644 --- a/gui/CMakeLists.txt +++ b/gui/CMakeLists.txt @@ -9,6 +9,7 @@ set(qapitrace_SRCS apitracefilter.cpp apitracemodel.cpp imageviewer.cpp + jumpwidget.cpp loaderthread.cpp mainwindow.cpp main.cpp @@ -25,6 +26,7 @@ qt4_add_resources(qapitrace_SRCS qapitrace.qrc) set(qapitrace_UIS ui/imageviewer.ui + ui/jumpwidget.ui ui/mainwindow.ui ui/retracerdialog.ui ui/settings.ui diff --git a/gui/apitracefilter.cpp b/gui/apitracefilter.cpp index 98ee1db..5c80450 100644 --- a/gui/apitracefilter.cpp +++ b/gui/apitracefilter.cpp @@ -89,4 +89,11 @@ void ApiTraceFilter::setFilterOptions(ApiTraceFilter::FilterOptions opts) } } +QModelIndex ApiTraceFilter::callIndex(int callNum) const +{ + ApiTraceModel *model = static_cast(sourceModel()); + QModelIndex index = model->callIndex(callNum); + return mapFromSource(index); +} + #include "apitracefilter.moc" diff --git a/gui/apitracefilter.h b/gui/apitracefilter.h index fa59397..2bd8557 100644 --- a/gui/apitracefilter.h +++ b/gui/apitracefilter.h @@ -22,6 +22,8 @@ public: void setFilterOptions(FilterOptions opts); void setFilterString(const QString &text); + + QModelIndex callIndex(int callNum) const; protected: bool filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const; diff --git a/gui/apitracemodel.cpp b/gui/apitracemodel.cpp index 63e54cf..39459ce 100644 --- a/gui/apitracemodel.cpp +++ b/gui/apitracemodel.cpp @@ -251,4 +251,23 @@ void ApiTraceModel::stateSetOnEvent(ApiTraceEvent *event) } } +QModelIndex ApiTraceModel::callIndex(int callNum) const +{ + ApiTraceCall *call = m_trace->callAt(callNum); + + if (!call) { + return QModelIndex(); + } + + ApiTraceFrame *frame = call->parentFrame; + Q_ASSERT(frame); + + int row = frame->calls.indexOf(call); + if (row < 0) { + qDebug() << "Couldn't find call num "< + +JumpWidget::JumpWidget(QWidget *parent ) + : QWidget(parent) +{ + m_ui.setupUi(this); + + connect(m_ui.jumpButton, SIGNAL(clicked()), + SLOT(slotJump())); + connect(m_ui.spinBox, SIGNAL(editingFinished()), + SLOT(slotJump())); + connect(m_ui.cancelButton, SIGNAL(clicked()), + SLOT(slotCancel())); +} + +void JumpWidget::slotJump() +{ + if (isVisible()) { + emit jumpTo(m_ui.spinBox->value()); + } + hide(); +} + +void JumpWidget::slotCancel() +{ + hide(); +} + +void JumpWidget::showEvent(QShowEvent *event) +{ + m_ui.spinBox->setFocus(Qt::ShortcutFocusReason); + return QWidget::showEvent(event); +} + +#include "jumpwidget.moc" diff --git a/gui/jumpwidget.h b/gui/jumpwidget.h new file mode 100644 index 0000000..40f8b9d --- /dev/null +++ b/gui/jumpwidget.h @@ -0,0 +1,29 @@ +#ifndef JUMPWIDGET_H +#define JUMPWIDGET_H + +#include "ui_jumpwidget.h" +#include + +class QShowEvent; + +class JumpWidget : public QWidget +{ + Q_OBJECT +public: + JumpWidget(QWidget *parent = 0); + +signals: + void jumpTo(int callNumber); + +private slots: + void slotJump(); + void slotCancel(); + +protected: + virtual void showEvent(QShowEvent *event); + +private: + Ui_JumpWidget m_ui; +}; + +#endif diff --git a/gui/mainwindow.cpp b/gui/mainwindow.cpp index e2d58b6..0ca51b8 100644 --- a/gui/mainwindow.cpp +++ b/gui/mainwindow.cpp @@ -6,6 +6,7 @@ #include "apitracemodel.h" #include "apitracefilter.h" #include "imageviewer.h" +#include "jumpwidget.h" #include "retracer.h" #include "settingsdialog.h" #include "shaderssourcewidget.h" @@ -21,6 +22,7 @@ #include #include #include +#include #include #include #include @@ -493,6 +495,14 @@ void MainWindow::initObjects() m_ui.detailsWebView->page()->setLinkDelegationPolicy( QWebPage::DelegateExternalLinks); + + m_jumpWidget = new JumpWidget(this); + m_ui.centralLayout->addWidget(m_jumpWidget); + m_jumpWidget->hide(); + + + new QShortcut(QKeySequence(Qt::CTRL + Qt::Key_G), + this, SLOT(slotGoTo())); } void MainWindow::initConnections() @@ -551,6 +561,9 @@ void MainWindow::initConnections() connect(m_ui.detailsWebView, SIGNAL(linkClicked(const QUrl&)), this, SLOT(openHelp(const QUrl&))); + + connect(m_jumpWidget, SIGNAL(jumpTo(int)), + SLOT(slotJumpTo(int))); } void MainWindow::replayStateFound(const ApiTraceState &state) @@ -564,4 +577,17 @@ void MainWindow::replayStateFound(const ApiTraceState &state) } } +void MainWindow::slotGoTo() +{ + m_jumpWidget->show(); +} + +void MainWindow::slotJumpTo(int callNum) +{ + QModelIndex index = m_proxyModel->callIndex(callNum); + if (index.isValid()) { + m_ui.callView->setCurrentIndex(index); + } +} + #include "mainwindow.moc" diff --git a/gui/mainwindow.h b/gui/mainwindow.h index be0c415..88017f6 100644 --- a/gui/mainwindow.h +++ b/gui/mainwindow.h @@ -13,6 +13,7 @@ class ApiTraceFrame; class ApiTraceModel; class ApiTraceState; class ImageViewer; +class JumpWidget; class QLineEdit; class QModelIndex; class QProgressBar; @@ -48,6 +49,8 @@ private slots: void openHelp(const QUrl &url); void showSurfacesMenu(const QPoint &pos); void showSelectedSurface(); + void slotGoTo(); + void slotJumpTo(int callNum); private: void initObjects(); @@ -78,6 +81,8 @@ private: VertexDataInterpreter *m_vdataInterpreter; ImageViewer *m_imageViewer; + + JumpWidget *m_jumpWidget; }; diff --git a/gui/qapitrace.qrc b/gui/qapitrace.qrc index 10311a9..c5fc6f7 100644 --- a/gui/qapitrace.qrc +++ b/gui/qapitrace.qrc @@ -1,6 +1,7 @@ resources/application-exit.png + resources/dialog-close.png resources/dialog-information.png resources/document-new.png resources/document-open.png diff --git a/gui/resources/dialog-close.png b/gui/resources/dialog-close.png new file mode 100644 index 0000000..b049b68 Binary files /dev/null and b/gui/resources/dialog-close.png differ diff --git a/gui/ui/jumpwidget.ui b/gui/ui/jumpwidget.ui new file mode 100644 index 0000000..675dabf --- /dev/null +++ b/gui/ui/jumpwidget.ui @@ -0,0 +1,80 @@ + + + JumpWidget + + + + 0 + 0 + 345 + 35 + + + + + 0 + 0 + + + + Form + + + false + + + + + + + + + + + + :/resources/dialog-close.png:/resources/dialog-close.png + + + true + + + + + + + Jump to call: + + + + + + + + 0 + 0 + + + + 9999999 + + + + + + + Jump + + + true + + + + + + + + + + + + diff --git a/gui/ui/mainwindow.ui b/gui/ui/mainwindow.ui index 574bfa2..9bf4993 100644 --- a/gui/ui/mainwindow.ui +++ b/gui/ui/mainwindow.ui @@ -23,7 +23,7 @@ QMainWindow::AnimatedDocks|QMainWindow::ForceTabbedDocks - +