diff --git a/declarativeimports/core/datamodel.cpp b/declarativeimports/core/datamodel.cpp index 7a985e6b6..9fe9b52c8 100644 --- a/declarativeimports/core/datamodel.cpp +++ b/declarativeimports/core/datamodel.cpp @@ -30,6 +30,12 @@ SortFilterModel::SortFilterModel(QObject* parent) { setObjectName("SortFilterModel"); setDynamicSortFilter(true); + connect(this, SIGNAL(rowsInserted(const QModelIndex &, int, int)), + this, SIGNAL(countChanged())); + connect(this, SIGNAL(rowsRemoved(const QModelIndex &, int, int)), + this, SIGNAL(countChanged())); + connect(this, SIGNAL(modelReset()), + this, SIGNAL(countChanged())); } SortFilterModel::~SortFilterModel() @@ -118,21 +124,18 @@ DataModel::DataModel(QObject* parent) m_dataSource(0) { setObjectName("DataModel"); + connect(this, SIGNAL(rowsInserted(const QModelIndex &, int, int)), + this, SIGNAL(countChanged())); + connect(this, SIGNAL(rowsRemoved(const QModelIndex &, int, int)), + this, SIGNAL(countChanged())); + connect(this, SIGNAL(modelReset()), + this, SIGNAL(countChanged())); } DataModel::~DataModel() { } -int DataModel::countItems() const -{ - int count = 0; - foreach (const QVector &v, m_items) { - count += v.count(); - } - return count; -} - void DataModel::dataUpdated(const QString &sourceName, const Plasma::DataEngine::Data &data) { if (!m_keyRoleFilter.isEmpty()) { diff --git a/declarativeimports/core/datamodel.h b/declarativeimports/core/datamodel.h index 42824efa7..cbec8569e 100644 --- a/declarativeimports/core/datamodel.h +++ b/declarativeimports/core/datamodel.h @@ -43,6 +43,7 @@ class SortFilterModel : public QSortFilterProxyModel Q_PROPERTY(QString filterRole READ filterRole WRITE setFilterRole) Q_PROPERTY(QString sortRole READ sortRole WRITE setSortRole) Q_PROPERTY(Qt::SortOrder sortOrder READ sortOrder WRITE setSortOrder) + Q_PROPERTY(int count READ count NOTIFY countChanged) friend class DataModel; @@ -64,6 +65,11 @@ public: void setSortOrder(const Qt::SortOrder order); + int count() const {return QSortFilterProxyModel::rowCount();} + +Q_SIGNALS: + void countChanged(); + protected: int roleNameToId(const QString &name); @@ -81,6 +87,7 @@ class DataModel : public QAbstractItemModel Q_OBJECT Q_PROPERTY(QObject *dataSource READ dataSource WRITE setDataSource) Q_PROPERTY(QString keyRoleFilter READ keyRoleFilter WRITE setKeyRoleFilter) + Q_PROPERTY(int count READ count NOTIFY countChanged) public: DataModel(QObject* parent=0); @@ -104,6 +111,8 @@ public: int rowCount(const QModelIndex &parent = QModelIndex()) const; int columnCount(const QModelIndex &parent = QModelIndex()) const; + int count() const {return countItems();} + protected: void setItems(const QString &sourceName, const QVariantList &list); inline int countItems() const; @@ -111,6 +120,7 @@ protected: Q_SIGNALS: void modelAboutToBeReset(); void modelReset(); + void countChanged(); private Q_SLOTS: void dataUpdated(const QString &sourceName, const Plasma::DataEngine::Data &data); @@ -124,5 +134,14 @@ private: QHash m_roleIds; }; +int DataModel::countItems() const +{ + int count = 0; + foreach (const QVector &v, m_items) { + count += v.count(); + } + return count; +} + } #endif