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 }