]> git.cworth.org Git - apitrace/commitdiff
Allow setting of the filter options.
authorZack Rusin <zack@kde.org>
Sun, 3 Apr 2011 18:30:19 +0000 (14:30 -0400)
committerZack Rusin <zack@kde.org>
Sun, 3 Apr 2011 18:30:19 +0000 (14:30 -0400)
gui/CMakeLists.txt
gui/apitracefilter.cpp
gui/apitracefilter.h
gui/mainwindow.cpp
gui/mainwindow.h
gui/settingsdialog.cpp [new file with mode: 0644]
gui/settingsdialog.h [new file with mode: 0644]
gui/ui/mainwindow.ui
gui/ui/settings.ui [new file with mode: 0644]

index 14e9e96fee97c3646a37a7f92483dd06c4fccfd5..7917104a58684ad8d6a19eef036e44a745a72244 100644 (file)
@@ -7,6 +7,7 @@ set(qapitrace_SRCS
    loaderthread.cpp
    mainwindow.cpp
    main.cpp
+   settingsdialog.cpp
  )
 
 qt4_automoc(${qapitrace_SRCS})
@@ -14,7 +15,8 @@ qt4_automoc(${qapitrace_SRCS})
 qt4_add_resources(qapitrace_SRCS qapitrace.qrc)
 
 set(qapitrace_UIS
-   ui/mainwindow.ui)
+   ui/mainwindow.ui
+   ui/settings.ui)
 
 QT4_WRAP_UI(qapitrace_UIS_H ${qapitrace_UIS})
 
index c467a8c4f7dacc87c610cbe2f214eee22f8cd7ca..fdee2bb87b2e876aac4bf65ff4e6ebad708a72ae 100644 (file)
@@ -6,7 +6,9 @@
 #include <QDebug>
 
 ApiTraceFilter::ApiTraceFilter(QObject *parent)
-    : QSortFilterProxyModel()
+    : QSortFilterProxyModel(),
+      m_filters(ExtensionsFilter | ResolutionsFilter |
+                ErrorsQueryFilter | ExtraStateFilter)
 {
 }
 
@@ -33,16 +35,31 @@ bool ApiTraceFilter::filterAcceptsRow(int sourceRow,
         return function.contains(m_text);
     }
 
-    //XXX make it configurable
-    if (function.contains(QLatin1String("glXGetProcAddress")))
-        return false;
-    if (function.contains(QLatin1String("wglGetProcAddress")))
-        return false;
+    if (m_filters & ResolutionsFilter) {
+        if (function.contains(QLatin1String("glXGetProcAddress")))
+            return false;
+        if (function.contains(QLatin1String("wglGetProcAddress")))
+            return false;
+    }
 
-    QString fullText = call->filterText();
-    if (function.contains(QLatin1String("glGetString")) &&
-        fullText.contains(QLatin1String("GL_EXTENSIONS")))
-        return false;
+    if (m_filters & ExtensionsFilter) {
+        QString fullText = call->filterText();
+        if (function.contains(QLatin1String("glGetString")) &&
+            fullText.contains(QLatin1String("GL_EXTENSIONS")))
+            return false;
+        if (function.contains(QLatin1String("glXGetClientString")))
+            return false;
+    }
+
+    if (m_filters & ErrorsQueryFilter) {
+        if (function.contains(QLatin1String("glGetError")))
+            return false;
+    }
+
+    if (m_filters & ExtraStateFilter) {
+        if (function.contains(QLatin1String("glXGetCurrentDisplay")))
+            return false;
+    }
 
     return true;
 }
@@ -56,4 +73,17 @@ void ApiTraceFilter::setFilterString(const QString &text)
     }
 }
 
+ApiTraceFilter::FilterOptions ApiTraceFilter::filterOptions() const
+{
+    return m_filters;
+}
+
+void ApiTraceFilter::setFilterOptions(ApiTraceFilter::FilterOptions opts)
+{
+    if (opts != m_filters) {
+        m_filters = opts;
+        invalidate();
+    }
+}
+
 #include "apitracefilter.moc"
