From 9436bce9befdac8ddbe63bdd925451a5f6b8d59f Mon Sep 17 00:00:00 2001 From: Klaus Basan Date: Thu, 11 Apr 2019 19:27:37 +0200 Subject: [PATCH] Minor mapping tool improvements, including scrollTo first highlighted row --- .../components/dbownmodelsetcomponent.cpp | 6 ++--- src/blackgui/views/aircraftmodelview.cpp | 4 +++ src/blackgui/views/viewbase.cpp | 26 +++++++++++++++++++ src/blackgui/views/viewbase.h | 6 +++++ 4 files changed, 39 insertions(+), 3 deletions(-) diff --git a/src/blackgui/components/dbownmodelsetcomponent.cpp b/src/blackgui/components/dbownmodelsetcomponent.cpp index a4bb52531..d95efa882 100644 --- a/src/blackgui/components/dbownmodelsetcomponent.cpp +++ b/src/blackgui/components/dbownmodelsetcomponent.cpp @@ -551,15 +551,15 @@ namespace BlackGui } QAction *a = new QAction(CIcons::appDistributors16(), "Apply distributor preferences", this); - connect(a, &QAction::triggered, ownModelSetComp, &CDbOwnModelSetComponent::distributorPreferencesChanged); + connect(a, &QAction::triggered, ownModelSetComp, &CDbOwnModelSetComponent::distributorPreferencesChanged, Qt::QueuedConnection); m_setActions.append(a); a = new QAction(CIcons::delete16(), "Reduce models (remove duplicates)", this); - connect(a, &QAction::triggered, ownModelSetComp, &CDbOwnModelSetComponent::reduceModels); + connect(a, &QAction::triggered, ownModelSetComp, &CDbOwnModelSetComponent::reduceModels, Qt::QueuedConnection); m_setActions.append(a); a = new QAction(CIcons::delete16(), "Remove excluded models", this); - connect(a, &QAction::triggered, ownModelSetComp, &CDbOwnModelSetComponent::removeExcludedModels); + connect(a, &QAction::triggered, ownModelSetComp, &CDbOwnModelSetComponent::removeExcludedModels, Qt::QueuedConnection); m_setActions.append(a); } menuActions.addMenuModelSet(); diff --git a/src/blackgui/views/aircraftmodelview.cpp b/src/blackgui/views/aircraftmodelview.cpp index 1297e72d5..97d2b54db 100644 --- a/src/blackgui/views/aircraftmodelview.cpp +++ b/src/blackgui/views/aircraftmodelview.cpp @@ -182,6 +182,10 @@ namespace BlackGui this->setHighlight(true); this->setHighlightColor(Qt::red); this->setHighlightModels(invaliddModels); + + const int r = this->rowOf(invaliddModels.front()); + const QModelIndex i = m_model->index(r, 0); + this->scrollTo(i); } } diff --git a/src/blackgui/views/viewbase.cpp b/src/blackgui/views/viewbase.cpp index fef285f1b..145c9f3d5 100644 --- a/src/blackgui/views/viewbase.cpp +++ b/src/blackgui/views/viewbase.cpp @@ -218,6 +218,32 @@ namespace BlackGui return m_model->container(); } + template + QList CViewBase::rowsOf(const ContainerType &container) const + { + QList rows; + for (const ObjectType &o : container) + { + const int i = this->rowOf(o); + if (i >= 0) { rows.push_back(i); } + } + return rows; + } + + template + int CViewBase::rowOf(const ObjectType &obj) const + { + //! \fixme KB 4-19 any smarter solution? + const ContainerType objects = m_model->containerOrFilteredContainer(); + int i = 0; + for (const ObjectType &o : objects) + { + if (o == obj) { return i; } + ++i; + } + return -1; + } + template const typename CViewBase::ContainerType &CViewBase::containerOrFilteredContainer(bool *filtered) const { diff --git a/src/blackgui/views/viewbase.h b/src/blackgui/views/viewbase.h index ca5a83118..edb60e800 100644 --- a/src/blackgui/views/viewbase.h +++ b/src/blackgui/views/viewbase.h @@ -660,6 +660,12 @@ namespace BlackGui //! Access to container const ContainerType &container() const; + //! The rows of the given objects + QList rowsOf(const ContainerType &container) const; + + //! The row of the given object + int rowOf(const ObjectType &obj) const; + //! \copydoc BlackGui::Models::CListModelBase::containerOrFilteredContainer const ContainerType &containerOrFilteredContainer(bool *filtered = nullptr) const;