From 1e7bf0ef9e4a607a39da291231b4f54ad80bf2a6 Mon Sep 17 00:00:00 2001 From: Martin Rotter Date: Wed, 18 Dec 2013 14:15:34 +0100 Subject: [PATCH] Added alternative way to notify FeedsView about changes. --- src/core/feedsmodel.cpp | 21 ++++++++++++++++++++- src/core/feedsmodel.h | 2 +- src/gui/feedsview.cpp | 2 +- 3 files changed, 22 insertions(+), 3 deletions(-) diff --git a/src/core/feedsmodel.cpp b/src/core/feedsmodel.cpp index e5a7f5ee7..b389ddb0e 100644 --- a/src/core/feedsmodel.cpp +++ b/src/core/feedsmodel.cpp @@ -173,9 +173,28 @@ FeedsModelRootItem *FeedsModel::itemForIndex(const QModelIndex &index) { } } -void FeedsModel::changeLayout() { +void FeedsModel::changeLayout(QModelIndexList list) { + // TODO: Udělat analyzu pres cachegrind + // esli je lepsi tohle, nebo zakomentovana cast + // zakomentovana cast udela to ze view se dopta na všecky + // polozky + + while (!list.isEmpty()) { + QModelIndex ix = list.takeLast(); + emit dataChanged(index(ix.row(), 0, ix.parent()), + index(ix.row(), FDS_MODEL_COUNTS_INDEX, ix.parent())); + if (ix.parent().isValid()) { + list.append(ix.parent()); + } + } + + /* emit layoutAboutToBeChanged(); + // TODO: kouknout do dokumentace na signal layoutChanged, + // protoze ten signal layoutAboutToBeChanged by se měl volat PRED + // zmenou dat v modelu emit layoutChanged(); + */ } void FeedsModel::loadFromDatabase() { diff --git a/src/core/feedsmodel.h b/src/core/feedsmodel.h index e64ecd2e8..76f74adab 100644 --- a/src/core/feedsmodel.h +++ b/src/core/feedsmodel.h @@ -52,7 +52,7 @@ class FeedsModel : public QAbstractItemModel { public slots: // Signals that ALL data of this model need // to be reloaded by ALL attached views. - void changeLayout(); + void changeLayout(QModelIndexList list); protected: // Loads feed/categories from the database. diff --git a/src/gui/feedsview.cpp b/src/gui/feedsview.cpp index 19b407658..f53c380b6 100644 --- a/src/gui/feedsview.cpp +++ b/src/gui/feedsview.cpp @@ -34,7 +34,7 @@ void FeedsView::updateCountsOfSelectedFeeds() { feed->updateCounts(); } - m_sourceModel->changeLayout(); + m_sourceModel->changeLayout(mapped_rows); } void FeedsView::setupAppearance() {