apitracefilter.cpp
apitracemodel.cpp
imageviewer.cpp
+ jumpwidget.cpp
loaderthread.cpp
mainwindow.cpp
main.cpp
set(qapitrace_UIS
ui/imageviewer.ui
+ ui/jumpwidget.ui
ui/mainwindow.ui
ui/retracerdialog.ui
ui/settings.ui
}
}
+QModelIndex ApiTraceFilter::callIndex(int callNum) const
+{
+ ApiTraceModel *model = static_cast<ApiTraceModel *>(sourceModel());
+ QModelIndex index = model->callIndex(callNum);
+ return mapFromSource(index);
+}
+
#include "apitracefilter.moc"
void setFilterOptions(FilterOptions opts);
void setFilterString(const QString &text);
+
+ QModelIndex callIndex(int callNum) const;
protected:
bool filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const;
}
}
+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 "<<callNum<<" inside parent!";
+ return QModelIndex();
+ }
+ return createIndex(row, 0, call);
+}
+
#include "apitracemodel.moc"
const ApiTrace *apiTrace() const;
void stateSetOnEvent(ApiTraceEvent *event);
+ QModelIndex callIndex(int callNum) const;
+
public:
/* QAbstractItemModel { */
QVariant data(const QModelIndex &index, int role) const;
--- /dev/null
+#include "jumpwidget.h"
+
+#include <QDebug>
+
+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"
--- /dev/null
+#ifndef JUMPWIDGET_H
+#define JUMPWIDGET_H
+
+#include "ui_jumpwidget.h"
+#include <QWidget>
+
+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
#include "apitracemodel.h"
#include "apitracefilter.h"
#include "imageviewer.h"
+#include "jumpwidget.h"
#include "retracer.h"
#include "settingsdialog.h"
#include "shaderssourcewidget.h"
#include <QLineEdit>
#include <QMessageBox>
#include <QProgressBar>
+#include <QShortcut>
#include <QToolBar>
#include <QUrl>
#include <QVBoxLayout>
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()
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)
}
}
+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"
class ApiTraceModel;
class ApiTraceState;
class ImageViewer;
+class JumpWidget;
class QLineEdit;
class QModelIndex;
class QProgressBar;
void openHelp(const QUrl &url);
void showSurfacesMenu(const QPoint &pos);
void showSelectedSurface();
+ void slotGoTo();
+ void slotJumpTo(int callNum);
private:
void initObjects();
VertexDataInterpreter *m_vdataInterpreter;
ImageViewer *m_imageViewer;
+
+ JumpWidget *m_jumpWidget;
};
<!DOCTYPE RCC><RCC version="1.0">
<qresource>
<file>resources/application-exit.png</file>
+ <file>resources/dialog-close.png</file>
<file>resources/dialog-information.png</file>
<file>resources/document-new.png</file>
<file>resources/document-open.png</file>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>JumpWidget</class>
+ <widget class="QWidget" name="JumpWidget">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>345</width>
+ <height>35</height>
+ </rect>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="windowTitle">
+ <string>Form</string>
+ </property>
+ <property name="autoFillBackground">
+ <bool>false</bool>
+ </property>
+ <layout class="QVBoxLayout" name="verticalLayout">
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout">
+ <item>
+ <widget class="QPushButton" name="cancelButton">
+ <property name="text">
+ <string/>
+ </property>
+ <property name="icon">
+ <iconset resource="../qapitrace.qrc">
+ <normaloff>:/resources/dialog-close.png</normaloff>:/resources/dialog-close.png</iconset>
+ </property>
+ <property name="flat">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QLabel" name="label">
+ <property name="text">
+ <string>Jump to call:</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QSpinBox" name="spinBox">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="maximum">
+ <number>9999999</number>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QPushButton" name="jumpButton">
+ <property name="text">
+ <string>Jump</string>
+ </property>
+ <property name="flat">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ </layout>
+ </widget>
+ <resources>
+ <include location="../qapitrace.qrc"/>
+ </resources>
+ <connections/>
+</ui>
<set>QMainWindow::AnimatedDocks|QMainWindow::ForceTabbedDocks</set>
</property>
<widget class="QWidget" name="centralwidget">
- <layout class="QHBoxLayout" name="horizontalLayout">
+ <layout class="QVBoxLayout" name="centralLayout">
<item>
<widget class="QTreeView" name="callView">
<property name="alternatingRowColors">