Ref T99, use new icon names

* use icon id list from directory for performance
* some minor adjustments
This commit is contained in:
Klaus Basan
2017-06-30 21:55:32 +02:00
committed by Mathew Sutcliffe
parent d422873e08
commit 9ad721b77a
4 changed files with 75 additions and 35 deletions

View File

@@ -246,6 +246,18 @@ namespace BlackConfig
return s; return s;
} }
const QString &CBuildConfig::getImagesAirlinesDir()
{
static const QString s(QDir::cleanPath(getImagesDir() + QDir::separator() + "airlines"));
return s;
}
const QString &CBuildConfig::getImagesFlagsDir()
{
static const QString s(QDir::cleanPath(getImagesDir() + QDir::separator() + "flags"));
return s;
}
QString getHtmlDirImpl() QString getHtmlDirImpl()
{ {
const QString d(CBuildConfig::getSwiftShareDir()); const QString d(CBuildConfig::getSwiftShareDir());

View File

@@ -111,6 +111,12 @@ namespace BlackConfig
//! Where images are located //! Where images are located
static const QString &getImagesDir(); static const QString &getImagesDir();
//! Where airline images are located
static const QString &getImagesAirlinesDir();
//! Where flags images are located
static const QString &getImagesFlagsDir();
//! Where HTML files are located //! Where HTML files are located
static const QString &getHtmlDir(); static const QString &getHtmlDir();

View File

@@ -9,6 +9,7 @@
#include "airlineicaocode.h" #include "airlineicaocode.h"
#include "callsign.h" #include "callsign.h"
#include "blackconfig/buildconfig.h"
#include "blackmisc/db/datastoreutility.h" #include "blackmisc/db/datastoreutility.h"
#include "blackmisc/comparefunctions.h" #include "blackmisc/comparefunctions.h"
#include "blackmisc/icons.h" #include "blackmisc/icons.h"
@@ -18,15 +19,18 @@
#include "blackmisc/statusmessage.h" #include "blackmisc/statusmessage.h"
#include "blackmisc/stringutils.h" #include "blackmisc/stringutils.h"
#include "blackmisc/variant.h" #include "blackmisc/variant.h"
#include "blackmisc/verify.h"
#include <QJsonValue> #include <QJsonValue>
#include <QRegularExpression> #include <QRegularExpression>
#include <QRegularExpressionMatch> #include <QRegularExpressionMatch>
#include <QThreadStorage> #include <QThreadStorage>
#include <QStringBuilder> #include <QStringBuilder>
#include <QDir>
#include <Qt> #include <Qt>
#include <QtGlobal> #include <QtGlobal>
using namespace BlackConfig;
using namespace BlackMisc; using namespace BlackMisc;
using namespace BlackMisc::Db; using namespace BlackMisc::Db;
@@ -60,14 +64,9 @@ namespace BlackMisc
QString CAirlineIcaoCode::getVDesignatorDbKey() const QString CAirlineIcaoCode::getVDesignatorDbKey() const
{ {
if (this->isLoadedFromDb()) return this->isLoadedFromDb() ?
{ this->getVDesignator() % this->getDbKeyAsStringInParentheses(" ") :
return this->getVDesignator() % this->getDbKeyAsStringInParentheses(" "); this->getVDesignator();
}
else
{
return this->getVDesignator();
}
} }
void CAirlineIcaoCode::setDesignator(const QString &icaoDesignator) void CAirlineIcaoCode::setDesignator(const QString &icaoDesignator)
@@ -166,36 +165,30 @@ namespace BlackMisc
CIcon CAirlineIcaoCode::toIcon() const CIcon CAirlineIcaoCode::toIcon() const
{ {
if (hasValidDesignator()) if (this->hasValidDbKey() && CAirlineIcaoCode::iconIds().contains(this->getDbKey()))
{ {
// relative to images static const QString p("airlines/%1_%2.png");
return CIcon(QLatin1String("airlines/") % m_designator.toLower() % QLatin1String(".png"), this->convertToQString()); const QString n(p.arg(this->getDbKey(), 5, 10, QChar('0')).arg(this->getDesignator()));
} return CIcon(n, this->convertToQString());
else
{
return CIcon::iconByIndex(CIcons::StandardIconEmpty);
} }
return CIcon::iconByIndex(CIcons::StandardIconEmpty);
} }
QString CAirlineIcaoCode::convertToQString(bool i18n) const QString CAirlineIcaoCode::convertToQString(bool i18n) const
{ {
Q_UNUSED(i18n); Q_UNUSED(i18n);
QString s(this->m_designator); return m_designator %
if (this->m_name.isEmpty()) { return ""; } QLatin1String(" (") % m_name % QLatin1String(")") %
if (!this->m_name.isEmpty()) { s.append(" (").append(this->m_name).append(")"); } QLatin1String(" Op: ") % boolToYesNo(this->isOperating()) %
QLatin1String(" VA: ") % boolToYesNo(this->isVirtualAirline()) %
s.append(" Op: ").append(boolToYesNo(this->isOperating())); QLatin1String(" Mil: ") % boolToYesNo(this->isMilitary());
s.append(" VA: ").append(boolToYesNo(this->isVirtualAirline()));
s.append(" Mil: ").append(boolToYesNo(this->isMilitary()));
return s;
} }
CVariant CAirlineIcaoCode::propertyByIndex(const BlackMisc::CPropertyIndex &index) const CVariant CAirlineIcaoCode::propertyByIndex(const BlackMisc::CPropertyIndex &index) const
{ {
if (index.isMyself()) { return CVariant::from(*this); } if (index.isMyself()) { return CVariant::from(*this); }
if (IDatastoreObjectWithIntegerKey::canHandleIndex(index)) { return IDatastoreObjectWithIntegerKey::propertyByIndex(index); } if (IDatastoreObjectWithIntegerKey::canHandleIndex(index)) { return IDatastoreObjectWithIntegerKey::propertyByIndex(index); }
ColumnIndex i = index.frontCasted<ColumnIndex>(); const ColumnIndex i = index.frontCasted<ColumnIndex>();
switch (i) switch (i)
{ {
case IndexAirlineDesignator: case IndexAirlineDesignator:
@@ -233,7 +226,7 @@ namespace BlackMisc
{ {
if (index.isMyself()) { (*this) = variant.to<CAirlineIcaoCode>(); return; } if (index.isMyself()) { (*this) = variant.to<CAirlineIcaoCode>(); return; }
if (IDatastoreObjectWithIntegerKey::canHandleIndex(index)) { IDatastoreObjectWithIntegerKey::setPropertyByIndex(index, variant); return; } if (IDatastoreObjectWithIntegerKey::canHandleIndex(index)) { IDatastoreObjectWithIntegerKey::setPropertyByIndex(index, variant); return; }
ColumnIndex i = index.frontCasted<ColumnIndex>(); const ColumnIndex i = index.frontCasted<ColumnIndex>();
switch (i) switch (i)
{ {
case IndexAirlineDesignator: case IndexAirlineDesignator:
@@ -379,15 +372,10 @@ namespace BlackMisc
QString CAirlineIcaoCode::getNameWithKey() const QString CAirlineIcaoCode::getNameWithKey() const
{ {
if (!hasValidDbKey()) { return getName(); } if (!this->hasValidDbKey()) { return this->getName(); }
if (hasName()) return this->hasName() ?
{ QString(this->getName()).append(" ").append(this->getDbKeyAsStringInParentheses()) :
return QString(getName()).append(" ").append(getDbKeyAsStringInParentheses()); this->getDbKeyAsStringInParentheses();
}
else
{
return getDbKeyAsStringInParentheses();
}
} }
void CAirlineIcaoCode::updateMissingParts(const CAirlineIcaoCode &otherIcaoCode) void CAirlineIcaoCode::updateMissingParts(const CAirlineIcaoCode &otherIcaoCode)
@@ -489,5 +477,35 @@ namespace BlackMisc
code.setKeyAndTimestampFromDatabaseJson(json, prefix); code.setKeyAndTimestampFromDatabaseJson(json, prefix);
return code; return code;
} }
//! \private
QSet<int> iconIdsImpl()
{
QDir dir(CBuildConfig::getImagesAirlinesDir());
Q_ASSERT_X(dir.exists(), Q_FUNC_INFO, "image directory missing");
QSet<int> ids;
dir.setFilter(QDir::Files | QDir::NoSymLinks);
dir.setSorting(QDir::Name);
bool ok = false;
for (const QFileInfo &fileInfo : dir.entryInfoList())
{
const QString fn(fileInfo.fileName());
ok = fn.size() > 5;
if (!ok) { continue; }
BLACK_VERIFY_X(ok, Q_FUNC_INFO, "wrong file name");
const int id = fn.left(5).toInt(&ok);
BLACK_VERIFY_X(ok, Q_FUNC_INFO, "wrong id format");
if (!ok) { continue; }
ids.insert(id);
}
return ids;
}
const QSet<int> &CAirlineIcaoCode::iconIds()
{
static const QSet<int> ids = iconIdsImpl();
return ids;
}
} // namespace } // namespace
} // namespace } // namespace

View File

@@ -25,6 +25,7 @@
#include <QJsonObject> #include <QJsonObject>
#include <QMetaType> #include <QMetaType>
#include <QString> #include <QString>
#include <QSet>
namespace BlackMisc namespace BlackMisc
{ {
@@ -236,6 +237,9 @@ namespace BlackMisc
//! From our DB JSON //! From our DB JSON
static CAirlineIcaoCode fromDatabaseJson(const QJsonObject &json, const QString &prefix = QString()); static CAirlineIcaoCode fromDatabaseJson(const QJsonObject &json, const QString &prefix = QString());
//! The airline icon names (name only, not path)
static const QSet<int> &iconIds();
private: private:
QString m_designator; //!< "DLH" QString m_designator; //!< "DLH"
QString m_iataCode; //!< "LH" QString m_iataCode; //!< "LH"