Ref T275, detect when objects have been deleted in view and using that signal in setup component

This commit is contained in:
Klaus Basan
2018-06-19 16:47:57 +02:00
parent 73ea22530c
commit 0aa5836b62
4 changed files with 38 additions and 8 deletions

View File

@@ -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<CInterpolationSetupList>())
{
const CInterpolationSetupList deletedSetups = deletedObjects.value<CInterpolationSetupList>();
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

View File

@@ -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

View File

@@ -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;
}

View File

@@ -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);