Mercurial > retraceit
view src/filterwidget.cpp @ 67:10569ebcf496
Added tag 0.9.2 for changeset 098a10fc2e83
author | Andre Heinecke <andre.heinecke@intevation.de> |
---|---|
date | Fri, 22 May 2015 12:34:36 +0200 |
parents | 4e16fbd10945 |
children | 3916cb3c9105 |
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, QWidget *parent, Qt::WindowFlags f) : QWidget(parent, f), mModel(model) { Q_ASSERT(model); setupGUI(); connect(mModel, &QSortFilterProxyModel::sourceModelChanged, this, &FilterWidget::headersChanged); 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() { 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."; } } } } 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); setLayout(root); }