refs #364, refs #368 improved handling of manually set models

* make sure manually set model is not subject of model matching
* added convenience member functions to detect manually set models
This commit is contained in:
Klaus Basan
2015-01-25 03:54:47 +01:00
parent 2e06f054e8
commit 3a4e5ef556
8 changed files with 44 additions and 13 deletions

View File

@@ -143,7 +143,7 @@ namespace BlackCore
if (c > 0)
{
// really changed something
emit this->remoteAircraftChanged(changedAircraft);
emit this->remoteAircraftChanged(this->getRemoteAircraft().findFirstByCallsign(changedAircraft.getCallsign()));
}
return c;
}

View File

@@ -87,7 +87,7 @@ namespace BlackCore
virtual int removeRemoteAircraft(const BlackMisc::Aviation::CCallsign &callsign) = 0;
//! Change remote aircraft per property
virtual int changeRemoteAircraft(const BlackMisc::Simulation::CSimulatedAircraft &changedAircraft, const BlackMisc::CPropertyIndexVariantMap &changeValues) = 0;
virtual int changeRemoteAircraft(const BlackMisc::Simulation::CSimulatedAircraft &toChangeAircraft, const BlackMisc::CPropertyIndexVariantMap &changeValues) = 0;
//! Update own aircraft cockpit (usually from context)
virtual bool updateOwnSimulatorCockpit(const BlackMisc::Aviation::CAircraft &aircraft) = 0;

View File

@@ -104,6 +104,16 @@ namespace BlackMisc
this->m_icao.updateMissingParts(model.getIcao());
}
bool CAircraftModel::hasQueriedModelString() const
{
return this->m_modelType == TypeQueriedFromNetwork && this->hasModelString();
}
bool CAircraftModel::hasManuallySetString() const
{
return this->m_modelType == TypeManuallySet && this->hasModelString();
}
bool CAircraftModel::matchesModelString(const QString &modelString, Qt::CaseSensitivity sensitivity) const
{
if (sensitivity == Qt::CaseSensitive)

View File

@@ -120,7 +120,10 @@ namespace BlackMisc
void updateMissingParts(const CAircraftModel &model);
//! Queried model string?
bool hasQueriedModelString() const { return this->m_modelType == TypeQueriedFromNetwork && this->hasModelString(); }
bool hasQueriedModelString() const;
//! Model string which was manually set
bool hasManuallySetString() const;
//! Non empty model string
bool hasModelString() const { return !m_modelString.isEmpty(); }

View File

@@ -79,10 +79,10 @@ namespace BlackMisc
return this->contains(&CSimulatedAircraft::getCallsign, callsign);
}
int CSimulatedAircraftList::incrementalUpdateOrAdd(const CSimulatedAircraft &changedAircraft, const CPropertyIndexVariantMap &changedValues)
int CSimulatedAircraftList::incrementalUpdateOrAdd(const CSimulatedAircraft &toChangeAircraft, const CPropertyIndexVariantMap &changedValues)
{
int c;
const CCallsign cs = changedAircraft.getCallsign();
const CCallsign cs = toChangeAircraft.getCallsign();
if (this->containsCallsign(cs))
{
if (changedValues.isEmpty()) { return 0; }
@@ -91,7 +91,16 @@ namespace BlackMisc
else
{
c = 1;
this->push_back(changedAircraft);
if (changedValues.isEmpty())
{
this->push_back(toChangeAircraft);
}
else
{
CSimulatedAircraft addAircraft(toChangeAircraft);
addAircraft.apply(changedValues);
this->push_back(addAircraft);
}
}
return c;
}

View File

@@ -48,7 +48,7 @@ namespace BlackMisc
bool containsCallsign(const BlackMisc::Aviation::CCallsign &callsign) const;
//! Incremental update or add aircraft
int incrementalUpdateOrAdd(const BlackMisc::Simulation::CSimulatedAircraft &changedAircraft, const BlackMisc::CPropertyIndexVariantMap &changedValues);
int incrementalUpdateOrAdd(const BlackMisc::Simulation::CSimulatedAircraft &toChangeAircraft, const BlackMisc::CPropertyIndexVariantMap &changedValues);
//! All pilots (with valid data)
BlackMisc::Network::CUserList getPilots() const;

View File

@@ -202,15 +202,15 @@ namespace BlackSimPlugin
return m_remoteAircraft.removeIf(&CSimulatedAircraft::getCallsign, callsign);
}
int CSimulatorFsx::changeRemoteAircraft(const CSimulatedAircraft &changedAircraft, const CPropertyIndexVariantMap &changedValues)
int CSimulatorFsx::changeRemoteAircraft(const CSimulatedAircraft &toChangeAircraft, const CPropertyIndexVariantMap &changedValues)
{
// EXPERIMENTAL VERSION
const CCallsign callsign = changedAircraft.getCallsign();
int c = m_remoteAircraft.incrementalUpdateOrAdd(changedAircraft, changedValues);
const CCallsign callsign = toChangeAircraft.getCallsign();
int c = m_remoteAircraft.incrementalUpdateOrAdd(toChangeAircraft, changedValues);
if (c == 0) { return 0; } // nothing was changed
const CSimulatedAircraft aircraftAfterChanges = m_remoteAircraft.findFirstByCallsign(callsign);
const QString modelBefore = changedAircraft.getModel().getModelString();
const QString modelBefore = toChangeAircraft.getModel().getModelString();
const QString modelAfter = aircraftAfterChanges.getModel().getModelString();
if (modelBefore != modelAfter)
{
@@ -218,7 +218,7 @@ namespace BlackSimPlugin
removeRemoteAircraft(m_simConnectObjects.value(callsign));
}
if (changedAircraft.isEnabled() && !m_simConnectObjects.contains(callsign))
if (toChangeAircraft.isEnabled() && !m_simConnectObjects.contains(callsign))
{
addRemoteAircraft(aircraftAfterChanges);
}
@@ -760,6 +760,15 @@ namespace BlackSimPlugin
CAircraftModel CSimulatorFsx::modelMatching(const CSimulatedAircraft &remoteAircraft)
{
// Manually set string?
if (remoteAircraft.getModel().hasManuallySetString())
{
// manual set model
return remoteAircraft.getModel();
}
// default model
CAircraftModel aircraftModel(remoteAircraft); // set defaults
// mapper ready?

View File

@@ -117,7 +117,7 @@ namespace BlackSimPlugin
virtual int removeRemoteAircraft(const BlackMisc::Aviation::CCallsign &callsign) override;
//! \copydoc ISimulator::changeRemoteAircraft
virtual int changeRemoteAircraft(const BlackMisc::Simulation::CSimulatedAircraft &changedAircraft, const BlackMisc::CPropertyIndexVariantMap &changeValues) override;
virtual int changeRemoteAircraft(const BlackMisc::Simulation::CSimulatedAircraft &toChangeAircraft, const BlackMisc::CPropertyIndexVariantMap &changeValues) override;
//! \copydoc ISimulator::getSimulatorInfo()
virtual BlackSim::CSimulatorInfo getSimulatorInfo() const override;