view src/filterwidget.cpp @ 17:73efe717b944

Fix bug in csv model to allow changing headerdata
author Andre Heinecke <andre.heinecke@intevation.de>
date Tue, 14 Apr 2015 18:55:55 +0200
parents 315e6988952a
children e12284a222ba
line wrap: on
line source
#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();
    if (filterText.size() < 1) {
        return;
    }
    qDebug() << "Filter on Column: " << mColFilterMap.value(mCombo->currentIndex());
    qDebug() << "Instead of: " << mCombo->currentIndex();
    mModel->setFilterKeyColumn(mColFilterMap.value(mCombo->currentIndex()));
    mModel->setFilterWildcard(filterText);
}

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);
}
This site is hosted by Intevation GmbH (Datenschutzerklärung und Impressum | Privacy Policy and Imprint)