index f2ad91bd09a5de152b2b092ddb7a636a67310693..fa59397f03e0d5203e0f2788e383a519aafe99fe 100644 (file)
@@ -6,16 +6,28 @@
 class ApiTraceFilter : public QSortFilterProxyModel
 {
     Q_OBJECT
-
+public:
+    enum FilterOption {
+        NullFilter        =  0,
+        ExtensionsFilter  = 1 << 0,
+        ResolutionsFilter = 1 << 1,
+        ErrorsQueryFilter = 1 << 2,
+        ExtraStateFilter  = 1 << 3,
+    };
+    Q_DECLARE_FLAGS(FilterOptions, FilterOption)
 public:
     ApiTraceFilter(QObject *parent = 0);
 
+    FilterOptions filterOptions() const;
+    void setFilterOptions(FilterOptions opts);
+
     void setFilterString(const QString &text);
 protected:
     bool filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const;
 
 private:
     QString m_text;
+    FilterOptions m_filters;
 };
 
 #endif
index 93add0ee97d47864b0d437aa56c259efd0af7eb2..0a3349be4572e855871ac010220277000a462fc4 100644 (file)
@@ -5,6 +5,7 @@
 #include "apicalldelegate.h"
 #include "apitracemodel.h"
 #include "apitracefilter.h"
+#include "settingsdialog.h"
 
 #include <qjson/parser.h>
 
@@ -70,6 +71,8 @@ MainWindow::MainWindow()
             this, SLOT(replayStop()));
     connect(m_ui.actionLookupState, SIGNAL(triggered()),
             this, SLOT(lookupState()));
+       connect(m_ui.actionOptions, SIGNAL(triggered()),
+            this, SLOT(showSettings()));
 
     connect(m_ui.callView, SIGNAL(activated(const QModelIndex &)),
             this, SLOT(callItemSelected(const QModelIndex &)));
@@ -358,4 +361,14 @@ void MainWindow::fillStateForFrame()
     m_ui.stateDock->show();
 }
 
+void MainWindow::showSettings()
+{
+    SettingsDialog dialog;
+    dialog.setFilterOptions(m_proxyModel->filterOptions());
+
+    if (dialog.exec() == QDialog::Accepted) {
+        m_proxyModel->setFilterOptions(dialog.filterOptions());
+    }
+}
+
 #include "mainwindow.moc"
index 0f8e2151b8bc28f763f1aba53f75e3ebbd7e510b..e66bd937ffea9dd52f7e041e1d159c80265eb962 100644 (file)
@@ -41,6 +41,7 @@ private slots:
     void startedLoadingTrace();
     void finishedLoadingTrace();
     void lookupState();
+    void showSettings();
 
 private:
     void newTraceFile(const QString &fileName);
diff --git a/gui/settingsdialog.cpp b/gui/settingsdialog.cpp
new file mode 100644 (file)
index 0000000..eab63dd
--- /dev/null
@@ -0,0 +1,37 @@
+#include "settingsdialog.h"
+
+SettingsDialog::SettingsDialog(QWidget *parent)
+    : QDialog(parent)
+{
+    setupUi(this);
+}
+
+void SettingsDialog::accept()
+{
+    m_filterOptions = ApiTraceFilter::NullFilter;
+    if (extensionsBox->isChecked())
+        m_filterOptions |= ApiTraceFilter::ExtensionsFilter;
+    if (functionsBox->isChecked())
+        m_filterOptions |= ApiTraceFilter::ResolutionsFilter;
+    if (errorsBox->isChecked())
+        m_filterOptions |= ApiTraceFilter::ErrorsQueryFilter;
+    if (statesBox->isChecked())
+        m_filterOptions |= ApiTraceFilter::ExtraStateFilter;
+    QDialog::accept();
+}
+
+void SettingsDialog::setFilterOptions(ApiTraceFilter::FilterOptions opts)
+{
+    m_filterOptions = opts;
+    extensionsBox->setChecked(m_filterOptions & ApiTraceFilter::ExtensionsFilter);
+    functionsBox->setChecked(m_filterOptions & ApiTraceFilter::ResolutionsFilter);
+    errorsBox->setChecked(m_filterOptions & ApiTraceFilter::ErrorsQueryFilter);
+    statesBox->setChecked(m_filterOptions & ApiTraceFilter::ExtraStateFilter);
+}
+
+ApiTraceFilter::FilterOptions SettingsDialog::filterOptions() const
+{
+    return m_filterOptions;
+}
+
+#include "settingsdialog.moc"
diff --git a/gui/settingsdialog.h b/gui/settingsdialog.h
new file mode 100644 (file)
index 0000000..6c82b40
--- /dev/null
@@ -0,0 +1,23 @@
+#ifndef SETTINGSDIALOG_H
+#define SETTINGSDIALOG_H
+
+#include "apitracefilter.h"
+#include "ui_settings.h"
+#include <QDialog>
+
+
+class SettingsDialog : public QDialog, public Ui_Settings
+{
+    Q_OBJECT
+public:
+    SettingsDialog(QWidget *parent = 0);
+    void accept();
+
+    void setFilterOptions(ApiTraceFilter::FilterOptions opts);
+    ApiTraceFilter::FilterOptions filterOptions() const;
+
+private:
+    ApiTraceFilter::FilterOptions m_filterOptions;
+};
+
+#endif
index d4bea826cf4fbc6bad3ddd6dc4a505f92c3cf6ef..76e0e8b412b089dd27dc74b6bb08723b82311a96 100644 (file)
@@ -54,6 +54,8 @@
     <addaction name="actionReplay"/>
     <addaction name="actionStop"/>
     <addaction name="actionLookupState"/>
