diff --git a/src/blackgui/components/interpolationsetupcomponent.cpp b/src/blackgui/components/interpolationsetupcomponent.cpp index ba1534fad..7a613619f 100644 --- a/src/blackgui/components/interpolationsetupcomponent.cpp +++ b/src/blackgui/components/interpolationsetupcomponent.cpp @@ -39,6 +39,8 @@ namespace BlackGui connect(ui->pb_Reload, &QPushButton::clicked, this, &CInterpolationSetupComponent::reloadSetup); connect(ui->tvp_InterpolationSetup, &CInterpolationSetupView::doubleClicked, this, &CInterpolationSetupComponent::onRowDoubleClicked); connect(ui->tvp_InterpolationSetup, &CInterpolationSetupView::modelChanged, this, &CInterpolationSetupComponent::onModelChanged); + connect(ui->tvp_InterpolationSetup, &CInterpolationSetupView::modelDataChanged, this, &CInterpolationSetupComponent::onModelChanged); + connect(ui->tvp_InterpolationSetup, &CInterpolationSetupView::objectsDeleted, this, &CInterpolationSetupComponent::onObjectsDeleted); connect(ui->rb_Callsign, &QRadioButton::released, this, &CInterpolationSetupComponent::onModeChanged); connect(ui->rb_Global, &QRadioButton::released, this, &CInterpolationSetupComponent::onModeChanged); if (sGui && sGui->getIContextSimulator()) @@ -228,5 +230,21 @@ namespace BlackGui { this->displaySetupsPerCallsign(); } + + void CInterpolationSetupComponent::onObjectsDeleted(const CVariant &deletedObjects) + { + if (deletedObjects.canConvert()) + { + const CInterpolationSetupList deletedSetups = deletedObjects.value(); + if (deletedSetups.isEmpty()) { return; } + + // make sure the setups are really deleted + // it can be they are already in the container, but there is no guarantee + CInterpolationSetupList setups = ui->tvp_InterpolationSetup->container(); + setups.removeByCallsigns(deletedSetups.getCallsigns()); + const bool set = this->setSetupsToContext(setups); + Q_UNUSED(set); + } + } } // ns } // ns diff --git a/src/blackgui/components/interpolationsetupcomponent.h b/src/blackgui/components/interpolationsetupcomponent.h index 97afb3f93..c22bc3ce4 100644 --- a/src/blackgui/components/interpolationsetupcomponent.h +++ b/src/blackgui/components/interpolationsetupcomponent.h @@ -85,6 +85,9 @@ namespace BlackGui //! Setup chaged void onSetupChanged(); + //! Objects have been deleted + void onObjectsDeleted(const BlackMisc::CVariant &deletedObjects); + BlackMisc::Simulation::CInterpolationSetupList m_lastSetSetups; //!< last setups set to context }; } // ns diff --git a/src/blackgui/views/viewbase.cpp b/src/blackgui/views/viewbase.cpp index 5d15ac081..36c809b11 100644 --- a/src/blackgui/views/viewbase.cpp +++ b/src/blackgui/views/viewbase.cpp @@ -1164,21 +1164,27 @@ namespace BlackGui if (this->isEmpty()) { return 0; } const int currentRows = this->rowCount(); + const ContainerType selected(selectedObjects()); + const CVariant deletedObjsVariant = CVariant::from(selected); + int delta = 0; + if (!this->hasFilter() && currentRows == this->selectedRowCount()) { // shortcut if all are selected this->clear(); // clear all - return currentRows; + delta = currentRows; } - - const ContainerType selected(selectedObjects()); - ContainerType unselectedObjects(container()); - for (const ObjectType &obj : selected) + else { - unselectedObjects.remove(obj); + ContainerType unselectedObjects(container()); + for (const ObjectType &obj : selected) + { + unselectedObjects.remove(obj); + } + this->updateContainerMaybeAsync(unselectedObjects); + delta = currentRows - unselectedObjects.size(); } - const int delta = currentRows - unselectedObjects.size(); - this->updateContainerMaybeAsync(unselectedObjects); + emit this->objectsDeleted(deletedObjsVariant); return delta; } diff --git a/src/blackgui/views/viewbase.h b/src/blackgui/views/viewbase.h index 0bd5984a5..cb818e8af 100644 --- a/src/blackgui/views/viewbase.h +++ b/src/blackgui/views/viewbase.h @@ -321,6 +321,9 @@ namespace BlackGui //! Object has been double clicked void objectSelected(const BlackMisc::CVariant &object); + //! Objects deleted from model + void objectsDeleted(const BlackMisc::CVariant &objectContainer); + //! JSON data load from disk completed, the BlackMisc::CStatusMessage represents the success void jsonLoadCompleted(const BlackMisc::CStatusMessage &msg);