18 #include "unitysortfilterproxymodelqml.h"
23 UnitySortFilterProxyModelQML::UnitySortFilterProxyModelQML(QObject *parent)
24 : QSortFilterProxyModel(parent)
25 , m_invertMatch(false)
27 connect(
this, &UnitySortFilterProxyModelQML::modelReset,
this, &UnitySortFilterProxyModelQML::countChanged);
28 connect(
this, &UnitySortFilterProxyModelQML::rowsInserted,
this, &UnitySortFilterProxyModelQML::countChanged);
29 connect(
this, &UnitySortFilterProxyModelQML::rowsRemoved,
this, &UnitySortFilterProxyModelQML::countChanged);
35 int UnitySortFilterProxyModelQML::mapRowToSource(
int row)
37 if (sourceModel() ==
nullptr)
40 return QSortFilterProxyModel::mapToSource(index(row, 0)).row();
43 QHash<int, QByteArray> UnitySortFilterProxyModelQML::roleNames()
const
45 return sourceModel() ? sourceModel()->roleNames() : QHash<int, QByteArray>();
49 UnitySortFilterProxyModelQML::setModel(QAbstractItemModel *itemModel)
51 if (itemModel ==
nullptr) {
55 if (itemModel != sourceModel()) {
56 if (sourceModel() !=
nullptr) {
57 sourceModel()->disconnect(
this);
60 setSourceModel(itemModel);
62 connect(itemModel, &QAbstractItemModel::modelReset,
this, &UnitySortFilterProxyModelQML::totalCountChanged);
63 connect(itemModel, &QAbstractItemModel::rowsInserted,
this, &UnitySortFilterProxyModelQML::totalCountChanged);
64 connect(itemModel, &QAbstractItemModel::rowsRemoved,
this, &UnitySortFilterProxyModelQML::totalCountChanged);
66 Q_EMIT totalCountChanged();
67 Q_EMIT modelChanged();
72 UnitySortFilterProxyModelQML::get(
int row)
75 const QHash<int, QByteArray> roles = roleNames();
76 auto it = roles.begin();
77 for ( ; it != roles.end(); ++it) {
78 res[*it] = data(row, it.key());
84 UnitySortFilterProxyModelQML::data(
int row,
int role)
86 if (sourceModel() ==
nullptr) {
90 return index(row, 0).data(role);
94 UnitySortFilterProxyModelQML::totalCount()
const
96 if (sourceModel() !=
nullptr) {
97 return sourceModel()->rowCount();
104 UnitySortFilterProxyModelQML::count()
110 UnitySortFilterProxyModelQML::invertMatch()
const
112 return m_invertMatch;
116 UnitySortFilterProxyModelQML::setInvertMatch(
bool invertMatch)
118 if (invertMatch != m_invertMatch) {
119 m_invertMatch = invertMatch;
120 Q_EMIT invertMatchChanged(invertMatch);
126 UnitySortFilterProxyModelQML::filterAcceptsRow(
int sourceRow,
127 const QModelIndex &sourceParent)
const
130 if (filterRegExp().isEmpty()) {
134 bool result = QSortFilterProxyModel::filterAcceptsRow(sourceRow, sourceParent);
135 return (m_invertMatch) ? !result : result;
139 UnitySortFilterProxyModelQML::findFirst(
int role,
const QVariant& value)
const
141 QModelIndexList matches = match(index(0, 0), role, value, 1, Qt::MatchExactly);
142 if (!matches.isEmpty()) {
143 return matches.first().row();
150 UnitySortFilterProxyModelQML::mapFromSource(
int row)
152 if (sourceModel() !=
nullptr) {
153 return QSortFilterProxyModel::mapFromSource(sourceModel()->index(row, 0)).row();
160 UnitySortFilterProxyModelQML::mapToSource(
int row)
162 if (sourceModel() !=
nullptr) {
163 return QSortFilterProxyModel::mapToSource(index(row, 0)).row();