]> git.cworth.org Git - apitrace/blob - gui/apitracefilter.cpp
Implement jumping to a specific call.
[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 & ErrorsQueryFilter) {
46         if (function.contains(QLatin1String("glGetError")))
47             return false;
48     }
49
50     if (m_filters & ExtraStateFilter) {
51         if (function.contains(QLatin1String("glXGetCurrentDisplay")))
52             return false;
53     }
54
55     if (m_filters & ExtensionsFilter) {
56         if (function.contains(QLatin1String("glXGetClientString")))
57             return false;
58         if (function.contains(QLatin1String("glXQueryExtensionsString")))
59             return false;
60         QString fullText = call->filterText();
61         if (function.contains(QLatin1String("glGetString")) &&
62             fullText.contains(QLatin1String("GL_EXTENSIONS")))
63             return false;
64     }
65
66
67     return true;
68 }
69
70
71 void ApiTraceFilter::setFilterString(const QString &text)
72 {
73     if (text != m_text) {
74         m_text = text;
75         invalidate();
76     }
77 }
78
79 ApiTraceFilter::FilterOptions ApiTraceFilter::filterOptions() const
80 {
81     return m_filters;
82 }
83
84 void ApiTraceFilter::setFilterOptions(ApiTraceFilter::FilterOptions opts)
85 {
86     if (opts != m_filters) {
87         m_filters = opts;
88         invalidate();
89     }
90 }
91
92 QModelIndex ApiTraceFilter::callIndex(int callNum) const
93 {
94     ApiTraceModel *model = static_cast<ApiTraceModel *>(sourceModel());
95     QModelIndex index = model->callIndex(callNum);
96     return mapFromSource(index);
97 }
98
99 #include "apitracefilter.moc"