Mercurial > retraceit
view src/filterwidget.cpp @ 88:3916cb3c9105
Add new FilterSort model that allows to include empty values
author | Andre Heinecke <andre.heinecke@intevation.de> |
---|---|
date | Fri, 19 Jun 2015 14:26:16 +0200 |
parents | 4e16fbd10945 |
children | b8c7644a9d49 |
line wrap: on
line source
/* Copyright (C) 2015 by ETH Zürich * Software engineering by Intevation GmbH * * This file is Free Software under the GNU GPL (v>=2) * and comes with ABSOLUTELY NO WARRANTY! * See LICENSE.txt for details. */ #include "filterwidget.h" #include <QComboBox> #include <QHBoxLayout> #include <QGroupBox> #include <QSortFilterProxyModel> #include <QAbstractItemModel> #include <QLineEdit> #include <QDebug> FilterWidget::FilterWidget(QSortFilterProxyModel *model, bool addWithEmptyChk, QWidget *parent, Qt::WindowFlags f) : QWidget(parent, f), mModel(model), mWithEmptyChk(addWithEmptyChk) { Q_ASSERT(model); setupGUI(); void (QComboBox:: *idxChanged)(int) = &QComboBox::currentIndexChanged; connect(mCombo, idxChanged, this, &FilterWidget::filterChanged); //connect(mCombo, SIGNAL(currentIndexChanged(int)), this, SLOT(filterChanged())); connect(mEditLine, &QLineEdit::textChanged, this, &FilterWidget::filterChanged); } void FilterWidget::headersChanged() { mCombo->blockSignals(true); QAbstractItemModel *newSource = mModel->sourceModel(); Q_ASSERT(newSource); mCombo->clear(); mColFilterMap.clear(); int addedItems = 0; for (int i=0; i < newSource->columnCount(); i++) { QString entry = newSource->headerData(i, Qt::Horizontal).toString(); if (!entry.startsWith("#")) { mCombo->addItem(entry); mColFilterMap.insert(addedItems++, i); } else { if (!newSource->setHeaderData(i, Qt::Horizontal, entry.remove(0,1), Qt::DisplayRole)) { qDebug() << "Setting header data failed."; } } } mCombo->blockSignals(false); } void FilterWidget::filterChanged() { QString filterText = mEditLine->text(); mModel->setFilterKeyColumn(mColFilterMap.value(mCombo->currentIndex())); mModel->setFilterWildcard(filterText); emit filterHasChanged(); } void FilterWidget::setupGUI() { QHBoxLayout *root = new QHBoxLayout; QGroupBox *baseGroup = new QGroupBox(tr("Filter")); root->addWidget(baseGroup); QHBoxLayout *baseLayout = new QHBoxLayout; baseGroup->setLayout(baseLayout); mCombo = new QComboBox; baseLayout->addWidget(mCombo); mEditLine = new QLineEdit; mEditLine->setPlaceholderText(tr("Filter expression")); mEditLine->setClearButtonEnabled(true); baseLayout->addWidget(mEditLine); if (mWithEmptyChk) { mEmptyChk = new QCheckBox(tr("Include empty fields")); baseLayout->addWidget(mEmptyChk); connect(mEmptyChk, &QCheckBox::stateChanged, this, &FilterWidget::includeEmptyChanged); } setLayout(root); }