1 /*
2 SPDX-FileCopyrightText: 2018-2021 Laurent Montel <montel@kde.org>
3
4 SPDX-License-Identifier: LGPL-2.0-or-later
5 */
6
7 #include "usersforroomfilterproxymodel.h"
8 #include "usersforroommodel.h"
9
UsersForRoomFilterProxyModel(QObject * parent)10 UsersForRoomFilterProxyModel::UsersForRoomFilterProxyModel(QObject *parent)
11 : QSortFilterProxyModel(parent)
12 {
13 setFilterCaseSensitivity(Qt::CaseInsensitive);
14 // Filter on alias/username ?
15 setFilterRole(UsersForRoomModel::UsersForRoomRoles::UserName);
16 setSortRole(UsersForRoomModel::UsersForRoomRoles::UserName);
17 sort(0);
18 }
19
20 UsersForRoomFilterProxyModel::~UsersForRoomFilterProxyModel() = default;
21
clearFilter()22 void UsersForRoomFilterProxyModel::clearFilter()
23 {
24 setFilterFixedString({});
25 mStatusType.clear();
26 }
27
setFilterString(const QString & string)28 void UsersForRoomFilterProxyModel::setFilterString(const QString &string)
29 {
30 setFilterFixedString(string);
31 }
32
hasFullList() const33 bool UsersForRoomFilterProxyModel::hasFullList() const
34 {
35 return static_cast<UsersForRoomModel *>(sourceModel())->hasFullList();
36 }
37
lessThan(const QModelIndex & left,const QModelIndex & right) const38 bool UsersForRoomFilterProxyModel::lessThan(const QModelIndex &left, const QModelIndex &right) const
39 {
40 if (!sourceModel()) {
41 return false;
42 }
43 if (left.isValid() && right.isValid()) {
44 const QString leftString = sourceModel()->data(left, UsersForRoomModel::UserName).toString();
45 const QString rightString = sourceModel()->data(right, UsersForRoomModel::UserName).toString();
46 return QString::localeAwareCompare(leftString, rightString) < 0;
47 } else {
48 return false;
49 }
50 }
51
setStatusType(const QString & statusType)52 void UsersForRoomFilterProxyModel::setStatusType(const QString &statusType)
53 {
54 if (mStatusType != statusType) {
55 mStatusType = statusType;
56 invalidateFilter();
57 }
58 }
59
loadMoreUsersInProgress() const60 bool UsersForRoomFilterProxyModel::loadMoreUsersInProgress() const
61 {
62 return static_cast<UsersForRoomModel *>(sourceModel())->loadMoreUsersInProgress();
63 }
64
total() const65 int UsersForRoomFilterProxyModel::total() const
66 {
67 return static_cast<UsersForRoomModel *>(sourceModel())->total();
68 }
69
numberOfUsers() const70 int UsersForRoomFilterProxyModel::numberOfUsers() const
71 {
72 return static_cast<UsersForRoomModel *>(sourceModel())->usersCount();
73 }
74
filterAcceptsRow(int source_row,const QModelIndex & source_parent) const75 bool UsersForRoomFilterProxyModel::filterAcceptsRow(int source_row, const QModelIndex &source_parent) const
76 {
77 if (mStatusType.isEmpty()) {
78 return QSortFilterProxyModel::filterAcceptsRow(source_row, source_parent);
79 }
80 const QModelIndex sourceIndex = sourceModel()->index(source_row, 0, source_parent);
81 const QString statusType = sourceIndex.data(UsersForRoomModel::Status).toString();
82 return (mStatusType == statusType) && QSortFilterProxyModel::filterAcceptsRow(source_row, source_parent);
83 }
84