From 15a2753d63deb7f48fe94033918fb05f750fb804 Mon Sep 17 00:00:00 2001 From: baldurk Date: Wed, 18 Mar 2020 12:01:37 +0000 Subject: [PATCH] Fix stale index hanging around in RDTreeView after change --- qrenderdoc/Widgets/Extended/RDTreeView.cpp | 19 ++++++++++++++++++- qrenderdoc/Widgets/Extended/RDTreeView.h | 6 +++++- 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/qrenderdoc/Widgets/Extended/RDTreeView.cpp b/qrenderdoc/Widgets/Extended/RDTreeView.cpp index b9b29fa76..7c897e3c1 100644 --- a/qrenderdoc/Widgets/Extended/RDTreeView.cpp +++ b/qrenderdoc/Widgets/Extended/RDTreeView.cpp @@ -226,7 +226,24 @@ QAbstractItemDelegate *RDTreeView::itemDelegate() const return m_userDelegate; } -void RDTreeView::rowsAboutToBeRemoved(const QModelIndex &parent, int start, int end) +void RDTreeView::setModel(QAbstractItemModel *model) +{ + QAbstractItemModel *old = this->model(); + + if(old) + QObject::disconnect(old, &QAbstractItemModel::modelAboutToBeReset, this, + &RDTreeView::modelAboutToBeReset); + + QTreeView::setModel(model); + + if(model) + { + QObject::connect(model, &QAbstractItemModel::modelAboutToBeReset, this, + &RDTreeView::modelAboutToBeReset); + } +} + +void RDTreeView::modelAboutToBeReset() { m_currentHoverIndex = QModelIndex(); } diff --git a/qrenderdoc/Widgets/Extended/RDTreeView.h b/qrenderdoc/Widgets/Extended/RDTreeView.h index c5c82ce1b..6aa2e0321 100644 --- a/qrenderdoc/Widgets/Extended/RDTreeView.h +++ b/qrenderdoc/Widgets/Extended/RDTreeView.h @@ -91,6 +91,8 @@ public: void setItemDelegate(QAbstractItemDelegate *delegate); QAbstractItemDelegate *itemDelegate() const; + void setModel(QAbstractItemModel *model) override; + // state is the storage to save the expansion state into // keygen is a function that will take the index of a row and a previous hash, and return the hash // for that row. @@ -124,7 +126,6 @@ signals: void keyPress(QKeyEvent *e); protected: - void rowsAboutToBeRemoved(const QModelIndex &parent, int start, int end) override; void mouseMoveEvent(QMouseEvent *e) override; void wheelEvent(QWheelEvent *e) override; void leaveEvent(QEvent *e) override; @@ -139,6 +140,9 @@ protected: void enableBranchRectFill(bool fill) { m_fillBranchRect = fill; } QModelIndex m_currentHoverIndex; +private slots: + void modelAboutToBeReset(); + private: bool m_VisibleBranches = true; bool m_VisibleGridLines = true;