diff --git a/src/blackgui/models/aircraftmodellistmodel.cpp b/src/blackgui/models/aircraftmodellistmodel.cpp index 61f13a8a0..ee7344a12 100644 --- a/src/blackgui/models/aircraftmodellistmodel.cpp +++ b/src/blackgui/models/aircraftmodellistmodel.cpp @@ -42,7 +42,8 @@ namespace BlackGui case OwnSimulatorModel: case StashModel: this->m_columns.addColumn(CColumn::standardString("model", { CAircraftModel::IndexModelString})); - this->m_columns.addColumn(CColumn::standardString("DB", "parts from DB", { CAircraftModel::IndexPartsDbStatus})); + this->m_columns.addColumn(CColumn("mode", "model mode(include, exclude)", CAircraftModel::IndexModelModeAsIcon, new CPixmapFormatter())); + this->m_columns.addColumn(CColumn::standardString("DB", "parts from DB", { CAircraftModel::IndexMembersDbStatus})); this->m_columns.addColumn(CColumn::standardString("description", { CAircraftModel::IndexDescription})); this->m_columns.addColumn(CColumn::standardString("sim.", "simulator supported", CAircraftModel::IndexSimulatorInfoAsString)); @@ -79,6 +80,8 @@ namespace BlackGui case Database: this->m_columns.addColumn(CColumn::standardString("id", CAircraftModel::IndexDbIntegerKey, CDefaultFormatter::alignRightVCenter())); this->m_columns.addColumn(CColumn::standardString("model", CAircraftModel::IndexModelString)); + this->m_columns.addColumn(CColumn("mode", "model mode(include, exclude)", CAircraftModel::IndexModelModeAsIcon, new CPixmapFormatter())); + this->m_columns.addColumn(CColumn::standardString("dist.", "distributor", { CAircraftModel::IndexDistributor, CDistributor::IndexDbStringKey})); this->m_columns.addColumn(CColumn::standardString("name", CAircraftModel::IndexName)); this->m_columns.addColumn(CColumn::standardString("description", CAircraftModel::IndexDescription)); diff --git a/src/blackmisc/simulation/aircraftmodel.cpp b/src/blackmisc/simulation/aircraftmodel.cpp index 363e9f8b3..243ee01c5 100644 --- a/src/blackmisc/simulation/aircraftmodel.cpp +++ b/src/blackmisc/simulation/aircraftmodel.cpp @@ -14,6 +14,7 @@ #include #include #include +#include "blackmisc/verify.h" using namespace BlackMisc; using namespace BlackMisc::Aviation; @@ -116,7 +117,9 @@ namespace BlackMisc case IndexModelMode: return CVariant::fromValue(this->m_modelMode); case IndexModelModeAsString: - return CVariant(this->getModelModeAsString()); + return CVariant::fromValue(this->getModelModeAsString()); + case IndexModelModeAsIcon: + return CVariant::fromValue(this->getModelModeAsIcon()); case IndexDistributor: return m_distributor.propertyByIndex(index.copyFrontRemoved()); case IndexSimulatorInfo: @@ -135,8 +138,8 @@ namespace BlackMisc return m_livery.propertyByIndex(index.copyFrontRemoved()); case IndexCallsign: return m_callsign.propertyByIndex(index.copyFrontRemoved()); - case IndexPartsDbStatus: - return getPartsDbStatus(); + case IndexMembersDbStatus: + return getMembersDbStatus(); default: return CValueObject::propertyByIndex(index); } @@ -179,7 +182,14 @@ namespace BlackMisc this->m_modelType = variant.value(); break; case IndexModelMode: - this->m_modelMode = variant.value(); + if (variant.type() == QMetaType::QString) + { + this->setModelModeAsString(variant.toQString()); + } + else + { + this->m_modelMode = variant.value(); + } break; default: CValueObject::setPropertyByIndex(variant, index); @@ -216,9 +226,11 @@ namespace BlackMisc case IndexModelType: return Compare::compare(this->m_modelType, compareValue.getModelType()); case IndexModelMode: + case IndexModelModeAsString: + case IndexModelModeAsIcon: return Compare::compare(this->m_modelMode, compareValue.getModelMode()); - case IndexPartsDbStatus: - return getPartsDbStatus().compare(compareValue.getPartsDbStatus()); + case IndexMembersDbStatus: + return getMembersDbStatus().compare(compareValue.getMembersDbStatus()); default: break; } @@ -259,6 +271,26 @@ namespace BlackMisc return this->m_livery.hasValidAirlineDesignator(); } + const CIcon &CAircraftModel::getModelModeAsIcon() const + { + switch (this->getModelMode()) + { + case Include: + return CIconList::iconByIndex(CIcons::ModelInclude); + case Exclude: + return CIconList::iconByIndex(CIcons::ModelExclude); + default: + Q_ASSERT_X(false, Q_FUNC_INFO, "wrong mode"); + break; + } + return CIconList::iconByIndex(CIcons::ModelInclude); + } + + void CAircraftModel::setModelModeAsString(const QString &mode) + { + this->setModelMode(CAircraftModel::modelModeFromString(mode)); + } + void CAircraftModel::updateMissingParts(const CAircraftModel &otherModel) { if (!this->hasValidDbKey() && otherModel.hasValidDbKey()) @@ -305,7 +337,7 @@ namespace BlackMisc return m_simulator.isAnySimulator(); } - QString CAircraftModel::getPartsDbStatus() const + QString CAircraftModel::getMembersDbStatus() const { QString s(hasValidDbKey() ? "M" : "m"); s = s.append(getDistributor().hasValidDbKey() ? 'D' : 'd'); @@ -363,19 +395,22 @@ namespace BlackMisc { if (mode.isEmpty() || mode.startsWith('I', Qt::CaseInsensitive)) { return Include;} if (mode.startsWith('E', Qt::CaseInsensitive)) { return Exclude; } - Q_ASSERT_X(false, Q_FUNC_INFO, "wrong mode"); + BLACK_VERIFY_X(false, Q_FUNC_INFO, "wrong mode"); return Include; // default } - QString CAircraftModel::modelModeToString(CAircraftModel::ModelMode mode) + const QString &CAircraftModel::modelModeToString(CAircraftModel::ModelMode mode) { + static const QString i("Include"); + static const QString e("Exclude"); + switch (mode) { - case Include: return "Include"; - case Exclude: return "Exclude"; + case Include: return i; + case Exclude: return e; default: Q_ASSERT_X(false, Q_FUNC_INFO, "wrong mode"); } - return "Include"; + return i; // default } CAircraftModel CAircraftModel::fromDatabaseJson(const QJsonObject &json, const QString prefix) @@ -399,7 +434,7 @@ namespace BlackMisc modelString, CAircraftModel::TypeDatabaseEntry, simInfo, modelName, modelDescription, aircraftIcao, livery ); model.setDistributor(distributor); - model.setModelMode(modelModeFromString(modelMode)); + model.setModelModeAsString(modelMode); model.setKeyAndTimestampFromDatabaseJson(json, prefix); return model; } diff --git a/src/blackmisc/simulation/aircraftmodel.h b/src/blackmisc/simulation/aircraftmodel.h index ba76755ca..19f852afa 100644 --- a/src/blackmisc/simulation/aircraftmodel.h +++ b/src/blackmisc/simulation/aircraftmodel.h @@ -70,8 +70,9 @@ namespace BlackMisc IndexModelTypeAsString, IndexModelMode, IndexModelModeAsString, + IndexModelModeAsIcon, IndexHasQueriedModelString, - IndexPartsDbStatus + IndexMembersDbStatus }; //! \copydoc BlackMisc::CValueObject::registerMetadata @@ -189,11 +190,17 @@ namespace BlackMisc ModelMode getModelMode() const { return m_modelMode; } //! Model mode as string - QString getModelModeAsString() const { return modelModeToString(getModelMode()); } + const QString &getModelModeAsString() const { return modelModeToString(getModelMode()); } + + //! Model mode as string + const BlackMisc::CIcon &getModelModeAsIcon() const; //! Set model mode void setModelMode(ModelMode mode) { m_modelMode = mode; } + //! Set model mode as string + void setModelModeAsString(const QString &mode); + //! Simulator info CSimulatorInfo getSimulatorInfo() const { return this->m_simulator; } @@ -227,8 +234,8 @@ namespace BlackMisc //! Valid simulator bool hasValidSimulator() const; - //! Info, which parts/subparts (Livery, Aircraft ICAO, ...) are already based on DB data - QString getPartsDbStatus() const; + //! Info, which members (Livery, Aircraft ICAO, ...) are already based on DB data + QString getMembersDbStatus() const; //! Matches model string? bool matchesModelString(const QString &modelString, Qt::CaseSensitivity sensitivity) const; @@ -252,7 +259,7 @@ namespace BlackMisc static ModelMode modelModeFromString(const QString &mode); //! Model mode - static QString modelModeToString(ModelMode mode); + static const QString &modelModeToString(ModelMode mode); //! From swift DB JSON static CAircraftModel fromDatabaseJson(const QJsonObject &json, const QString prefix = QString("mod_"));