+    <addaction name="separator"/>
+    <addaction name="actionOptions"/>
    </widget>
    <addaction name="menuFile"/>
    <addaction name="menu_Trace"/>
     <string>Lookup State</string>
    </property>
   </action>
+  <action name="actionOptions">
+   <property name="text">
+    <string>Options</string>
+   </property>
+  </action>
  </widget>
  <customwidgets>
   <customwidget>
diff --git a/gui/ui/settings.ui b/gui/ui/settings.ui
new file mode 100644 (file)
index 0000000..1e84070
--- /dev/null
@@ -0,0 +1,101 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>Settings</class>
+ <widget class="QDialog" name="Settings">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>316</width>
+    <height>128</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>QApiTrace Settings</string>
+  </property>
+  <layout class="QVBoxLayout" name="verticalLayout">
+   <item>
+    <widget class="QGroupBox" name="groupBox">
+     <property name="title">
+      <string>Filtered Events</string>
+     </property>
+     <layout class="QGridLayout" name="gridLayout">
+      <item row="0" column="0">
+       <widget class="QCheckBox" name="extensionsBox">
+        <property name="text">
+         <string>Extension queries</string>
+        </property>
+       </widget>
+      </item>
+      <item row="0" column="1">
+       <widget class="QCheckBox" name="functionsBox">
+        <property name="text">
+         <string>Function resolution</string>
+        </property>
+       </widget>
+      </item>
+      <item row="1" column="0">
+       <widget class="QCheckBox" name="errorsBox">
+        <property name="text">
+         <string>Error queries</string>
+        </property>
+       </widget>
+      </item>
+      <item row="1" column="1">
+       <widget class="QCheckBox" name="statesBox">
+        <property name="text">
+         <string>Extra state queries</string>
+        </property>
+       </widget>
+      </item>
+     </layout>
+    </widget>
+   </item>
+   <item>
+    <widget class="QDialogButtonBox" name="buttonBox">
+     <property name="orientation">
+      <enum>Qt::Horizontal</enum>
+     </property>
+     <property name="standardButtons">
+      <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
+     </property>
+    </widget>
+   </item>
+  </layout>
+ </widget>
+ <resources/>
+ <connections>
+  <connection>
+   <sender>buttonBox</sender>
+   <signal>accepted()</signal>
+   <receiver>Settings</receiver>
+   <slot>accept()</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>248</x>
+     <y>254</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>157</x>
+     <y>274</y>
+    </hint>
+   </hints>
+  </connection>
+  <connection>
+   <sender>buttonBox</sender>
+   <signal>rejected()</signal>
+   <receiver>Settings</receiver>
+   <slot>reject()</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>316</x>
+     <y>260</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>286</x>
+     <y>274</y>
+    </hint>
+   </hints>
+  </connection>
+ </connections>
+</ui>