loaderthread.cpp
mainwindow.cpp
main.cpp
+ settingsdialog.cpp
)
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})
#include <QDebug>
ApiTraceFilter::ApiTraceFilter(QObject *parent)
- : QSortFilterProxyModel()
+ : QSortFilterProxyModel(),
+ m_filters(ExtensionsFilter | ResolutionsFilter |
+ ErrorsQueryFilter | ExtraStateFilter)
{
}
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;
}
}
}
+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"
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
#include "apicalldelegate.h"
#include "apitracemodel.h"
#include "apitracefilter.h"
+#include "settingsdialog.h"
#include <qjson/parser.h>
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 &)));
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"
void startedLoadingTrace();
void finishedLoadingTrace();
void lookupState();
+ void showSettings();
private:
void newTraceFile(const QString &fileName);
--- /dev/null
+#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"
--- /dev/null
+#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
<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>
--- /dev/null
+<?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>