11 #include <QIdentityProxyModel> 23 const std::function<QModelIndexList (QSet<Id>)>
FindItems_;
31 : QIdentityProxyModel { parent }
34 QIdentityProxyModel::setSourceModel (&source);
44 if (Selections_ == selections)
47 EmitByIds (std::exchange (Selections_, {}));
48 Selections_ = selections;
49 EmitByIds (Selections_);
52 QVariant
data (
const QModelIndex& index,
int role)
const override 55 return QIdentityProxyModel::data (index, role);
57 const auto id = index.data (Config_.
SourceIdRole_).template value<Id> ();
58 return Selections_.contains (
id);
61 void EmitByIds (
const QSet<Id>& ids)
63 const auto lastColumn = sourceModel ()->columnCount () - 1;
64 for (
const auto& idx : Config_.
FindItems_ (ids))
65 emit dataChanged (idx.siblingAtColumn (0), idx.siblingAtColumn (lastColumn), { Config_.
IsSelectedRole_ });
const std::function< QModelIndexList(QSet< Id >)> FindItems_
void SetSelections(const QSet< Id > &selections)
int GetIsSelectedRole() const
QVariant data(const QModelIndex &index, int role) const override
SelectionProxyModel(QAbstractItemModel &source, const Config &config, QObject *parent=nullptr)