blob: e3d7864b6ae751cf5368ec8b77427f5e0371367c [file] [log] [blame]
Zack Rusine1745572011-04-03 14:30:19 -04001#include "settingsdialog.h"
2
Zack Rusin20e6a8c2011-04-13 00:41:32 -04003#include <QMessageBox>
4
Zack Rusine1745572011-04-03 14:30:19 -04005SettingsDialog::SettingsDialog(QWidget *parent)
Zack Rusin20e6a8c2011-04-13 00:41:32 -04006 : QDialog(parent),
7 m_filter(0)
Zack Rusine1745572011-04-03 14:30:19 -04008{
9 setupUi(this);
Zack Rusin20e6a8c2011-04-13 00:41:32 -040010
11 m_showFilters.insert(
12 tr("Draw events"),
13 QRegExp("glDraw|glVertex|glBegin|glEnd"));
14 m_showFilters.insert(
15 tr("Texture events"),
16 QRegExp("glTex|glBindTex|glBegin|glEnd"));
17
18 QMap<QString, QRegExp>::const_iterator itr;
19 for (itr = m_showFilters.constBegin();
20 itr != m_showFilters.constEnd(); ++itr) {
21 showFilterCB->addItem(itr.key(), itr.value());
22 }
23 showFilterCB->addItem(tr("Custom"), QRegExp());
24
25 connect(showFilterCB, SIGNAL(currentIndexChanged(const QString &)),
26 SLOT(changeRegexp(const QString&)));
27 connect(showFilterEdit, SIGNAL(textEdited(const QString &)),
28 SLOT(regexpChanged(const QString&)));
29
30 showFilterCB->setCurrentIndex(0);
31 showFilterEdit->setText(m_showFilters.constBegin().value().pattern());
32}
33
34void SettingsDialog::filtersFromModel(const ApiTraceFilter *model)
35{
36 ApiTraceFilter::FilterOptions opts = model->filterOptions();
37 extensionsBox->setChecked(opts & ApiTraceFilter::ExtensionsFilter);
38 functionsBox->setChecked(opts & ApiTraceFilter::ResolutionsFilter);
39 errorsBox->setChecked(opts & ApiTraceFilter::ErrorsQueryFilter);
40 statesBox->setChecked(opts & ApiTraceFilter::ExtraStateFilter);
41
42 QRegExp regexp = model->filterRegexp();
43 if (regexp.isEmpty()) {
44 showFilterBox->setChecked(false);
45 } else {
46 showFilterBox->setChecked(true);
47 QMap<QString, QRegExp>::const_iterator itr;
48 int i = 0;
49 for (itr = m_showFilters.constBegin();
50 itr != m_showFilters.constEnd(); ++itr, ++i) {
51 if (itr.value() == regexp) {
52 showFilterCB->setCurrentIndex(i);
53 showFilterEdit->setText(itr.value().pattern());
54 return;
55 }
56 }
57 /* custom filter */
58 showFilterCB->setCurrentIndex(m_showFilters.count());
59 showFilterEdit->setText(regexp.pattern());
60 }
61}
62
63void SettingsDialog::filtersToModel(ApiTraceFilter *model)
64{
65 ApiTraceFilter::FilterOptions opts = ApiTraceFilter::NullFilter;
66 if (extensionsBox->isChecked())
67 opts |= ApiTraceFilter::ExtensionsFilter;
68 if (functionsBox->isChecked())
69 opts |= ApiTraceFilter::ResolutionsFilter;
70 if (errorsBox->isChecked())
71 opts |= ApiTraceFilter::ErrorsQueryFilter;
72 if (statesBox->isChecked())
73 opts |= ApiTraceFilter::ExtraStateFilter;
74 m_filter->setFilterOptions(opts);
75 if (showFilterBox->isChecked()) {
76 m_filter->setFilterRegexp(QRegExp(showFilterEdit->text()));
77 } else {
78 m_filter->setFilterRegexp(QRegExp());
79 }
Zack Rusine1745572011-04-03 14:30:19 -040080}
81
82void SettingsDialog::accept()
83{
Zack Rusin20e6a8c2011-04-13 00:41:32 -040084 if (showFilterBox->isChecked()) {
85 QRegExp regexp(showFilterEdit->text());
86 if (!regexp.isValid()) {
87 QMessageBox::warning(
88 this,
89 tr("Invalid Regexp"),
90 tr("The currently set regular expression "
91 "for filtering events is invalid."));
92 return;
93 }
94 }
95 filtersToModel(m_filter);
Zack Rusine1745572011-04-03 14:30:19 -040096 QDialog::accept();
97}
98
Zack Rusin20e6a8c2011-04-13 00:41:32 -040099void SettingsDialog::changeRegexp(const QString &name)
Zack Rusine1745572011-04-03 14:30:19 -0400100{
Zack Rusin20e6a8c2011-04-13 00:41:32 -0400101 showFilterEdit->setText(m_showFilters[name].pattern());
Zack Rusine1745572011-04-03 14:30:19 -0400102}
103
Zack Rusin20e6a8c2011-04-13 00:41:32 -0400104void SettingsDialog::regexpChanged(const QString &pattern)
Zack Rusine1745572011-04-03 14:30:19 -0400105{
Zack Rusin20e6a8c2011-04-13 00:41:32 -0400106 int customIndex = m_showFilters.count();
107 if (showFilterCB->currentIndex() != customIndex) {
108 showFilterCB->blockSignals(true);
109 showFilterCB->setCurrentIndex(customIndex);
110 showFilterCB->blockSignals(false);
111 }
112}
113
114void SettingsDialog::setFilterModel(ApiTraceFilter *filter)
115{
116 m_filter = filter;
117 filtersFromModel(m_filter);
Zack Rusine1745572011-04-03 14:30:19 -0400118}
119
120#include "settingsdialog.moc"