]> git.cworth.org Git - apitrace/blob - gui/apitracefilter.cpp
Allow setting of the filter options.
[apitrace] / gui / apitracefilter.cpp
1 #include "apitracefilter.h"
2
3 #include "apitracecall.h"
4 #include "apitracemodel.h"
5
6 #include <QDebug>
7
8 ApiTraceFilter::ApiTraceFilter(QObject *parent)
9     : QSortFilterProxyModel(),
10       m_filters(ExtensionsFilter | ResolutionsFilter |
11                 ErrorsQueryFilter | ExtraStateFilter)
12 {
13 }
14
15 bool ApiTraceFilter::filterAcceptsRow(int sourceRow,
16                                       const QModelIndex &sourceParent) const
17 {
18     QModelIndex index0 = sourceModel()->index(sourceRow, 0, sourceParent);
19     QVariant varientData = sourceModel()->data(index0, ApiTraceModel::EventRole);
20     ApiTraceEvent *event = varientData.value<ApiTraceEvent*>();
21
22     Q_ASSERT(event);
23     if (!event)
24         return false;
25
26     //we don't filter frames
27     if (event->type() == ApiTraceEvent::Frame) {
28         return true;
29     }
30
31     ApiTraceCall *call = static_cast<ApiTraceCall*>(event);
32     QString function = call->name;
33
34     if (!m_text.isEmpty()) {
35         return function.contains(m_text);
36     }
37
38     if (m_filters & ResolutionsFilter) {
39         if (function.contains(QLatin1String("glXGetProcAddress")))
40             return false;
41         if (function.contains(QLatin1String("wglGetProcAddress")))
42             return false;
43     }
44
45     if (m_filters & ExtensionsFilter) {
46         QString fullText = call->filterText();
47         if (function.contains(QLatin1String("glGetString")) &&
48             fullText.contains(QLatin1String("GL_EXTENSIONS")))
49             return false;
50         if (function.contains(QLatin1String("glXGetClientString")))
51             return false;
52     }
53
54     if (m_filters & ErrorsQueryFilter) {
55         if (function.contains(QLatin1String("glGetError")))
56             return false;
57     }
58
59     if (m_filters & ExtraStateFilter) {
60         if (function.contains(QLatin1String("glXGetCurrentDisplay")))
61             return false;
62     }
63
64     return true;
65 }
66
67
68 void ApiTraceFilter::setFilterString(const QString &text)
69 {
70     if (text != m_text) {
71         m_text = text;
72         invalidate();
73     }
74 }
75
76 ApiTraceFilter::FilterOptions ApiTraceFilter::filterOptions() const
77 {
78     return m_filters;
79 }
80
81 void ApiTraceFilter::setFilterOptions(ApiTraceFilter::FilterOptions opts)
82 {
83     if (opts != m_filters) {
84         m_filters = opts;
85         invalidate();
86     }
87 }
88
89 #include "apitracefilter.moc"