refs #369, adjusted mapping component to use new functions

(e.g. with originator signature)
This commit is contained in:
Klaus Basan
2015-02-06 00:28:37 +01:00
parent 8c3547c33d
commit f6e5b8b3b1
2 changed files with 79 additions and 38 deletions

View File

@@ -67,7 +67,7 @@ namespace BlackGui
this->m_currentMappingsViewDelegate = new CCheckBoxDelegate(":/diagona/icons/diagona/icons/tick.png", ":/diagona/icons/diagona/icons/cross.png", this); this->m_currentMappingsViewDelegate = new CCheckBoxDelegate(":/diagona/icons/diagona/icons/tick.png", ":/diagona/icons/diagona/icons/cross.png", this);
this->ui->tvp_CurrentMappings->setItemDelegateForColumn(0, this->m_currentMappingsViewDelegate); this->ui->tvp_CurrentMappings->setItemDelegateForColumn(0, this->m_currentMappingsViewDelegate);
//! Aircraft previes //! Aircraft previews
connect(this->ui->cb_AircraftIconDisplayed, &QCheckBox::stateChanged, this, &CMappingComponent::ps_onModelPreviewChanged); connect(this->ui->cb_AircraftIconDisplayed, &QCheckBox::stateChanged, this, &CMappingComponent::ps_onModelPreviewChanged);
this->ui->lbl_AircraftIconDisplayed->setText("Icon displayed here"); this->ui->lbl_AircraftIconDisplayed->setText("Icon displayed here");
} }
@@ -98,15 +98,16 @@ namespace BlackGui
Q_ASSERT(getIContextSimulator()); Q_ASSERT(getIContextSimulator());
Q_ASSERT(getIContextNetwork()); Q_ASSERT(getIContextNetwork());
connect(getIContextSimulator(), &IContextSimulator::installedAircraftModelsChanged, this, &CMappingComponent::ps_onAircraftModelsLoaded); connect(getIContextSimulator(), &IContextSimulator::installedAircraftModelsChanged, this, &CMappingComponent::ps_onAircraftModelsLoaded);
connect(getIContextSimulator(), &IContextSimulator::modelMatchingCompleted, this, &CMappingComponent::ps_modelMatched); connect(getIContextSimulator(), &IContextSimulator::modelMatchingCompleted, this, &CMappingComponent::ps_onModelMatchingCompleted);
connect(getIContextSimulator(), &IContextSimulator::remoteAircraftChanged, this, &CMappingComponent::ps_modelMatched); connect(getIContextNetwork(), &IContextNetwork::changedRenderedAircraftModel, this, &CMappingComponent::ps_onRenderedAircraftModelChanged);
connect(getIContextNetwork(), &IContextNetwork::changedAircraftEnabled, this, &CMappingComponent::ps_onChangedAircraftEnabled);
connect(getIContextNetwork(), &IContextNetwork::connectionStatusChanged, this, &CMappingComponent::ps_onConnectionStatusChanged); connect(getIContextNetwork(), &IContextNetwork::connectionStatusChanged, this, &CMappingComponent::ps_onConnectionStatusChanged);
// requires simulator context // requires simulator context
connect(this->ui->tvp_CurrentMappings, &CAircraftModelView::objectChanged, this, &CMappingComponent::ps_onChangedSimulatedAircraft); connect(this->ui->tvp_CurrentMappings, &CAircraftModelView::objectChanged, this, &CMappingComponent::ps_onChangedSimulatedAircraftInView);
// data // data
this->ui->hs_MaxAircraft->setValue(getIContextSimulator()->getMaxRenderedRemoteAircraft()); this->ui->hs_MaxAircraft->setValue(getIContextSimulator()->getMaxRenderedAircraft());
// with external core models might be already available // with external core models might be already available
this->ps_onAircraftModelsLoaded(); this->ps_onAircraftModelsLoaded();
@@ -117,14 +118,9 @@ namespace BlackGui
this->ps_onModelsUpdateRequested(); this->ps_onModelsUpdateRequested();
} }
void CMappingComponent::ps_modelMatched(const BlackMisc::Simulation::CSimulatedAircraft &aircraft) void CMappingComponent::ps_onModelMatchingCompleted(const BlackMisc::Simulation::CSimulatedAircraft &aircraft)
{ {
Q_UNUSED(aircraft); Q_UNUSED(aircraft);
ps_onMappingsChanged();
}
void CMappingComponent::ps_onMappingsChanged()
{
this->ps_onMappingsUpdateRequested(); this->ps_onMappingsUpdateRequested();
} }
@@ -143,12 +139,22 @@ namespace BlackGui
this->ui->tw_ListViews->tabBar()->setTabText(cm, c); this->ui->tw_ListViews->tabBar()->setTabText(cm, c);
} }
void CMappingComponent::ps_onChangedSimulatedAircraft(const BlackMisc::CVariant &object, const BlackMisc::CPropertyIndex &index) void CMappingComponent::ps_onChangedSimulatedAircraftInView(const BlackMisc::CVariant &object, const BlackMisc::CPropertyIndex &index)
{ {
Q_UNUSED(index); const CSimulatedAircraft sa = object.to<CSimulatedAircraft>(); // changed in GUI
const CSimulatedAircraft sa = object.to<CSimulatedAircraft>(); const CSimulatedAircraft saFromBackend = this->getIContextNetwork()->getAircraftForCallsign(sa.getCallsign());
CPropertyIndexVariantMap vm(index, sa.propertyByIndex(index)); if (!saFromBackend.hasValidCallsign()) { return; } // obviously deleted
this->getIContextSimulator()->changeRemoteAircraft(sa, vm); if (index.contains(CSimulatedAircraft::IndexEnabled))
{
bool enabled = sa.propertyByIndex(index).toBool();
if (saFromBackend.isEnabled() == enabled) { return; }
CLogMessage(this).info("Request to %1 aircraft %2") << (enabled ? "enable" : "disable") << saFromBackend.getCallsign().toQString();
this->getIContextNetwork()->updateAircraftEnabled(saFromBackend.getCallsign(), enabled, mappingtOriginator());
}
else
{
Q_ASSERT_X(false, "ps_onChangedSimulatedAircraftInView", "Index not supported");
}
} }
void CMappingComponent::ps_onAircraftSelectedInView(const QModelIndex &index) void CMappingComponent::ps_onAircraftSelectedInView(const QModelIndex &index)
@@ -195,10 +201,10 @@ namespace BlackGui
{ {
Q_ASSERT(getIContextSimulator()); Q_ASSERT(getIContextSimulator());
int noRequested = this->ui->hs_MaxAircraft->value(); int noRequested = this->ui->hs_MaxAircraft->value();
this->getIContextSimulator()->setMaxRenderedRemoteAircraft(noRequested); this->getIContextSimulator()->setMaxRenderedAircraft(noRequested);
// real value // real value
int noRendered = this->getIContextSimulator()->getMaxRenderedRemoteAircraft(); int noRendered = this->getIContextSimulator()->getMaxRenderedAircraft();
if (noRequested == noRendered) if (noRequested == noRendered)
{ {
CLogMessage(this).info("Max.rendered aircraft: %1") << noRendered; CLogMessage(this).info("Max.rendered aircraft: %1") << noRendered;
@@ -242,29 +248,39 @@ namespace BlackGui
return; return;
} }
CSimulatedAircraft aircraftFromBackend = this->getIContextNetwork()->getAircraftForCallsign(callsign);
bool enabled = this->ui->cb_AircraftEnabled->isChecked(); bool enabled = this->ui->cb_AircraftEnabled->isChecked();
CSimulatedAircraft aircraft = this->ui->tvp_CurrentMappings->getContainer().findFirstByCallsign(callsign); bool changed = false;
CAircraftModel model = this->ui->tvp_AircraftModels->getContainer().findFirstByModelString(modelString); if (aircraftFromBackend.getModelString() != modelString)
Q_ASSERT(model.hasModelString());
CPropertyIndexVariantMap changedValues;
if (aircraft.getModel().getModelString() != model.getModelString())
{ {
model.updateMissingParts(aircraft.getModel()); CAircraftModelList models = this->getIContextSimulator()->getInstalledModelsStartingWith(modelString);
if (models.isEmpty())
{
CLogMessage(this).validationError("No model for title: %1") << modelString;
return;
}
else if (models.size() > 1)
{
CLogMessage(this).validationError("Ambigious title: %1") << modelString;
return;
}
CAircraftModel model(models.front());
model.setModelType(CAircraftModel::TypeManuallySet); model.setModelType(CAircraftModel::TypeManuallySet);
changedValues.addValue(CSimulatedAircraft::IndexModel, model.toCVariant()); CLogMessage(this).info("Requesting changes for %1") << callsign.asString();
this->getIContextNetwork()->updateAircraftModel(aircraftFromBackend.getCallsign(), model, mappingtOriginator());
changed = true;
} }
if (aircraft.isEnabled() != enabled) if (aircraftFromBackend.isEnabled() != enabled)
{ {
changedValues.addValue(CSimulatedAircraft::IndexEnabled, CVariant::fromValue(enabled)); this->getIContextNetwork()->updateAircraftEnabled(aircraftFromBackend.getCallsign(), enabled, mappingtOriginator());
changed = true;
} }
if (changedValues.isEmpty())
if (!changed)
{ {
CLogMessage(this).info("Model mapping, nothing to change"); CLogMessage(this).info("Model mapping, nothing to change");
return; return;
} }
getIContextSimulator()->changeRemoteAircraft(aircraft, changedValues);
CLogMessage(this).info("Requesting model change for %1") << callsign.asString();
} }
void CMappingComponent::ps_onModelPreviewChanged(int state) void CMappingComponent::ps_onModelPreviewChanged(int state)
@@ -280,7 +296,7 @@ namespace BlackGui
void CMappingComponent::ps_onMappingsUpdateRequested() void CMappingComponent::ps_onMappingsUpdateRequested()
{ {
Q_ASSERT(getIContextSimulator()); Q_ASSERT(getIContextSimulator());
const CSimulatedAircraftList aircraft = getIContextSimulator()->getRemoteAircraft(); const CSimulatedAircraftList aircraft = getIContextNetwork()->getAircraftInRange();
this->ui->tvp_CurrentMappings->updateContainer(aircraft); this->ui->tvp_CurrentMappings->updateContainer(aircraft);
} }
@@ -299,6 +315,20 @@ namespace BlackGui
this->ui->le_AircraftModel->setCompleter(this->m_modelCompleter); this->ui->le_AircraftModel->setCompleter(this->m_modelCompleter);
} }
void CMappingComponent::ps_onRenderedAircraftModelChanged(const CSimulatedAircraft &aircraft, const QString &originator)
{
if (originator == mappingtOriginator()) { return; }
this->ps_onMappingsUpdateRequested();
Q_UNUSED(aircraft);
}
void CMappingComponent::ps_onChangedAircraftEnabled(const CSimulatedAircraft &aircraft, const QString &originator)
{
if (originator == mappingtOriginator()) { return; }
this->ps_onMappingsUpdateRequested();
Q_UNUSED(aircraft);
}
void CMappingComponent::ps_onConnectionStatusChanged(uint from, uint to) void CMappingComponent::ps_onConnectionStatusChanged(uint from, uint to)
{ {
INetwork::ConnectionStatus fromStatus = static_cast<INetwork::ConnectionStatus>(from); INetwork::ConnectionStatus fromStatus = static_cast<INetwork::ConnectionStatus>(from);
@@ -310,5 +340,13 @@ namespace BlackGui
} }
} }
const QString &CMappingComponent::mappingtOriginator()
{
// string is generated once, the timestamp allows to use multiple
// components (as long as they are not generated at the same ms)
static const QString o = QString("MAPPINGCOMPONENT:").append(QString::number(QDateTime::currentMSecsSinceEpoch()));
return o;
}
} // namespace } // namespace
} // namespace } // namespace

