diff --git a/src/blackgui/components/dbliveryselectorcomponent.cpp b/src/blackgui/components/dbliveryselectorcomponent.cpp index fda1f5a29..de067a171 100644 --- a/src/blackgui/components/dbliveryselectorcomponent.cpp +++ b/src/blackgui/components/dbliveryselectorcomponent.cpp @@ -58,7 +58,11 @@ namespace BlackGui void CDbLiverySelectorComponent::setLivery(const CLivery &livery) { QString code(livery.getCombinedCode()); - if (code.isEmpty()) { return; } + if (code.isEmpty()) + { + this->ui->le_Livery->clear(); + return; + } if (livery != m_currentLivery) { this->ui->le_Livery->setText(code); diff --git a/src/blackgui/editors/liveryform.cpp b/src/blackgui/editors/liveryform.cpp index 5bf5b1850..39510625b 100644 --- a/src/blackgui/editors/liveryform.cpp +++ b/src/blackgui/editors/liveryform.cpp @@ -79,16 +79,26 @@ namespace BlackGui this->ui->color_Fuselage->setColor(livery.getColorFuselage()); this->ui->color_Tail->setColor(livery.getColorTail()); - this->ui->editor_AirlineIcao->setValue(livery.getAirlineIcaoCode()); + if (livery.isColorLivery()) + { + this->ui->editor_AirlineIcao->clear(); + } + else + { + this->ui->editor_AirlineIcao->setValue(livery.getAirlineIcaoCode()); + } } CStatusMessageList CLiveryForm::validate(bool withNestedForms) const { CLivery livery(getValue()); CStatusMessageList msgs(livery.validate()); - if (withNestedForms && (livery.hasValidDbKey() || !livery.getAirlineIcaoCodeDesignator().isEmpty())) + if (withNestedForms) { - msgs.push_back(this->ui->editor_AirlineIcao->validate()); + if (!livery.isColorLivery()) + { + msgs.push_back(this->ui->editor_AirlineIcao->validate()); + } } if (this->isReadOnly()) { diff --git a/src/blackmisc/aviation/aircrafticaocode.cpp b/src/blackmisc/aviation/aircrafticaocode.cpp index d28563119..645506ee7 100644 --- a/src/blackmisc/aviation/aircrafticaocode.cpp +++ b/src/blackmisc/aviation/aircrafticaocode.cpp @@ -98,6 +98,12 @@ namespace BlackMisc return (this->hasValidDesignator() && this->getDesignator() != getUnassignedDesignator()); } + bool CAircraftIcaoCode::hasSpecialDesignator() const + { + if (!this->hasDesignator()) { return false; } + return getSpecialDesignators().contains(this->getDesignator()); + } + bool CAircraftIcaoCode::isIataSameAsDesignator() const { return hasDesignator() && hasIataCode() && m_iataCode == m_designator; diff --git a/src/blackmisc/aviation/aircrafticaocode.h b/src/blackmisc/aviation/aircrafticaocode.h index 3626397f8..6e5f515db 100644 --- a/src/blackmisc/aviation/aircrafticaocode.h +++ b/src/blackmisc/aviation/aircrafticaocode.h @@ -78,6 +78,9 @@ namespace BlackMisc //! Has designator and designator is not "ZZZZ" bool hasKnownDesignator() const; + //! Special designator + bool hasSpecialDesignator() const; + //! IATA code const QString &getIataCode() const { return m_iataCode; } diff --git a/src/blackmisc/aviation/aircrafticaocodelist.cpp b/src/blackmisc/aviation/aircrafticaocodelist.cpp index 48ecf7664..4571262f3 100644 --- a/src/blackmisc/aviation/aircrafticaocodelist.cpp +++ b/src/blackmisc/aviation/aircrafticaocodelist.cpp @@ -120,7 +120,7 @@ namespace BlackMisc for (const QJsonValue &value : array) { CAircraftIcaoCode icao(CAircraftIcaoCode::fromDatabaseJson(value.toObject())); - if (ignoreIncomplete && !icao.hasCompleteData()) { continue; } + if (ignoreIncomplete && !icao.hasSpecialDesignator() && !icao.hasCompleteData()) { continue; } codes.push_back(icao); } return codes; diff --git a/src/blackmisc/aviation/livery.cpp b/src/blackmisc/aviation/livery.cpp index 03f2311c5..9a3982a61 100644 --- a/src/blackmisc/aviation/livery.cpp +++ b/src/blackmisc/aviation/livery.cpp @@ -115,7 +115,18 @@ namespace BlackMisc if (!hasCombinedCode()) { msg.push_back(CStatusMessage(cats, CStatusMessage::SeverityError, "Livery: missing livery code")); } if (!hasColorFuselage()) { msg.push_back(CStatusMessage(cats, CStatusMessage::SeverityWarning, "Livery: no fuselage color")); } if (!hasColorTail()) { msg.push_back(CStatusMessage(cats, CStatusMessage::SeverityWarning, "Livery: no tail color")); } - if (!getAirlineIcaoCodeDesignator().isEmpty()) { msg.push_back(m_airline.validate()); } + if (this->isColorLivery()) + { + if (!this->getAirlineIcaoCodeDesignator().isEmpty()) + { + // color livery, supposed to have empty airline + msg.push_back(CStatusMessage(cats, CStatusMessage::SeverityWarning, "Livery: color livery, but airline looks odd")); + } + } + else + { + msg.push_back(m_airline.validate()); + } return msg; } diff --git a/src/blackmisc/simulation/aircraftmodellist.cpp b/src/blackmisc/simulation/aircraftmodellist.cpp index 78667ab9c..185f8e122 100644 --- a/src/blackmisc/simulation/aircraftmodellist.cpp +++ b/src/blackmisc/simulation/aircraftmodellist.cpp @@ -202,7 +202,11 @@ namespace BlackMisc if (!model.getDistributor().hasValidDbKey()) { subMsgs << "No distributor from DB"; } if (!model.getAircraftIcaoCode().hasValidDbKey()) { subMsgs << "No aircraft ICAO from DB"; } if (!model.getLivery().hasValidDbKey()) { subMsgs << "No livery from DB"; } - if (!model.getLivery().getAirlineIcaoCode().hasValidDbKey()) { subMsgs << "No airline ICAO from DB"; } + if (model.getLivery().isAirlineLivery()) + { + // for color codes we do not need to check + if (!model.getLivery().getAirlineIcaoCode().hasValidDbKey()) { subMsgs << "No airline ICAO from DB"; } + } CStatusMessage msgDb(CStatusMessage::SeverityError, subMsgs.join(", ")); CStatusMessage singleMsg(CStatusMessageList({msgModel, msgDb}).toSingleMessage());