From 6e07ead572095c2e934010c803c95e5777c228de Mon Sep 17 00:00:00 2001 From: csoler Date: Sun, 12 Jul 2020 18:02:44 +0200 Subject: [PATCH] added display of 10-posts chunks --- .../src/gui/Posted/PostedPostsModel.cpp | 41 ++++++++++++++++--- .../src/gui/Posted/PostedPostsModel.h | 38 +++++++++++++++-- 2 files changed, 70 insertions(+), 9 deletions(-) diff --git a/retroshare-gui/src/gui/Posted/PostedPostsModel.cpp b/retroshare-gui/src/gui/Posted/PostedPostsModel.cpp index b7e4226a6..dbe5239f4 100644 --- a/retroshare-gui/src/gui/Posted/PostedPostsModel.cpp +++ b/retroshare-gui/src/gui/Posted/PostedPostsModel.cpp @@ -38,6 +38,8 @@ Q_DECLARE_METATYPE(RsMsgMetaData) Q_DECLARE_METATYPE(RsPostedPost) +const uint32_t RsPostedPostsModel::DEFAULT_DISPLAYED_NB_POSTS = 10; + std::ostream& operator<<(std::ostream& o, const QModelIndex& i);// defined elsewhere RsPostedPostsModel::RsPostedPostsModel(QObject *parent) @@ -121,6 +123,8 @@ void RsPostedPostsModel::initEmptyHierarchy() mPosts.clear(); mFilteredPosts.clear(); + mDisplayedNbPosts = DEFAULT_DISPLAYED_NB_POSTS; + mDisplayedStartIndex = 0; postMods(); } @@ -167,6 +171,9 @@ void RsPostedPostsModel::setFilter(const QStringList& strings, uint32_t& count) } count = mFilteredPosts.size(); + if(mDisplayedNbPosts > count) + mDisplayedNbPosts = count; + std::cerr << "After filtering: " << count << " posts remain." << std::endl; beginInsertRows(QModelIndex(),0,rowCount()-1); @@ -184,7 +191,7 @@ int RsPostedPostsModel::rowCount(const QModelIndex& parent) const return 0; if(!parent.isValid()) - return mFilteredPosts.size() ; + return mDisplayedNbPosts; RsErr() << __PRETTY_FUNCTION__ << " rowCount cannot figure out the porper number of rows." << std::endl; return 0; @@ -413,7 +420,6 @@ void RsPostedPostsModel::clear() { preMods(); - mPosts.clear(); initEmptyHierarchy(); postMods(); @@ -458,6 +464,27 @@ void RsPostedPostsModel::setSortingStrategy(RsPostedPostsModel::SortingStrategy postMods(); } +void RsPostedPostsModel::setPostsInterval(int start,int nb_posts) +{ + if(start >= mFilteredPosts.size()) + return; + + preMods(); + + uint32_t old_nb_rows = rowCount() ; + + mDisplayedNbPosts = (uint32_t)std::min(nb_posts,(int)mFilteredPosts.size() - (start+1)); + mDisplayedStartIndex = start; + + beginRemoveRows(QModelIndex(),mDisplayedNbPosts,old_nb_rows); + endRemoveRows(); + + beginInsertRows(QModelIndex(),old_nb_rows,mDisplayedNbPosts); + endInsertRows(); + + postMods(); +} + void RsPostedPostsModel::setPosts(const RsPostedGroup& group, std::vector& posts) { preMods(); @@ -470,11 +497,13 @@ void RsPostedPostsModel::setPosts(const RsPostedGroup& group, std::vector event); - std::vector mFilteredPosts; // stores the list of displayes indices due to filtering. - std::vector mPosts ; // store the list of posts updated from rsForums. + std::vector mPosts ; + std::vector mFilteredPosts; + uint32_t mDisplayedStartIndex; + uint32_t mDisplayedNbPosts; + RsEventsHandlerId_t mEventHandlerId ; };