From 3e35ce4dddccd13e2b2916e362807bff30d67816 Mon Sep 17 00:00:00 2001 From: csoler Date: Sat, 22 Apr 2023 18:16:04 +0200 Subject: [PATCH] improved the logic to make the channel layout update faster --- .../gui/gxschannels/GxsChannelPostsModel.cpp | 22 +++++++------------ .../gui/gxschannels/GxsChannelPostsModel.h | 2 +- .../GxsChannelPostsWidgetWithModel.cpp | 8 +++++-- 3 files changed, 15 insertions(+), 17 deletions(-) diff --git a/retroshare-gui/src/gui/gxschannels/GxsChannelPostsModel.cpp b/retroshare-gui/src/gui/gxschannels/GxsChannelPostsModel.cpp index 197013c8b..91a2a578c 100644 --- a/retroshare-gui/src/gui/gxschannels/GxsChannelPostsModel.cpp +++ b/retroshare-gui/src/gui/gxschannels/GxsChannelPostsModel.cpp @@ -63,7 +63,7 @@ void RsGxsChannelPostsModel::setMode(TreeMode mode) if(mode == TREE_MODE_LIST) setNumColumns(2); - triggerViewUpdate(); + triggerViewUpdate(true,true); } void RsGxsChannelPostsModel::computeCommentCounts( std::vector& posts, std::vector& comments) @@ -118,12 +118,15 @@ void RsGxsChannelPostsModel::preMods() } void RsGxsChannelPostsModel::postMods() { - triggerViewUpdate(); emit layoutChanged(); } -void RsGxsChannelPostsModel::triggerViewUpdate() +void RsGxsChannelPostsModel::triggerViewUpdate(bool data_changed, bool layout_changed) { - emit dataChanged(createIndex(0,0,(void*)NULL), createIndex(rowCount()-1,mColumns-1,(void*)NULL)); + if(data_changed) + emit dataChanged(createIndex(0,0,(void*)NULL), createIndex(rowCount()-1,mColumns-1,(void*)NULL)); + + if(layout_changed) + emit layoutChanged(); } void RsGxsChannelPostsModel::getFilesList(std::list& files) @@ -316,17 +319,8 @@ bool RsGxsChannelPostsModel::setNumColumns(int n) preMods(); - beginResetModel(); - endResetModel(); - mColumns = n; - if (rowCount()>0) - { - beginInsertRows(QModelIndex(),0,rowCount()-1); - endInsertRows(); - } - postMods(); return true; @@ -548,7 +542,7 @@ void RsGxsChannelPostsModel::updateSinglePost(const RsGxsChannelPost& post,std:: uint32_t count; updateFilter(count); - triggerViewUpdate(); + triggerViewUpdate(true,false); } void RsGxsChannelPostsModel::setPosts(const RsGxsChannelGroup& group, std::vector& posts) diff --git a/retroshare-gui/src/gui/gxschannels/GxsChannelPostsModel.h b/retroshare-gui/src/gui/gxschannels/GxsChannelPostsModel.h index c12e31635..42dcbb9f7 100644 --- a/retroshare-gui/src/gui/gxschannels/GxsChannelPostsModel.h +++ b/retroshare-gui/src/gui/gxschannels/GxsChannelPostsModel.h @@ -115,7 +115,7 @@ public: void updateChannel(const RsGxsGroupId& channel_group_id); const RsGxsGroupId& currentGroupId() const; - void triggerViewUpdate(); + void triggerViewUpdate(bool data_changed,bool layout_changed); // sets the number of columns. Returns 0 if nothing changes. bool setNumColumns(int n); diff --git a/retroshare-gui/src/gui/gxschannels/GxsChannelPostsWidgetWithModel.cpp b/retroshare-gui/src/gui/gxschannels/GxsChannelPostsWidgetWithModel.cpp index 381e4b7b9..7593d4e18 100644 --- a/retroshare-gui/src/gui/gxschannels/GxsChannelPostsWidgetWithModel.cpp +++ b/retroshare-gui/src/gui/gxschannels/GxsChannelPostsWidgetWithModel.cpp @@ -540,7 +540,11 @@ void GxsChannelPostsWidgetWithModel::updateZoomFactor(int what_to_do) int n_columns = std::max(1,(int)floor(s.width() / (mChannelPostsDelegate->cellSize(0,font(),s.width())))); mChannelPostsModel->setNumColumns(n_columns); // forces the update - mChannelPostsModel->triggerViewUpdate(); + + if(what_to_do) + mChannelPostsModel->triggerViewUpdate(true,false); + else + mChannelPostsModel->triggerViewUpdate(false,true); } void GxsChannelPostsWidgetWithModel::sortColumnPostFiles(int col,Qt::SortOrder so) @@ -646,7 +650,7 @@ void GxsChannelPostsWidgetWithModel::switchView() selectItem(msg_id); ui->postsTree->setFocus(); - mChannelPostsModel->triggerViewUpdate(); // This is already called by setMode(), but the model cannot know how many + mChannelPostsModel->triggerViewUpdate(false,true); // This is already called by setMode(), but the model cannot know how many // columns is actually has until we call handlePostsTreeSizeChange(), so // we have to call it again here. }