]> git.cworth.org Git - apitrace/commitdiff
Implement jumping to a specific call.
authorZack Rusin <zack@kde.org>
Mon, 11 Apr 2011 04:15:07 +0000 (00:15 -0400)
committerZack Rusin <zack@kde.org>
Mon, 11 Apr 2011 04:15:07 +0000 (00:15 -0400)
13 files changed:
gui/CMakeLists.txt
gui/apitracefilter.cpp
gui/apitracefilter.h
gui/apitracemodel.cpp
gui/apitracemodel.h
gui/jumpwidget.cpp [new file with mode: 0644]
gui/jumpwidget.h [new file with mode: 0644]
gui/mainwindow.cpp
gui/mainwindow.h
gui/qapitrace.qrc
gui/resources/dialog-close.png [new file with mode: 0644]
gui/ui/jumpwidget.ui [new file with mode: 0644]
gui/ui/mainwindow.ui

index 068ffa3f758f51548ad142e8c5afffa23ce5db05..1ed291f8027c0bc9db4955ef6b2f16ed66e06a30 100644 (file)
@@ -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
index 98ee1db52dac6bb75106bf582e6cae3165596209..5c804508d19835d1f2cb42da69d6e3d18563962c 100644 (file)
@@ -89,4 +89,11 @@ void ApiTraceFilter::setFilterOptions(ApiTraceFilter::FilterOptions opts)
     }
 }
 
+QModelIndex ApiTraceFilter::callIndex(int callNum) const
+{
+    ApiTraceModel *model = static_cast<ApiTraceModel *>(sourceModel());
+    QModelIndex index = model->callIndex(callNum);
+    return mapFromSource(index);
+}
+
 #include "apitracefilter.moc"
index fa59397f03e0d5203e0f2788e383a519aafe99fe..2bd85575cdf90b7b12f93a34fdf53bc6d952ea82 100644 (file)
@@ -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;
 
index 63e54cfe907720ec8ca942bf9fa3d66e258fde03..39459ce1c7d804aff44d0a64a2bef7903ba8a405 100644 (file)
@@ -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 "<<callNum<<" inside parent!";
+        return QModelIndex();
+    }
+    return createIndex(row, 0, call);
+}
+
 #include "apitracemodel.moc"
index cf901591c9fc6053f88e336c23be1fff35b6aaf1..345cd133c5c8ca9b1db823b7822c50178a03a1b1 100644 (file)
@@ -25,6 +25,8 @@ public:
     const ApiTrace *apiTrace() const;
     void stateSetOnEvent(ApiTraceEvent *event);
 
+    QModelIndex callIndex(int callNum) const;
+
 public:
     /* QAbstractItemModel { */
     QVariant data(const QModelIndex &index, int role) const;
diff --git a/gui/jumpwidget.cpp b/gui/jumpwidget.cpp
new file mode 100644 (file)
index 0000000..ca7f4b3
--- /dev/null
@@ -0,0 +1,37 @@
+#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"
diff --git a/gui/jumpwidget.h b/gui/jumpwidget.h
new file mode 100644 (file)
index 0000000..40f8b9d
--- /dev/null
@@ -0,0 +1,29 @@
+#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
index e2d58b6cb55bf0f6d967dbadc2e79f6b83b134e9..0ca51b8119e829d3936f5c30474dfc327033ad6f 100644 (file)
@@ -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 <QLineEdit>
 #include <QMessageBox>
 #include <QProgressBar>
+#include <QShortcut>
 #include <QToolBar>
 #include <QUrl>
 #include <QVBoxLayout>
@@ -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"
index be0c4154f6a85bb8de36c4e65b7818fafdd200cf..88017f65981e4a3f084651d288ccf71098a91859 100644 (file)
@@ -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;
 };
 
 
index 10311a9017f2ec458fe0daa11015267c5d4d7992..c5fc6f77ac859b8e3d1bc8411c41bfa35082f960 100644 (file)
@@ -1,6 +1,7 @@
 <!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>
diff --git a/gui/resources/dialog-close.png b/gui/resources/dialog-close.png
new file mode 100644 (file)
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 (file)
index 0000000..675dabf
--- /dev/null
@@ -0,0 +1,80 @@
+<?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>
index 574bfa26df4a8059d61191119264a7289093ee24..9bf49936da16385f3e46ceff7b42d887ec710a32 100644 (file)
@@ -23,7 +23,7 @@
    <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">