blob: c44b10740ec97d9f4e631b4acfd23ad7b27f6970 [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);
Zack Rusin101c4942011-09-24 17:06:38 -040041 customBox->setChecked(opts & ApiTraceFilter::CustomFilter);
42 QString customFilter = model->customFilterRegexp();
43 if (!customFilter.isEmpty()) {
44 customEdit->setText(customFilter);
45 } else {
46 //Add a common default
47 QLatin1String str("glXMakeContextCurrent");
48 customEdit->setText(str);
49 }
Zack Rusin20e6a8c2011-04-13 00:41:32 -040050
51 QRegExp regexp = model->filterRegexp();
52 if (regexp.isEmpty()) {
53 showFilterBox->setChecked(false);
54 } else {
55 showFilterBox->setChecked(true);
56 QMap<QString, QRegExp>::const_iterator itr;
57 int i = 0;
58 for (itr = m_showFilters.constBegin();
59 itr != m_showFilters.constEnd(); ++itr, ++i) {
60 if (itr.value() == regexp) {
61 showFilterCB->setCurrentIndex(i);
62 showFilterEdit->setText(itr.value().pattern());
63 return;
64 }
65 }
66 /* custom filter */
67 showFilterCB->setCurrentIndex(m_showFilters.count());
68 showFilterEdit->setText(regexp.pattern());
69 }
70}
71
72void SettingsDialog::filtersToModel(ApiTraceFilter *model)
73{
74 ApiTraceFilter::FilterOptions opts = ApiTraceFilter::NullFilter;
Zack Rusin101c4942011-09-24 17:06:38 -040075 if (extensionsBox->isChecked()) {
Zack Rusin20e6a8c2011-04-13 00:41:32 -040076 opts |= ApiTraceFilter::ExtensionsFilter;
Zack Rusin101c4942011-09-24 17:06:38 -040077 }
78 if (functionsBox->isChecked()) {
Zack Rusin20e6a8c2011-04-13 00:41:32 -040079 opts |= ApiTraceFilter::ResolutionsFilter;
Zack Rusin101c4942011-09-24 17:06:38 -040080 }
81 if (errorsBox->isChecked()) {
Zack Rusin20e6a8c2011-04-13 00:41:32 -040082 opts |= ApiTraceFilter::ErrorsQueryFilter;
Zack Rusin101c4942011-09-24 17:06:38 -040083 }
84 if (statesBox->isChecked()) {
Zack Rusin20e6a8c2011-04-13 00:41:32 -040085 opts |= ApiTraceFilter::ExtraStateFilter;
Zack Rusin101c4942011-09-24 17:06:38 -040086 }
87 if (customBox->isChecked()) {
88 opts |= ApiTraceFilter::CustomFilter;
89 m_filter->setCustomFilterRegexp(customEdit->text());
90 }
Zack Rusin20e6a8c2011-04-13 00:41:32 -040091 m_filter->setFilterOptions(opts);
92 if (showFilterBox->isChecked()) {
93 m_filter->setFilterRegexp(QRegExp(showFilterEdit->text()));
94 } else {
95 m_filter->setFilterRegexp(QRegExp());
96 }
Zack Rusine1745572011-04-03 14:30:19 -040097}
98
99void SettingsDialog::accept()
100{
Zack Rusin20e6a8c2011-04-13 00:41:32 -0400101 if (showFilterBox->isChecked()) {
102 QRegExp regexp(showFilterEdit->text());
103 if (!regexp.isValid()) {
104 QMessageBox::warning(
105 this,
106 tr("Invalid Regexp"),
107 tr("The currently set regular expression "
108 "for filtering events is invalid."));
109 return;
110 }
111 }
Zack Rusin101c4942011-09-24 17:06:38 -0400112 if (customBox->isChecked()) {
113 QRegExp regexp(customEdit->text());
114 if (!regexp.isValid()) {
115 QMessageBox::warning(
116 this,
117 tr("Invalid Regexp"),
118 tr("The currently set regular expression "
119 "for custom events is invalid."));
120 return;
121 }
122 }
Zack Rusin20e6a8c2011-04-13 00:41:32 -0400123 filtersToModel(m_filter);
Zack Rusine1745572011-04-03 14:30:19 -0400124 QDialog::accept();
125}
126
Zack Rusin20e6a8c2011-04-13 00:41:32 -0400127void SettingsDialog::changeRegexp(const QString &name)
Zack Rusine1745572011-04-03 14:30:19 -0400128{
Zack Rusin20e6a8c2011-04-13 00:41:32 -0400129 showFilterEdit->setText(m_showFilters[name].pattern());
Zack Rusine1745572011-04-03 14:30:19 -0400130}
131
Zack Rusin20e6a8c2011-04-13 00:41:32 -0400132void SettingsDialog::regexpChanged(const QString &pattern)
Zack Rusine1745572011-04-03 14:30:19 -0400133{
Zack Rusin20e6a8c2011-04-13 00:41:32 -0400134 int customIndex = m_showFilters.count();
135 if (showFilterCB->currentIndex() != customIndex) {
136 showFilterCB->blockSignals(true);
137 showFilterCB->setCurrentIndex(customIndex);
138 showFilterCB->blockSignals(false);
139 }
140}
141
142void SettingsDialog::setFilterModel(ApiTraceFilter *filter)
143{
144 m_filter = filter;
145 filtersFromModel(m_filter);
Zack Rusine1745572011-04-03 14:30:19 -0400146}
147
Zack Rusine1745572011-04-03 14:30:19 -0400148#include "settingsdialog.moc"