/* SPDX-FileCopyrightText: 2010 Klarälvdalens Datakonsult AB, a KDAB Group company SPDX-FileContributor: Stephen Kelly SPDX-License-Identifier: LGPL-2.0-or-later */ #include "kviewstatemaintainerbase.h" #include #include #include class KViewStateMaintainerBasePrivate { KViewStateMaintainerBasePrivate(KViewStateMaintainerBase *qq) : q_ptr(qq) { } Q_DECLARE_PUBLIC(KViewStateMaintainerBase) KViewStateMaintainerBase *const q_ptr; void slotModelAboutToBeReset(); void slotModelReset(); QPointer m_view; QMetaObject::Connection m_viewModelAboutToBeResetConnection; QMetaObject::Connection m_viewModelResetConnection; QPointer m_selectionModel; QMetaObject::Connection m_selectionModelAboutToBeResetConnection; QMetaObject::Connection m_selectionModelResetConnection; }; void KViewStateMaintainerBasePrivate::slotModelAboutToBeReset() { Q_Q(KViewStateMaintainerBase); q->saveState(); } void KViewStateMaintainerBasePrivate::slotModelReset() { Q_Q(KViewStateMaintainerBase); q->restoreState(); } KViewStateMaintainerBase::KViewStateMaintainerBase(QObject *parent) : QObject(parent) , d_ptr(new KViewStateMaintainerBasePrivate(this)) { } KViewStateMaintainerBase::~KViewStateMaintainerBase() = default; QItemSelectionModel *KViewStateMaintainerBase::selectionModel() const { Q_D(const KViewStateMaintainerBase); if (d->m_selectionModel.isNull()) { return nullptr; } return d->m_selectionModel.data(); } void KViewStateMaintainerBase::setSelectionModel(QItemSelectionModel *selectionModel) { Q_D(KViewStateMaintainerBase); if (selectionModel == d->m_selectionModel) { return; } d->m_selectionModel = selectionModel; if (d->m_view && d->m_view->model()) { disconnect(d->m_selectionModelAboutToBeResetConnection); disconnect(d->m_selectionModelResetConnection); } d->m_viewModelAboutToBeResetConnection = connect(d->m_selectionModel->model(), &QAbstractItemModel::modelAboutToBeReset, this, [d]() { d->slotModelAboutToBeReset(); }); d->m_viewModelResetConnection = connect(d->m_selectionModel->model(), &QAbstractItemModel::modelReset, this, [d]() { d->slotModelReset(); }); } QAbstractItemView *KViewStateMaintainerBase::view() const { Q_D(const KViewStateMaintainerBase); if (d->m_view.isNull()) { return nullptr; } return d->m_view.data(); } void KViewStateMaintainerBase::setView(QAbstractItemView *view) { Q_D(KViewStateMaintainerBase); if (view == d->m_view) { return; } d->m_view = view; if (d->m_selectionModel && d->m_selectionModel->model()) { disconnect(d->m_viewModelAboutToBeResetConnection); disconnect(d->m_viewModelResetConnection); } if (d->m_view && d->m_view->model()) { d->m_selectionModelAboutToBeResetConnection = connect(d->m_view->model(), &QAbstractItemModel::modelAboutToBeReset, this, [d]() { d->slotModelAboutToBeReset(); }); d->m_selectionModelResetConnection = connect(d->m_view->model(), &QAbstractItemModel::modelReset, this, [d]() { d->slotModelReset(); }); } } #include "moc_kviewstatemaintainerbase.cpp"