Zack Rusin | e174557 | 2011-04-03 14:30:19 -0400 | [diff] [blame] | 1 | #include "settingsdialog.h" |
| 2 | |
Zack Rusin | 20e6a8c | 2011-04-13 00:41:32 -0400 | [diff] [blame] | 3 | #include <QMessageBox> |
| 4 | |
Zack Rusin | e174557 | 2011-04-03 14:30:19 -0400 | [diff] [blame] | 5 | SettingsDialog::SettingsDialog(QWidget *parent) |
Zack Rusin | 20e6a8c | 2011-04-13 00:41:32 -0400 | [diff] [blame] | 6 | : QDialog(parent), |
| 7 | m_filter(0) |
Zack Rusin | e174557 | 2011-04-03 14:30:19 -0400 | [diff] [blame] | 8 | { |
| 9 | setupUi(this); |
Zack Rusin | 20e6a8c | 2011-04-13 00:41:32 -0400 | [diff] [blame] | 10 | |
| 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 | |
| 34 | void 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 Rusin | 101c494 | 2011-09-24 17:06:38 -0400 | [diff] [blame] | 41 | 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 Rusin | 20e6a8c | 2011-04-13 00:41:32 -0400 | [diff] [blame] | 50 | |
| 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 | |
| 72 | void SettingsDialog::filtersToModel(ApiTraceFilter *model) |
| 73 | { |
| 74 | ApiTraceFilter::FilterOptions opts = ApiTraceFilter::NullFilter; |
Zack Rusin | 101c494 | 2011-09-24 17:06:38 -0400 | [diff] [blame] | 75 | if (extensionsBox->isChecked()) { |
Zack Rusin | 20e6a8c | 2011-04-13 00:41:32 -0400 | [diff] [blame] | 76 | opts |= ApiTraceFilter::ExtensionsFilter; |
Zack Rusin | 101c494 | 2011-09-24 17:06:38 -0400 | [diff] [blame] | 77 | } |
| 78 | if (functionsBox->isChecked()) { |
Zack Rusin | 20e6a8c | 2011-04-13 00:41:32 -0400 | [diff] [blame] | 79 | opts |= ApiTraceFilter::ResolutionsFilter; |
Zack Rusin | 101c494 | 2011-09-24 17:06:38 -0400 | [diff] [blame] | 80 | } |
| 81 | if (errorsBox->isChecked()) { |
Zack Rusin | 20e6a8c | 2011-04-13 00:41:32 -0400 | [diff] [blame] | 82 | opts |= ApiTraceFilter::ErrorsQueryFilter; |
Zack Rusin | 101c494 | 2011-09-24 17:06:38 -0400 | [diff] [blame] | 83 | } |
| 84 | if (statesBox->isChecked()) { |
Zack Rusin | 20e6a8c | 2011-04-13 00:41:32 -0400 | [diff] [blame] | 85 | opts |= ApiTraceFilter::ExtraStateFilter; |
Zack Rusin | 101c494 | 2011-09-24 17:06:38 -0400 | [diff] [blame] | 86 | } |
| 87 | if (customBox->isChecked()) { |
| 88 | opts |= ApiTraceFilter::CustomFilter; |
| 89 | m_filter->setCustomFilterRegexp(customEdit->text()); |
| 90 | } |
Zack Rusin | 20e6a8c | 2011-04-13 00:41:32 -0400 | [diff] [blame] | 91 | m_filter->setFilterOptions(opts); |
| 92 | if (showFilterBox->isChecked()) { |
| 93 | m_filter->setFilterRegexp(QRegExp(showFilterEdit->text())); |
| 94 | } else { |
| 95 | m_filter->setFilterRegexp(QRegExp()); |
| 96 | } |
Zack Rusin | e174557 | 2011-04-03 14:30:19 -0400 | [diff] [blame] | 97 | } |
| 98 | |
| 99 | void SettingsDialog::accept() |
| 100 | { |
Zack Rusin | 20e6a8c | 2011-04-13 00:41:32 -0400 | [diff] [blame] | 101 | 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 Rusin | 101c494 | 2011-09-24 17:06:38 -0400 | [diff] [blame] | 112 | 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 Rusin | 20e6a8c | 2011-04-13 00:41:32 -0400 | [diff] [blame] | 123 | filtersToModel(m_filter); |
Zack Rusin | e174557 | 2011-04-03 14:30:19 -0400 | [diff] [blame] | 124 | QDialog::accept(); |
| 125 | } |
| 126 | |
Zack Rusin | 20e6a8c | 2011-04-13 00:41:32 -0400 | [diff] [blame] | 127 | void SettingsDialog::changeRegexp(const QString &name) |
Zack Rusin | e174557 | 2011-04-03 14:30:19 -0400 | [diff] [blame] | 128 | { |
Zack Rusin | 20e6a8c | 2011-04-13 00:41:32 -0400 | [diff] [blame] | 129 | showFilterEdit->setText(m_showFilters[name].pattern()); |
Zack Rusin | e174557 | 2011-04-03 14:30:19 -0400 | [diff] [blame] | 130 | } |
| 131 | |
Zack Rusin | 20e6a8c | 2011-04-13 00:41:32 -0400 | [diff] [blame] | 132 | void SettingsDialog::regexpChanged(const QString &pattern) |
Zack Rusin | e174557 | 2011-04-03 14:30:19 -0400 | [diff] [blame] | 133 | { |
Zack Rusin | 20e6a8c | 2011-04-13 00:41:32 -0400 | [diff] [blame] | 134 | 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 | |
| 142 | void SettingsDialog::setFilterModel(ApiTraceFilter *filter) |
| 143 | { |
| 144 | m_filter = filter; |
| 145 | filtersFromModel(m_filter); |
Zack Rusin | e174557 | 2011-04-03 14:30:19 -0400 | [diff] [blame] | 146 | } |
| 147 | |
Zack Rusin | e174557 | 2011-04-03 14:30:19 -0400 | [diff] [blame] | 148 | #include "settingsdialog.moc" |