]> git.cworth.org Git - apitrace/commitdiff
add lots of quirks and details view
authorZack Rusin <zack@kde.org>
Sun, 27 Mar 2011 05:48:36 +0000 (01:48 -0400)
committerZack Rusin <zack@kde.org>
Thu, 31 Mar 2011 02:48:41 +0000 (22:48 -0400)
gui/CMakeLists.txt
gui/apicalldelegate.cpp
gui/apitracecall.h
gui/apitracefilter.cpp
gui/apitracefilter.h
gui/apitracemodel.cpp
gui/mainwindow.cpp
gui/mainwindow.h
gui/ui/mainwindow.ui

index 3ffb14778a069d870247b4e4376fca21931d438e..d4c462a120f8f9084e12c062eb02634f90e32322 100644 (file)
@@ -21,7 +21,7 @@ include_directories(${QT_INCLUDES} ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_S
 
 add_executable(qapitrace ${qapitrace_SRCS} ${qapitrace_UIS_H})
 
-target_link_libraries(qapitrace trace ${QT_QTCORE_LIBRARIES} ${QT_QTGUI_LIBRARIES} )
+target_link_libraries(qapitrace trace ${QT_QTCORE_LIBRARIES} ${QT_QTGUI_LIBRARIES} ${QT_QTWEBKIT_LIBRARIES})
 
 ########### install files ###############
 
index 43c96e9906f6af0db3fee4556d82733bad934d0c..a681c7549008b84fab16385831c7cfcdb4e8ab8e 100644 (file)
@@ -5,6 +5,7 @@
 #include <QDebug>
 #include <QPainter>
 #include <QStaticText>
+#include <QStyle>
 
 ApiCallDelegate::ApiCallDelegate(QWidget *parent)
     : QStyledItemDelegate(parent)
@@ -14,10 +15,11 @@ ApiCallDelegate::ApiCallDelegate(QWidget *parent)
 void ApiCallDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option,
                             const QModelIndex &index) const
 {
-    ApiTraceCall *call = static_cast<ApiTraceCall*>(index.internalPointer());
+    ApiTraceCall *call = index.data().value<ApiTraceCall*>();
     if (call) {
         QStaticText text = call->staticText();
         //text.setTextWidth(option.rect.width());
+        QStyledItemDelegate::paint(painter, option, index);
         painter->drawStaticText(option.rect.topLeft(), text);
     } else{
         QStyledItemDelegate::paint(painter, option, index);
@@ -27,7 +29,7 @@ void ApiCallDelegate::paint(QPainter *painter, const QStyleOptionViewItem &optio
 QSize ApiCallDelegate::sizeHint(const QStyleOptionViewItem &option,
                                 const QModelIndex &index) const
 {
-    ApiTraceCall *call = static_cast<ApiTraceCall*>(index.internalPointer());
+    ApiTraceCall *call = index.data().value<ApiTraceCall*>();
     if (call) {
         QStaticText text = call->staticText();
         //text.setTextWidth(option.rect.width());
index 1c0340873741092b806400722e6dfd003ab98cfe..4cfa9ae0b9bfd731d616a93fb7e5b00083042c83 100644 (file)
@@ -112,5 +112,7 @@ private:
     mutable QString m_richText;
     mutable QStaticText m_staticText;
 };
+Q_DECLARE_METATYPE(ApiTraceCall);
+Q_DECLARE_METATYPE(ApiTraceCall*);
 
 #endif
index 3aa5ef83cfb1fdc72d614ba1ec8d681138877f9e..9611b81692e6e95e6319e6373278519214bbb912 100644 (file)
@@ -2,6 +2,8 @@
 
 #include "apitracecall.h"
 
+#include <QDebug>
+
 ApiTraceFilter::ApiTraceFilter(QObject *parent )
     : QSortFilterProxyModel()
 {
@@ -11,10 +13,13 @@ bool ApiTraceFilter::filterAcceptsRow(int sourceRow,
                                       const QModelIndex &sourceParent) const
 {
     QModelIndex index0 = sourceModel()->index(sourceRow, 0, sourceParent);
-    QModelIndex index1 = sourceModel()->index(sourceRow, 1, sourceParent);
-    QModelIndex index2 = sourceModel()->index(sourceRow, 2, sourceParent);
-    QString function = sourceModel()->data(index0).toString();
-    QString arguments = sourceModel()->data(index1).toString();
+    QVariant varientData = sourceModel()->data(index0);
+    ApiTraceCall *call = varientData.value<ApiTraceCall*>();
+
+    if (!call)
+        return false;
+
+    QString function = call->name;
 
     //XXX make it configurable
     if (function.contains(QLatin1String("glXGetProcAddress")))
@@ -22,8 +27,9 @@ bool ApiTraceFilter::filterAcceptsRow(int sourceRow,
     if (function.contains(QLatin1String("wglGetProcAddress")))
         return false;
 
+    QString fullText = call->richText();
     if (function.contains(QLatin1String("glGetString")) &&
-        arguments.contains(QLatin1String("GL_EXTENSIONS")))
+        fullText.contains(QLatin1String("GL_EXTENSIONS")))
         return false;
 
     return true;
index c19a5e2ccd3ca2ae22ea9e0d9c00fcd470274942..a3ac1b078100bf3f66958fca106c499c14c86fa0 100644 (file)
@@ -3,7 +3,6 @@
 
 #include <QSortFilterProxyModel>
 
-//! [0]
 class ApiTraceFilter : public QSortFilterProxyModel
 {
     Q_OBJECT
index c2a5e96468780474f27eb6e07a39e36dea85b854..0a31ce8fba45c908fa2e64ced005be3e8cd53930 100644 (file)
@@ -38,7 +38,7 @@ QVariant ApiTraceModel::data(const QModelIndex &index, int role) const
 
     switch (index.column()) {
     case 0: {
-        return item->richText();
+        return QVariant::fromValue(item);
     }
     default:
         return QVariant();
index a2fc380250fbd1733d73bc31a56d37bd8dbe4468..d36d75d6ab862f8e7ab880ebc4c27f203fecd712 100644 (file)
@@ -1,5 +1,6 @@
 #include "mainwindow.h"
 
+#include "apitracecall.h"
 #include "apicalldelegate.h"
 #include "apitracemodel.h"
 #include "apitracefilter.h"
@@ -8,6 +9,7 @@
 #include <QDebug>
 #include <QDir>
 #include <QFileDialog>
+#include <QWebView>
 
 
 MainWindow::MainWindow()
@@ -18,13 +20,18 @@ MainWindow::MainWindow()
     m_model = new ApiTraceModel();
     m_proxyModel = new ApiTraceFilter();
     m_proxyModel->setSourceModel(m_model);
-    m_ui.callView->setModel(m_model);
+    m_ui.callView->setModel(m_proxyModel);
     m_ui.callView->setItemDelegate(new ApiCallDelegate);
     for (int column = 0; column < m_model->columnCount(); ++column)
         m_ui.callView->resizeColumnToContents(column);
 
+    m_ui.detailsDock->hide();
+
     connect(m_ui.actionOpen, SIGNAL(triggered()),
             this, SLOT(openTrace()));
+
+    connect(m_ui.callView, SIGNAL(activated(const QModelIndex &)),
+            this, SLOT(callItemSelected(const QModelIndex &)));
 }
 
 void MainWindow::openTrace()
@@ -48,4 +55,15 @@ void MainWindow::loadTrace(const QString &fileName)
     m_model->loadTraceFile(fileName);
 }
 
+void MainWindow::callItemSelected(const QModelIndex &index)
+{
+    ApiTraceCall *call = index.data().value<ApiTraceCall*>();
+    if (call) {
+        m_ui.detailsWebView->setHtml(call->richText());
+        m_ui.detailsDock->show();
+    } else {
+        m_ui.detailsDock->hide();
+    }
+}
+
 #include "mainwindow.moc"
index a7c942bb449148b602fb38d487c43ceba48e84dd..b64f5559a8da28df9dfb95dec45dd7a43bbfbb68 100644 (file)
@@ -3,10 +3,12 @@
 
 #include "ui_mainwindow.h"
 
-#include <QtGui/QMainWindow>
+#include <QMainWindow>
+
 
 class ApiTraceModel;
 class ApiTraceFilter;
+class QModelIndex;
 
 class MainWindow : public QMainWindow
 {
@@ -18,6 +20,7 @@ public slots:
     void loadTrace(const QString &fileName);
 
 private slots:
+    void callItemSelected(const QModelIndex &index);
     void openTrace();
 
 private:
index 4cc5d09f92d20bd3f2a7463d86ce3b488fc5cdff..07d23fe30cf8adb82cff5a0a9f29920a2827f349 100644 (file)
@@ -6,8 +6,8 @@
    <rect>
     <x>0</x>
     <y>0</y>
-    <width>799</width>
-    <height>590</height>
+    <width>760</width>
+    <height>422</height>
    </rect>
   </property>
   <property name="windowTitle">
@@ -32,7 +32,7 @@
     <rect>
      <x>0</x>
      <y>0</y>
-     <width>799</width>
+     <width>760</width>
      <height>21</height>
     </rect>
    </property>
    <addaction name="menuFile"/>
   </widget>
   <widget class="QStatusBar" name="statusbar"/>
+  <widget class="QDockWidget" name="detailsDock">
+   <property name="sizePolicy">
+    <sizepolicy hsizetype="Minimum" vsizetype="Minimum">
+     <horstretch>0</horstretch>
+     <verstretch>0</verstretch>
+    </sizepolicy>
+   </property>
+   <property name="floating">
+    <bool>false</bool>
+   </property>
+   <property name="windowTitle">
+    <string>Call Details</string>
+   </property>
+   <attribute name="dockWidgetArea">
+    <number>8</number>
+   </attribute>
+   <widget class="QWidget" name="dockWidgetContents">
+    <layout class="QHBoxLayout" name="horizontalLayout_2">
+     <item>
+      <widget class="QWebView" name="detailsWebView">
+       <property name="sizePolicy">
+        <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
+         <horstretch>0</horstretch>
+         <verstretch>0</verstretch>
+        </sizepolicy>
+       </property>
+       <property name="url">
+        <url>
+         <string>about:blank</string>
+        </url>
+       </property>
+      </widget>
+     </item>
+    </layout>
+   </widget>
+  </widget>
   <action name="actionExit">
    <property name="text">
     <string>Exit</string>
    </property>
   </action>
  </widget>
+ <customwidgets>
+  <customwidget>
+   <class>QWebView</class>
+   <extends>QWidget</extends>
+   <header>QtWebKit/QWebView</header>
+  </customwidget>
+ </customwidgets>
  <resources/>
  <connections/>
 </ui>