File indexing completed on 2023-05-30 10:45:26

0001 /*
0002     SPDX-FileCopyrightText: 2007-2010 Peter Hedlund <peter.hedlund@kdemail.net>
0003     SPDX-License-Identifier: GPL-2.0-or-later
0004 */
0005 
0006 #include "kwqsortfiltermodel.h"
0007 #include "kwqtablemodel.h"
0008 
0009 #include <KRandom>
0010 
0011 KWQSortFilterModel::KWQSortFilterModel(QObject *parent) : QSortFilterProxyModel(parent)
0012 {
0013     m_sourceModel = 0;
0014     setSortCaseSensitivity(Qt::CaseInsensitive);
0015     setFilterCaseSensitivity(Qt::CaseInsensitive);
0016     setFilterKeyColumn(-1);
0017     m_restoreNativeOrder = false;
0018     m_shuffle = false;
0019 }
0020 
0021 void KWQSortFilterModel::setTableModel(KWQTableModel * sourceModel)
0022 {
0023     m_sourceModel = sourceModel;
0024     QSortFilterProxyModel::setSourceModel(sourceModel);
0025 }
0026 
0027 KWQTableModel * KWQSortFilterModel::sourceModel() const
0028 {
0029     return m_sourceModel;
0030 }
0031 
0032 bool KWQSortFilterModel::lessThan(const QModelIndex & left, const QModelIndex & right) const
0033 {
0034     if (m_shuffle)
0035         return m_shuffleList.at(right.row()) < m_shuffleList.at(left.row());
0036     else if (m_restoreNativeOrder)
0037         return sourceModel()->index(right.row(),  right.column(),  QModelIndex()).row() <
0038                sourceModel()->index(left.row(), left.column(), QModelIndex()).row();
0039     else
0040         return QSortFilterProxyModel::lessThan(left, right);
0041 }
0042 
0043 void KWQSortFilterModel::restoreNativeOrder()
0044 {
0045     m_restoreNativeOrder = true;
0046     sort(-1, Qt::AscendingOrder);
0047     invalidate();
0048     m_restoreNativeOrder = false;
0049 }
0050 
0051 void KWQSortFilterModel::shuffle()
0052 {
0053     m_shuffleList.clear();
0054     for (int i = 0; i < rowCount(QModelIndex()); ++i)
0055         m_shuffleList.append(i);
0056 
0057     KRandom::shuffle(m_shuffleList, QRandomGenerator::global());
0058     m_shuffle = true;
0059     sort(0, Qt::AscendingOrder);
0060     invalidate();
0061     m_shuffle = false;
0062 }