11#include <QIdentityProxyModel>
25 Qt::ItemFlags
flags (
const QModelIndex& index)
const override;
26 QVariant
data (
const QModelIndex& index,
int role)
const override;
27 bool setData (
const QModelIndex& index,
const QVariant& value,
int role)
override;
32 virtual bool IsChecked (
const QVariant& idVar)
const = 0;
33 virtual void SetChecked (
const QVariant& idVar,
bool checked) = 0;
38 template<
typename IdType>
41 QSet<IdType> Unchecked_;
52 const auto rc = sourceModel ()->rowCount ();
55 result.reserve (rc - Unchecked_.size ());
57 for (
int i = 0; i < rc; ++i)
59 const auto rowId = sourceModel ()->index (i, 0).data (
IdRole_).template value<IdType> ();
60 if (!Unchecked_.contains (rowId))
67 bool IsChecked (
const QVariant& idVar)
const override
69 return !Unchecked_.contains (idVar.value<IdType> ());
72 void SetChecked (
const QVariant& idVar,
bool checked)
override
74 const auto id = idVar.value<IdType> ();
76 Unchecked_.remove (
id);
virtual void SetChecked(const QVariant &idVar, bool checked)=0
virtual bool IsChecked(const QVariant &idVar) const =0
QVariant data(const QModelIndex &index, int role) const override
Qt::ItemFlags flags(const QModelIndex &index) const override
bool setData(const QModelIndex &index, const QVariant &value, int role) override
CheckableProxyModelBase(int idRole, QObject *parent=nullptr)
QSet< IdType > GetUnchecked() const
QSet< IdType > GetChecked() const
void SetChecked(const QVariant &idVar, bool checked) override
bool IsChecked(const QVariant &idVar) const override
CheckableProxyModelBase(int idRole, QObject *parent=nullptr)