From 77d56916a0f144ab1d38cf036a42552cbf1c824c Mon Sep 17 00:00:00 2001 From: csoler Date: Mon, 14 Oct 2019 20:27:53 +0200 Subject: [PATCH 1/2] fixed display in forum flat view --- .../src/gui/gxsforums/GxsForumModel.cpp | 29 ++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/retroshare-gui/src/gui/gxsforums/GxsForumModel.cpp b/retroshare-gui/src/gui/gxsforums/GxsForumModel.cpp index c032e87ad..dd2c87e74 100644 --- a/retroshare-gui/src/gui/gxsforums/GxsForumModel.cpp +++ b/retroshare-gui/src/gui/gxsforums/GxsForumModel.cpp @@ -56,7 +56,10 @@ void RsGxsForumModel::preMods() } void RsGxsForumModel::postMods() { - emit dataChanged(createIndex(0,0,(void*)NULL), createIndex(0,COLUMN_THREAD_NB_COLUMNS-1,(void*)NULL)); + if(mTreeMode == TREE_MODE_FLAT) + emit dataChanged(createIndex(0,0,(void*)NULL), createIndex(mPosts.size(),COLUMN_THREAD_NB_COLUMNS-1,(void*)NULL)); + else + emit dataChanged(createIndex(0,0,(void*)NULL), createIndex(mPosts[0].mChildren.size(),COLUMN_THREAD_NB_COLUMNS-1,(void*)NULL)); } void RsGxsForumModel::setTreeMode(TreeMode mode) @@ -65,7 +68,21 @@ void RsGxsForumModel::setTreeMode(TreeMode mode) return; preMods(); + + if(mode == TREE_MODE_TREE) // means we were in FLAT mode, so the last rows are removed. + { + beginRemoveRows(QModelIndex(),mPosts[0].mChildren.size(),mPosts.size()-1); + endRemoveRows(); + } + mTreeMode = mode; + + if(mode == TREE_MODE_FLAT) // means we were in tree mode, so the last rows are added. + { + beginInsertRows(QModelIndex(),mPosts[0].mChildren.size(),mPosts.size()-1); + endInsertRows(); + } + postMods(); } @@ -296,11 +313,21 @@ int RsGxsForumModel::getChildrenCount(void *ref) const if(mTreeMode == TREE_MODE_FLAT) if(entry == 0) + { +#ifdef DEBUG_FORUMMODEL + std::cerr << "Children count (flat mode): " << mPosts.size()-1 << std::endl; +#endif return ((int)mPosts.size())-1; + } else return 0; else + { +#ifdef DEBUG_FORUMMODEL + std::cerr << "Children count (tree mode): " << mPosts[entry].mChildren.size() << std::endl; +#endif return mPosts[entry].mChildren.size(); + } } QVariant RsGxsForumModel::headerData(int section, Qt::Orientation /*orientation*/, int role) const From af0161054f4b2193d54108d5d9989d3100010ea7 Mon Sep 17 00:00:00 2001 From: csoler Date: Mon, 14 Oct 2019 22:24:36 +0200 Subject: [PATCH 2/2] fixed shifting bug in forums when setting a post as read, caused by wrong calculation of parent index --- .../src/gui/gxsforums/GxsForumModel.cpp | 41 +++++++++++++++---- .../gui/gxsforums/GxsForumThreadWidget.cpp | 14 ------- 2 files changed, 32 insertions(+), 23 deletions(-) diff --git a/retroshare-gui/src/gui/gxsforums/GxsForumModel.cpp b/retroshare-gui/src/gui/gxsforums/GxsForumModel.cpp index dd2c87e74..851f6fd16 100644 --- a/retroshare-gui/src/gui/gxsforums/GxsForumModel.cpp +++ b/retroshare-gui/src/gui/gxsforums/GxsForumModel.cpp @@ -281,12 +281,22 @@ void *RsGxsForumModel::getParentRef(void *ref,int& row) const { ForumModelIndex ref_entry; - if(mTreeMode == TREE_MODE_FLAT) - return NULL; - if(!convertRefPointerToTabEntry(ref,ref_entry) || ref_entry >= mPosts.size()) return NULL ; + if(mTreeMode == TREE_MODE_FLAT) + { + if(ref_entry == 0) + { + RsErr() << "getParentRef() shouldn't be asked for the parent of NULL" << std::endl; + row = 0; + } + else + row = ref_entry-1; + + return NULL; + } + ForumModelIndex parent_entry = mPosts[ref_entry].mParent; if(parent_entry == 0) // top level index @@ -726,7 +736,11 @@ void RsGxsForumModel::setPosts(const RsGxsForumGroup& group, const std::vectorsecond.size();++i) if(it->second[i].second == mid) + { postId = it->first; + break; + } - for(uint32_t i=0;i