From 96130aca85f0d828cae3da84dc9a7e258cbeb22a Mon Sep 17 00:00:00 2001 From: Zack Rusin Date: Sun, 27 Mar 2011 01:48:36 -0400 Subject: [PATCH] add lots of quirks and details view --- gui/CMakeLists.txt | 2 +- gui/apicalldelegate.cpp | 6 +++-- gui/apitracecall.h | 2 ++ gui/apitracefilter.cpp | 16 +++++++++----- gui/apitracefilter.h | 1 - gui/apitracemodel.cpp | 2 +- gui/mainwindow.cpp | 20 ++++++++++++++++- gui/mainwindow.h | 5 ++++- gui/ui/mainwindow.ui | 49 ++++++++++++++++++++++++++++++++++++++--- 9 files changed, 88 insertions(+), 15 deletions(-) diff --git a/gui/CMakeLists.txt b/gui/CMakeLists.txt index 3ffb147..d4c462a 100644 --- a/gui/CMakeLists.txt +++ b/gui/CMakeLists.txt @@ -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 ############### diff --git a/gui/apicalldelegate.cpp b/gui/apicalldelegate.cpp index 43c96e9..a681c75 100644 --- a/gui/apicalldelegate.cpp +++ b/gui/apicalldelegate.cpp @@ -5,6 +5,7 @@ #include #include #include +#include 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(index.internalPointer()); + ApiTraceCall *call = index.data().value(); 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(index.internalPointer()); + ApiTraceCall *call = index.data().value(); if (call) { QStaticText text = call->staticText(); //text.setTextWidth(option.rect.width()); diff --git a/gui/apitracecall.h b/gui/apitracecall.h index 1c03408..4cfa9ae 100644 --- a/gui/apitracecall.h +++ b/gui/apitracecall.h @@ -112,5 +112,7 @@ private: mutable QString m_richText; mutable QStaticText m_staticText; }; +Q_DECLARE_METATYPE(ApiTraceCall); +Q_DECLARE_METATYPE(ApiTraceCall*); #endif diff --git a/gui/apitracefilter.cpp b/gui/apitracefilter.cpp index 3aa5ef8..9611b81 100644 --- a/gui/apitracefilter.cpp +++ b/gui/apitracefilter.cpp @@ -2,6 +2,8 @@ #include "apitracecall.h" +#include + 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(); + + 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; diff --git a/gui/apitracefilter.h b/gui/apitracefilter.h index c19a5e2..a3ac1b0 100644 --- a/gui/apitracefilter.h +++ b/gui/apitracefilter.h @@ -3,7 +3,6 @@ #include -//! [0] class ApiTraceFilter : public QSortFilterProxyModel { Q_OBJECT diff --git a/gui/apitracemodel.cpp b/gui/apitracemodel.cpp index c2a5e96..0a31ce8 100644 --- a/gui/apitracemodel.cpp +++ b/gui/apitracemodel.cpp @@ -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(); diff --git a/gui/mainwindow.cpp b/gui/mainwindow.cpp index a2fc380..d36d75d 100644 --- a/gui/mainwindow.cpp +++ b/gui/mainwindow.cpp @@ -1,5 +1,6 @@ #include "mainwindow.h" +#include "apitracecall.h" #include "apicalldelegate.h" #include "apitracemodel.h" #include "apitracefilter.h" @@ -8,6 +9,7 @@ #include #include #include +#include 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(); + if (call) { + m_ui.detailsWebView->setHtml(call->richText()); + m_ui.detailsDock->show(); + } else { + m_ui.detailsDock->hide(); + } +} + #include "mainwindow.moc" diff --git a/gui/mainwindow.h b/gui/mainwindow.h index a7c942b..b64f555 100644 --- a/gui/mainwindow.h +++ b/gui/mainwindow.h @@ -3,10 +3,12 @@ #include "ui_mainwindow.h" -#include +#include + 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: diff --git a/gui/ui/mainwindow.ui b/gui/ui/mainwindow.ui index 4cc5d09..07d23fe 100644 --- a/gui/ui/mainwindow.ui +++ b/gui/ui/mainwindow.ui @@ -6,8 +6,8 @@ 0 0 - 799 - 590 + 760 + 422 @@ -32,7 +32,7 @@ 0 0 - 799 + 760 21 @@ -45,6 +45,42 @@ + + + + 0 + 0 + + + + false + + + Call Details + + + 8 + + + + + + + + 0 + 0 + + + + + about:blank + + + + + + + Exit @@ -61,6 +97,13 @@ + + + QWebView + QWidget +
QtWebKit/QWebView
+
+
-- 2.43.0