From ea16d31aa340581f5e505e0c734a8468e5d3d47f Mon Sep 17 00:00:00 2001 From: baldurk Date: Thu, 20 May 2021 15:48:04 +0100 Subject: [PATCH] Invalidate cached hover index in tree view when model changes --- qrenderdoc/Widgets/Extended/RDTreeView.cpp | 41 ++++++++++++++++++++++ qrenderdoc/Widgets/Extended/RDTreeView.h | 6 ++++ 2 files changed, 47 insertions(+) diff --git a/qrenderdoc/Widgets/Extended/RDTreeView.cpp b/qrenderdoc/Widgets/Extended/RDTreeView.cpp index 6a7a8c19f..2ade258a2 100644 --- a/qrenderdoc/Widgets/Extended/RDTreeView.cpp +++ b/qrenderdoc/Widgets/Extended/RDTreeView.cpp @@ -446,8 +446,18 @@ void RDTreeView::setModel(QAbstractItemModel *model) QAbstractItemModel *old = this->model(); if(old) + { QObject::disconnect(old, &QAbstractItemModel::modelAboutToBeReset, this, &RDTreeView::modelAboutToBeReset); + QObject::disconnect(old, &QAbstractItemModel::rowsAboutToBeRemoved, this, + &RDTreeView::rowsAboutToBeRemoved); + QObject::disconnect(old, &QAbstractItemModel::columnsAboutToBeRemoved, this, + &RDTreeView::columnsAboutToBeRemoved); + QObject::disconnect(old, &QAbstractItemModel::rowsAboutToBeMoved, this, + &RDTreeView::rowsAboutToBeMoved); + QObject::disconnect(old, &QAbstractItemModel::columnsAboutToBeMoved, this, + &RDTreeView::columnsAboutToBeMoved); + } QTreeView::setModel(model); @@ -455,6 +465,14 @@ void RDTreeView::setModel(QAbstractItemModel *model) { QObject::connect(model, &QAbstractItemModel::modelAboutToBeReset, this, &RDTreeView::modelAboutToBeReset); + QObject::connect(model, &QAbstractItemModel::rowsAboutToBeRemoved, this, + &RDTreeView::rowsAboutToBeRemoved); + QObject::connect(model, &QAbstractItemModel::columnsAboutToBeRemoved, this, + &RDTreeView::columnsAboutToBeRemoved); + QObject::connect(model, &QAbstractItemModel::rowsAboutToBeMoved, this, + &RDTreeView::rowsAboutToBeMoved); + QObject::connect(model, &QAbstractItemModel::columnsAboutToBeMoved, this, + &RDTreeView::columnsAboutToBeMoved); } } @@ -463,6 +481,29 @@ void RDTreeView::modelAboutToBeReset() m_currentHoverIndex = QModelIndex(); } +void RDTreeView::rowsAboutToBeRemoved(const QModelIndex &parent, int first, int last) +{ + m_currentHoverIndex = QModelIndex(); +} + +void RDTreeView::columnsAboutToBeRemoved(const QModelIndex &parent, int first, int last) +{ + m_currentHoverIndex = QModelIndex(); +} + +void RDTreeView::rowsAboutToBeMoved(const QModelIndex &sourceParent, int sourceStart, int sourceEnd, + const QModelIndex &destinationParent, int destinationRow) +{ + m_currentHoverIndex = QModelIndex(); +} + +void RDTreeView::columnsAboutToBeMoved(const QModelIndex &sourceParent, int sourceStart, + int sourceEnd, const QModelIndex &destinationParent, + int destinationColumn) +{ + m_currentHoverIndex = QModelIndex(); +} + void RDTreeView::saveExpansion(RDTreeViewExpansionState &state, const ExpansionKeyGen &keygen) { state.clear(); diff --git a/qrenderdoc/Widgets/Extended/RDTreeView.h b/qrenderdoc/Widgets/Extended/RDTreeView.h index 7d7c827c2..55c5bbf0c 100644 --- a/qrenderdoc/Widgets/Extended/RDTreeView.h +++ b/qrenderdoc/Widgets/Extended/RDTreeView.h @@ -182,6 +182,12 @@ protected: private slots: void modelAboutToBeReset(); + void rowsAboutToBeRemoved(const QModelIndex &parent, int first, int last); + void columnsAboutToBeRemoved(const QModelIndex &parent, int first, int last); + void rowsAboutToBeMoved(const QModelIndex &sourceParent, int sourceStart, int sourceEnd, + const QModelIndex &destinationParent, int destinationRow); + void columnsAboutToBeMoved(const QModelIndex &sourceParent, int sourceStart, int sourceEnd, + const QModelIndex &destinationParent, int destinationColumn); private: bool m_VisibleBranches = true;