Ref T658, model list utility functions (to be exposed as Js object)

This commit is contained in:
Klaus Basan
2019-06-04 23:45:09 +02:00
committed by Mat Sutcliffe
parent ef2398f6a9
commit 6eb6cea9ad
4 changed files with 48 additions and 1 deletions

View File

@@ -261,6 +261,17 @@ namespace BlackMisc
return false;
}
template<class OBJ, class CONTAINER, typename KEYTYPE>
bool IDatastoreObjectList<OBJ, CONTAINER, KEYTYPE>::containsDbKey(KEYTYPE key) const
{
for (const OBJ &obj : ITimestampObjectList<OBJ, CONTAINER>::container())
{
if (!obj.hasValidDbKey()) { continue; }
if (obj.getDbKey() == key) { return true; }
}
return false;
}
template<class OBJ, class CONTAINER, typename KEYTYPE>
CONTAINER IDatastoreObjectList<OBJ, CONTAINER, KEYTYPE>::fromMultipleJsonFormats(const QJsonObject &jsonObject)
{

View File

@@ -84,6 +84,9 @@ namespace BlackMisc
//! Any object without key?
bool containsAnyObjectWithoutKey() const;
//! Contains object with key?
bool containsDbKey(KEYTYPE key) const;
//! From multiple JSON formats
//! \remark supports native swift C++ format, DB format, and cache format
static CONTAINER fromMultipleJsonFormats(const QJsonObject &jsonObject);

View File

@@ -347,6 +347,34 @@ namespace BlackMisc
});
}
CAircraftModelList CAircraftModelList::findClosestColorDistance(const CRgbColor &fuselage, const CRgbColor &tail) const
{
double distance = 2.0;
CAircraftModelList models;
for (const CAircraftModel &m : (*this))
{
const CLivery &l = m.getLivery();
if (!l.hasColorTail() || !l.hasColorFuselage()) { continue; }
const double d = l.getColorDistance(fuselage, tail);
if (qFuzzyCompare(d, distance))
{
models.push_back(m);
}
else if (distance > d)
{
models.clear();
models.push_back(m);
distance = d;
}
}
return models;
}
CAircraftModelList CAircraftModelList::findClosestFuselageColorDistance(const CRgbColor &color) const
{
return this->findClosestColorDistance(color, color);
}
CAircraftModelList CAircraftModelList::findColorLiveries() const
{
return this->findBy([ = ](const CAircraftModel & model)

View File

@@ -210,9 +210,14 @@ namespace BlackMisc
//! \remark kind of pseudo family, as in most cases the same combined type of a manufacturer means similar aircraft
CAircraftModelList findByCombinedAndManufacturer(const QString &combinedType, const QString &manufacturer) const;
//! Find models with color liveries
//! Find color liveries
CAircraftModelList findColorLiveries() const;
//! Find models with the closest color distance @{
CAircraftModelList findClosestColorDistance(const CRgbColor &fuselage, const CRgbColor &tail) const;
CAircraftModelList findClosestFuselageColorDistance(const CRgbColor &color) const;
//! @}
//! Find by military flag, \c false returns civilian models
CAircraftModelList findByMilitaryFlag(bool military) const;