X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=gui%2Fsettingsdialog.cpp;h=42d8d83fff1e30c827cb2bc684382445ff6e043e;hb=2ae3c962d308ceb866f7478866cdcc85f50a987d;hp=eab63ddaddc46fd1fa49db2bfe157cab00297202;hpb=e17455750b302f1cb0750c501ab7593a8846d34e;p=apitrace diff --git a/gui/settingsdialog.cpp b/gui/settingsdialog.cpp index eab63dd..42d8d83 100644 --- a/gui/settingsdialog.cpp +++ b/gui/settingsdialog.cpp @@ -1,37 +1,159 @@ #include "settingsdialog.h" +#include + SettingsDialog::SettingsDialog(QWidget *parent) - : QDialog(parent) + : QDialog(parent), + m_filter(0) { setupUi(this); + + m_showFilters.insert( + tr("Draw events"), + QRegExp("glDraw|glVertex|glBegin|glEnd")); + m_showFilters.insert( + tr("Texture events"), + QRegExp("glTex|glBindTex|glBegin|glEnd")); + + QMap::const_iterator itr; + for (itr = m_showFilters.constBegin(); + itr != m_showFilters.constEnd(); ++itr) { + showFilterCB->addItem(itr.key(), itr.value()); + } + showFilterCB->addItem(tr("Custom"), QRegExp()); + + connect(showFilterCB, SIGNAL(currentIndexChanged(const QString &)), + SLOT(changeRegexp(const QString&))); + connect(showFilterEdit, SIGNAL(textEdited(const QString &)), + SLOT(regexpChanged(const QString&))); + + showFilterCB->setCurrentIndex(0); + showFilterEdit->setText(m_showFilters.constBegin().value().pattern()); +} + +void SettingsDialog::filtersFromModel(const ApiTraceFilter *model) +{ + ApiTraceFilter::FilterOptions opts = model->filterOptions(); + extensionsBox->setChecked(opts & ApiTraceFilter::ExtensionsFilter); + functionsBox->setChecked(opts & ApiTraceFilter::ResolutionsFilter); + errorsBox->setChecked(opts & ApiTraceFilter::ErrorsQueryFilter); + statesBox->setChecked(opts & ApiTraceFilter::ExtraStateFilter); + customBox->setChecked(opts & ApiTraceFilter::CustomFilter); + QString customFilter = model->customFilterRegexp(); + if (!customFilter.isEmpty()) { + customEdit->setText(customFilter); + } else { + //Add a common default + QLatin1String str("glXMakeContextCurrent"); + customEdit->setText(str); + } + + QRegExp regexp = model->filterRegexp(); + if (regexp.isEmpty()) { + showFilterBox->setChecked(false); + } else { + showFilterBox->setChecked(true); + QMap::const_iterator itr; + int i = 0; + for (itr = m_showFilters.constBegin(); + itr != m_showFilters.constEnd(); ++itr, ++i) { + if (itr.value() == regexp) { + showFilterCB->setCurrentIndex(i); + showFilterEdit->setText(itr.value().pattern()); + return; + } + } + /* custom filter */ + showFilterCB->setCurrentIndex(m_showFilters.count()); + showFilterEdit->setText(regexp.pattern()); + } +} + +void SettingsDialog::filtersToModel(ApiTraceFilter *model) +{ + ApiTraceFilter::FilterOptions opts = ApiTraceFilter::NullFilter; + if (extensionsBox->isChecked()) { + opts |= ApiTraceFilter::ExtensionsFilter; + } + if (functionsBox->isChecked()) { + opts |= ApiTraceFilter::ResolutionsFilter; + } + if (errorsBox->isChecked()) { + opts |= ApiTraceFilter::ErrorsQueryFilter; + } + if (statesBox->isChecked()) { + opts |= ApiTraceFilter::ExtraStateFilter; + } + if (customBox->isChecked()) { + opts |= ApiTraceFilter::CustomFilter; + m_filter->setCustomFilterRegexp(customEdit->text()); + } + m_filter->setFilterOptions(opts); + if (showFilterBox->isChecked()) { + m_filter->setFilterRegexp(QRegExp(showFilterEdit->text())); + } else { + m_filter->setFilterRegexp(QRegExp()); + } } void SettingsDialog::accept() { - m_filterOptions = ApiTraceFilter::NullFilter; - if (extensionsBox->isChecked()) - m_filterOptions |= ApiTraceFilter::ExtensionsFilter; - if (functionsBox->isChecked()) - m_filterOptions |= ApiTraceFilter::ResolutionsFilter; - if (errorsBox->isChecked()) - m_filterOptions |= ApiTraceFilter::ErrorsQueryFilter; - if (statesBox->isChecked()) - m_filterOptions |= ApiTraceFilter::ExtraStateFilter; + if (showFilterBox->isChecked()) { + QRegExp regexp(showFilterEdit->text()); + if (!regexp.isValid()) { + QMessageBox::warning( + this, + tr("Invalid Regexp"), + tr("The currently set regular expression " + "for filtering events is invalid.")); + return; + } + } + if (customBox->isChecked()) { + QRegExp regexp(customEdit->text()); + if (!regexp.isValid()) { + QMessageBox::warning( + this, + tr("Invalid Regexp"), + tr("The currently set regular expression " + "for custom events is invalid.")); + return; + } + } + filtersToModel(m_filter); QDialog::accept(); } -void SettingsDialog::setFilterOptions(ApiTraceFilter::FilterOptions opts) +void SettingsDialog::changeRegexp(const QString &name) +{ + showFilterEdit->setText(m_showFilters[name].pattern()); +} + +void SettingsDialog::regexpChanged(const QString &pattern) { - m_filterOptions = opts; - extensionsBox->setChecked(m_filterOptions & ApiTraceFilter::ExtensionsFilter); - functionsBox->setChecked(m_filterOptions & ApiTraceFilter::ResolutionsFilter); - errorsBox->setChecked(m_filterOptions & ApiTraceFilter::ErrorsQueryFilter); - statesBox->setChecked(m_filterOptions & ApiTraceFilter::ExtraStateFilter); + int customIndex = m_showFilters.count(); + if (showFilterCB->currentIndex() != customIndex) { + showFilterCB->blockSignals(true); + showFilterCB->setCurrentIndex(customIndex); + showFilterCB->blockSignals(false); + } } -ApiTraceFilter::FilterOptions SettingsDialog::filterOptions() const +void SettingsDialog::setFilterModel(ApiTraceFilter *filter) { - return m_filterOptions; + m_filter = filter; + filtersFromModel(m_filter); +} + +void SettingsDialog::setAPI(trace::API api) +{ + apiComboBox->setCurrentIndex(static_cast(api)); +} + +trace::API SettingsDialog::getAPI(void) +{ + return static_cast(apiComboBox->currentIndex()); + } #include "settingsdialog.moc"