View File

@@ -59,18 +59,15 @@ namespace BlackGui
//! Aircraft models available //! Aircraft models available
void ps_onAircraftModelsLoaded(); void ps_onAircraftModelsLoaded();
//! Mappings changed
void ps_onMappingsChanged();
//! Model matched //! Model matched
void ps_modelMatched(const BlackMisc::Simulation::CSimulatedAircraft &aircraft); void ps_onModelMatchingCompleted(const BlackMisc::Simulation::CSimulatedAircraft &aircraft);
//! Changed count //! Changed count
void ps_onRowCountChanged(int count, bool withFilter); void ps_onRowCountChanged(int count, bool withFilter);
//! Simulated aircraft did change in model //! Simulated aircraft did change in model
//! \sa CViewBaseNonTemplate::objectChanged //! \sa CViewBaseNonTemplate::objectChanged
void ps_onChangedSimulatedAircraft(const BlackMisc::CVariant &simulatedAircraft, const BlackMisc::CPropertyIndex &index); void ps_onChangedSimulatedAircraftInView(const BlackMisc::CVariant &simulatedAircraft, const BlackMisc::CPropertyIndex &index);
//! Aircraft selected (in view) //! Aircraft selected (in view)
void ps_onAircraftSelectedInView(const QModelIndex &index); void ps_onAircraftSelectedInView(const QModelIndex &index);
@@ -93,14 +90,20 @@ namespace BlackGui
//! Request update for models from backend //! Request update for models from backend
void ps_onModelsUpdateRequested(); void ps_onModelsUpdateRequested();
//! Rendered aircraft changed
void ps_onRenderedAircraftModelChanged(const BlackMisc::Simulation::CSimulatedAircraft &aircraft, const QString &originator);
//! aircraft enabled, disabled
void ps_onChangedAircraftEnabled(const BlackMisc::Simulation::CSimulatedAircraft &aircraft, const QString &originator);
//! Connection status has been changed //! Connection status has been changed
void ps_onConnectionStatusChanged(uint from, uint to); void ps_onConnectionStatusChanged(uint from, uint to);
private: private:
const QString &mappingtOriginator();
QScopedPointer<Ui::CMappingComponent> ui; QScopedPointer<Ui::CMappingComponent> ui;
QCompleter *m_modelCompleter = nullptr; QCompleter *m_modelCompleter = nullptr;
BlackGui::Views::CCheckBoxDelegate *m_currentMappingsViewDelegate = nullptr; BlackGui::Views::CCheckBoxDelegate *m_currentMappingsViewDelegate = nullptr;
}; };
} // namespace } // namespace