|  | Home · All Classes · Main Classes · Grouped Classes · Modules · Functions |

# window.cpp Example File
itemviews/basicsortfiltermodel/window.cpp

        /****************************************************************************
        **
        ** Copyright (C) 2006-2006 Trolltech ASA. All rights reserved.
        **
        ** This file is part of the example classes of the Qt Toolkit.
        **
        ** Licensees holding valid Qt Preview licenses may use this file in
        ** accordance with the Qt Preview License Agreement provided with the
        ** Software.
        **
        ** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for
        ** information about Qt Commercial License Agreements.
        **
        ** Contact info@trolltech.com if any conditions of this licensing are
        ** not clear to you.
        **
        ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
        ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
        **
        ****************************************************************************/

        #include <QtGui>

        #include "window.h"

        Window::Window()
        {
            proxyModel = new QSortFilterProxyModel;
            proxyModel->setDynamicSortFilter(true);

            sourceGroupBox = new QGroupBox(tr("Original Model"));
            proxyGroupBox = new QGroupBox(tr("Sorted/Filtered Model"));

            sourceView = new QTreeView;
            sourceView->setRootIsDecorated(false);
            sourceView->setAlternatingRowColors(true);

            proxyView = new QTreeView;
            proxyView->setRootIsDecorated(false);
            proxyView->setAlternatingRowColors(true);
            proxyView->setModel(proxyModel);
            proxyView->setSortingEnabled(true);

            sortCaseSensitivityCheckBox = new QCheckBox(tr("Case sensitive sorting"));
            filterCaseSensitivityCheckBox = new QCheckBox(tr("Case sensitive filter"));

            filterPatternLineEdit = new QLineEdit;
            filterPatternLabel = new QLabel(tr("&Filter pattern:"));
            filterPatternLabel->setBuddy(filterPatternLineEdit);

            filterSyntaxComboBox = new QComboBox;
            filterSyntaxComboBox->addItem(tr("Regular expression"), QRegExp::RegExp);
            filterSyntaxComboBox->addItem(tr("Wildcard"), QRegExp::Wildcard);
            filterSyntaxComboBox->addItem(tr("Fixed string"), QRegExp::FixedString);
            filterSyntaxLabel = new QLabel(tr("Filter &syntax:"));
            filterSyntaxLabel->setBuddy(filterSyntaxComboBox);

            filterColumnComboBox = new QComboBox;
            filterColumnComboBox->addItem(tr("Subject"));
            filterColumnComboBox->addItem(tr("Sender"));
            filterColumnComboBox->addItem(tr("Date"));
            filterColumnLabel = new QLabel(tr("Filter &column:"));
            filterColumnLabel->setBuddy(filterColumnComboBox);

            connect(filterPatternLineEdit, SIGNAL(textChanged(const QString &)),
                    this, SLOT(filterRegExpChanged()));
            connect(filterSyntaxComboBox, SIGNAL(currentIndexChanged(int)),
                    this, SLOT(filterRegExpChanged()));
            connect(filterColumnComboBox, SIGNAL(currentIndexChanged(int)),
                    this, SLOT(filterColumnChanged()));
            connect(filterCaseSensitivityCheckBox, SIGNAL(toggled(bool)),
                    this, SLOT(filterRegExpChanged()));
            connect(sortCaseSensitivityCheckBox, SIGNAL(toggled(bool)),
                    this, SLOT(sortChanged()));

            QHBoxLayout *sourceLayout = new QHBoxLayout;
            sourceLayout->addWidget(sourceView);
            sourceGroupBox->setLayout(sourceLayout);

            QGridLayout *proxyLayout = new QGridLayout;
            proxyLayout->addWidget(proxyView, 0, 0, 1, 3);
            proxyLayout->addWidget(filterPatternLabel, 1, 0);
            proxyLayout->addWidget(filterPatternLineEdit, 1, 1, 1, 2);
            proxyLayout->addWidget(filterSyntaxLabel, 2, 0);
            proxyLayout->addWidget(filterSyntaxComboBox, 2, 1, 1, 2);
            proxyLayout->addWidget(filterColumnLabel, 3, 0);
            proxyLayout->addWidget(filterColumnComboBox, 3, 1, 1, 2);
            proxyLayout->addWidget(filterCaseSensitivityCheckBox, 4, 0, 1, 2);
            proxyLayout->addWidget(sortCaseSensitivityCheckBox, 4, 2);
            proxyGroupBox->setLayout(proxyLayout);

            QVBoxLayout *mainLayout = new QVBoxLayout;
            mainLayout->addWidget(sourceGroupBox);
            mainLayout->addWidget(proxyGroupBox);
            setLayout(mainLayout);

            setWindowTitle(tr("Basic Sort/Filter Model"));
            resize(500, 450);

            proxyView->header()->setSortIndicator(1, Qt::AscendingOrder);
            filterPatternLineEdit->setText("Accounts|Expenses");
            filterCaseSensitivityCheckBox->setChecked(true);
            sortCaseSensitivityCheckBox->setChecked(true);
        }

        void Window::setSourceModel(QAbstractItemModel *model)
        {
            proxyModel->setSourceModel(model);
            sourceView->setModel(model);
        }

        void Window::filterRegExpChanged()
        {
            QRegExp::PatternSyntax syntax =
                    QRegExp::PatternSyntax(filterSyntaxComboBox->itemData(
                            filterSyntaxComboBox->currentIndex()).toInt());
            Qt::CaseSensitivity caseSensitivity =
                    filterCaseSensitivityCheckBox->isChecked() ? Qt::CaseSensitive
                                                               : Qt::CaseInsensitive;

            QRegExp regExp(filterPatternLineEdit->text(), caseSensitivity, syntax);
            proxyModel->setFilterRegExp(regExp);
        }

        void Window::filterColumnChanged()
        {
            proxyModel->setFilterKeyColumn(filterColumnComboBox->currentIndex());
        }

        void Window::sortChanged()
        {
            proxyModel->setSortCaseSensitivity(
                    sortCaseSensitivityCheckBox->isChecked() ? Qt::CaseSensitive
                                                             : Qt::CaseInsensitive);
        }