Ref T472, further utility functions for category handling

This commit is contained in:
Klaus Basan
2019-03-09 02:05:07 +01:00
committed by Mat Sutcliffe
parent c899bfbea7
commit 54adb40329
8 changed files with 95 additions and 4 deletions

View File

@@ -57,6 +57,13 @@ namespace BlackMisc
return levels; return levels;
} }
QString CAircraftCategoryList::getLevelsString(const QString &separator) const
{
const QSet<QString> levels = this->getLevelStrings();
if (levels.isEmpty()) {return {}; }
return levels.toList().join(separator);
}
QList<int> CAircraftCategoryList::getFirstLevels() const QList<int> CAircraftCategoryList::getFirstLevels() const
{ {
QSet<int> levels; QSet<int> levels;

View File

@@ -55,6 +55,9 @@ namespace BlackMisc
//! Get all level strings //! Get all level strings
QSet<QString> getLevelStrings() const; QSet<QString> getLevelStrings() const;
//! Get all level strings
QString getLevelsString(const QString &separator = ", ") const;
//! All levels sorted //! All levels sorted
QList<int> getFirstLevels() const; QList<int> getFirstLevels() const;

View File

@@ -216,7 +216,7 @@ namespace BlackMisc
this->removeIf(&CAircraftIcaoCode::isDbDuplicate, true); this->removeIf(&CAircraftIcaoCode::isDbDuplicate, true);
} }
QStringList CAircraftIcaoCodeList::toCompleterStrings(bool withIataCodes, bool withFamily, bool sort) const QStringList CAircraftIcaoCodeList::toCompleterStrings(bool withIataCodes, bool withFamily, bool withCategory, bool sort) const
{ {
QStringList c; QStringList c;
CAircraftIcaoCodeList icaos(*this); CAircraftIcaoCodeList icaos(*this);
@@ -225,7 +225,7 @@ namespace BlackMisc
// 3 steps to get a proper sort order of the string list // 3 steps to get a proper sort order of the string list
for (const CAircraftIcaoCode &icao : as_const(icaos)) for (const CAircraftIcaoCode &icao : as_const(icaos))
{ {
c.append(icao.getCombinedIcaoStringWithKey()); c.append(withCategory ? icao.getCombinedIcaoCategoryStringWithKey() : icao.getCombinedIcaoStringWithKey());
} }
if (withFamily) if (withFamily)

View File

@@ -119,7 +119,7 @@ namespace BlackMisc
void removeDuplicates(); void removeDuplicates();
//! For selection completion //! For selection completion
QStringList toCompleterStrings(bool withIataCodes = false, bool withFamily = false, bool sort = true) const; QStringList toCompleterStrings(bool withIataCodes = false, bool withFamily = false, bool withCategory = true, bool sort = true) const;
//! All ICAO codes, no duplicates //! All ICAO codes, no duplicates
QSet<QString> allDesignators(bool noUnspecified = true) const; QSet<QString> allDesignators(bool noUnspecified = true) const;

View File

@@ -202,7 +202,7 @@ namespace BlackMisc
if (this->hasValidDbKey()) if (this->hasValidDbKey())
{ {
return this->hasModelString() ? return this->hasModelString() ?
QString(this->getModelString() + this->getDbKeyAsStringInParentheses(" ")) : this->getModelString() % this->getDbKeyAsStringInParentheses(" ") :
this->getDbKeyAsString(); this->getDbKeyAsString();
} }
else else
@@ -390,6 +390,11 @@ namespace BlackMisc
return m_aircraftIcao.hasKnownDesignator(); return m_aircraftIcao.hasKnownDesignator();
} }
bool CAircraftModel::hasCategory() const
{
return m_aircraftIcao.hasCategory();
}
bool CAircraftModel::hasAirlineDesignator() const bool CAircraftModel::hasAirlineDesignator() const
{ {
return m_livery.hasValidAirlineDesignator(); return m_livery.hasValidAirlineDesignator();

View File

@@ -242,6 +242,9 @@ namespace BlackMisc
//! Has known aircraft designator? //! Has known aircraft designator?
bool hasKnownAircraftDesignator() const; bool hasKnownAircraftDesignator() const;
//! Assigned a category?
bool hasCategory() const;
//! Airline designator? //! Airline designator?
bool hasAirlineDesignator() const; bool hasAirlineDesignator() const;

View File

@@ -276,6 +276,17 @@ namespace BlackMisc
}); });
} }
CAircraftModelList CAircraftModelList::findByDesignatorsOrFamilyWithColorLivery(const QStringList &designators) const
{
return this->findBy([ & ](const CAircraftModel & model)
{
if (!model.getLivery().isColorLivery()) { return false; }
const CAircraftIcaoCode modelIcao(model.getAircraftIcaoCode());
if (designators.contains(modelIcao.getDesignator())) { return true; }
return modelIcao.hasFamily() && designators.contains(modelIcao.getFamily());
});
}
CAircraftModelList CAircraftModelList::findByCombinedType(const QString &combinedType) const CAircraftModelList CAircraftModelList::findByCombinedType(const QString &combinedType) const
{ {
const QString cc(combinedType.trimmed().toUpper()); const QString cc(combinedType.trimmed().toUpper());
@@ -356,6 +367,33 @@ namespace BlackMisc
}); });
} }
CAircraftModelList CAircraftModelList::findByCategoryFirstLevel(int firstLevel) const
{
if (firstLevel < 0) { return CAircraftModelList(); }
return this->findBy([ = ](const CAircraftModel & model)
{
return (model.hasCategory() && model.getAircraftIcaoCode().getCategory().getFirstLevel() == firstLevel);
});
}
CAircraftModelList CAircraftModelList::findByCategory(const CAircraftCategory &category) const
{
if (category.isNull()) { return CAircraftModelList(); }
return this->findBy([ = ](const CAircraftModel & model)
{
return (model.hasCategory() && model.getAircraftIcaoCode().getCategory() == category);
});
}
CAircraftModelList CAircraftModelList::findByCategories(const CAircraftCategoryList &categories) const
{
if (categories.isEmpty()) { return CAircraftModelList(); }
return this->findBy([ = ](const CAircraftModel & model)
{
return (model.hasCategory() && categories.contains(model.getAircraftIcaoCode().getCategory()));
});
}
CAircraftModelList CAircraftModelList::findFsFamilyModels() const CAircraftModelList CAircraftModelList::findFsFamilyModels() const
{ {
return this->findBy([](const CAircraftModel & model) return this->findBy([](const CAircraftModel & model)
@@ -545,6 +583,23 @@ namespace BlackMisc
}); });
} }
bool CAircraftModelList::containsCategory() const
{
return this->containsBy([ & ](const CAircraftModel & model)
{
return model.hasCategory();
});
}
bool CAircraftModelList::containsCategory(int firstLevel) const
{
if (firstLevel < 0) { return false; }
return this->containsBy([ & ](const CAircraftModel & model)
{
return model.hasCategory() && model.getAircraftIcaoCode().getCategory().getFirstLevel() == firstLevel;
});
}
CAircraftModelList CAircraftModelList::findByDistributors(const CDistributorList &distributors) const CAircraftModelList CAircraftModelList::findByDistributors(const CDistributorList &distributors) const
{ {
if (distributors.isEmpty()) { return CAircraftModelList(); } if (distributors.isEmpty()) { return CAircraftModelList(); }

View File

@@ -106,6 +106,12 @@ namespace BlackMisc
//! Contains VTOL models? //! Contains VTOL models?
bool containsVtol() const; bool containsVtol() const;
//! Contains any categorized model?
bool containsCategory() const;
//! Contains any model with 1st level?
bool containsCategory(int firstLevel) const;
//! Find by model string //! Find by model string
//! \remark normally CAircraftModelList::findFirstByModelStringOrDefault would be used //! \remark normally CAircraftModelList::findFirstByModelStringOrDefault would be used
CAircraftModelList findByModelString(const QString &modelString, Qt::CaseSensitivity sensitivity = Qt::CaseInsensitive) const; CAircraftModelList findByModelString(const QString &modelString, Qt::CaseSensitivity sensitivity = Qt::CaseInsensitive) const;
@@ -176,6 +182,9 @@ namespace BlackMisc
//! Models with aircraft family or designator and color livery //! Models with aircraft family or designator and color livery
CAircraftModelList findByDesignatorOrFamilyWithColorLivery(const Aviation::CAircraftIcaoCode &icao) const; CAircraftModelList findByDesignatorOrFamilyWithColorLivery(const Aviation::CAircraftIcaoCode &icao) const;
//! Models with aircraft family or designators and color livery
CAircraftModelList findByDesignatorsOrFamilyWithColorLivery(const QStringList &designators) const;
//! Find by combined code, wildcards possible, e.g. L*P, *2J //! Find by combined code, wildcards possible, e.g. L*P, *2J
CAircraftModelList findByCombinedType(const QString &combinedType) const; CAircraftModelList findByCombinedType(const QString &combinedType) const;
@@ -208,6 +217,15 @@ namespace BlackMisc
//! Find by model mode //! Find by model mode
CAircraftModelList findByModelMode(CAircraftModel::ModelMode mode) const; CAircraftModelList findByModelMode(CAircraftModel::ModelMode mode) const;
//! Find by first level of category
CAircraftModelList findByCategoryFirstLevel(int firstLevel) const;
//! Find by category
CAircraftModelList findByCategory(const Aviation::CAircraftCategory &category) const;
//! Find by categories
CAircraftModelList findByCategories(const Aviation::CAircraftCategoryList &categories) const;
//! Model icon path //! Model icon path
QString findModelIconPathByModelString(const QString &modelString) const; QString findModelIconPathByModelString(const QString &modelString) const;