From 9ec59514dc6c643116b8e91189853c80c1864523 Mon Sep 17 00:00:00 2001 From: Klaus Basan Date: Wed, 22 Aug 2018 01:32:42 +0200 Subject: [PATCH] Small improvements of auto stash component - airline can be set in model - fallback if there is no airline, but livery code --- .../components/dbautostashingcomponent.cpp | 111 +++++++++++------- .../components/dbautostashingcomponent.h | 19 ++- src/blackmisc/aviation/livery.cpp | 7 ++ src/blackmisc/aviation/livery.h | 3 + src/blackmisc/simulation/aircraftmodel.h | 3 + 5 files changed, 87 insertions(+), 56 deletions(-) diff --git a/src/blackgui/components/dbautostashingcomponent.cpp b/src/blackgui/components/dbautostashingcomponent.cpp index 6c84ffdb6..202c50683 100644 --- a/src/blackgui/components/dbautostashingcomponent.cpp +++ b/src/blackgui/components/dbautostashingcomponent.cpp @@ -65,10 +65,10 @@ namespace BlackGui ui->le_MaxModelsStashed->setValidator(new QIntValidator(10, CDbStashComponent::MaxModelPublished, this)); Q_ASSERT_X(this->getMappingComponent(), Q_FUNC_INFO, "Expect mapping componet"); - connect(sGui->getWebDataServices(), &CWebDataServices::dataRead, this, &CDbAutoStashingComponent::ps_entitiesRead); - connect(ui->tb_ResetDescription, &QToolButton::clicked, this, &CDbAutoStashingComponent::ps_resetDescription); + connect(sGui->getWebDataServices(), &CWebDataServices::dataRead, this, &CDbAutoStashingComponent::onEntitiesRead); + connect(ui->tb_ResetDescription, &QToolButton::clicked, this, &CDbAutoStashingComponent::resetDescription); - this->ps_resetDescription(); + this->resetDescription(); } CDbAutoStashingComponent::~CDbAutoStashingComponent() @@ -76,22 +76,22 @@ namespace BlackGui void CDbAutoStashingComponent::accept() { - switch (this->m_state) + switch (m_state) { case Running: return; case Completed: { - if (!this->m_modelsToStash.isEmpty()) + if (!m_modelsToStash.isEmpty()) { // this removes previously stashed models - this->getMappingComponent()->replaceStashedModelsUnvalidated(this->m_modelsToStash); + this->getMappingComponent()->replaceStashedModelsUnvalidated(m_modelsToStash); if (ui->cb_RemovedChecked->isChecked()) { - this->currentModelView()->removeModelsWithModelString(this->m_modelsToStash); + this->currentModelView()->removeModelsWithModelString(m_modelsToStash); } const CStatusMessage stashedMsg(this, CStatusMessage::SeverityInfo, QString("Auto stashed %1 models").arg(m_modelsToStash.size())); this->addStatusMessage(stashedMsg); - this->m_modelsToStash.clear(); + m_modelsToStash.clear(); } QDialog::accept(); break; @@ -121,14 +121,14 @@ namespace BlackGui this->setVisible(true); } - void CDbAutoStashingComponent::ps_entitiesRead(CEntityFlags::Entity entity, CEntityFlags::ReadState readState, int count) + void CDbAutoStashingComponent::onEntitiesRead(CEntityFlags::Entity entity, CEntityFlags::ReadState readState, int count) { if (readState != CEntityFlags::ReadFinished) { return; } Q_UNUSED(count); Q_UNUSED(entity); } - void CDbAutoStashingComponent::ps_resetDescription() + void CDbAutoStashingComponent::resetDescription() { ui->rb_DescriptionEmptyOnly->setChecked(true); ui->le_Description->setText(CAircraftModel::autoGenerated()); @@ -136,12 +136,12 @@ namespace BlackGui void CDbAutoStashingComponent::initGui() { - this->m_state = Idle; + m_state = Idle; ui->bb_AutoStashing->setStandardButtons(QDialogButtonBox::Ok | QDialogButtonBox::Cancel); ui->tvp_StatusMessages->clear(); - this->m_noData = 0; - this->m_noValidationFailed = 0; - this->m_noStashed = 0; + m_noData = 0; + m_noValidationFailed = 0; + m_noStashed = 0; this->updateProgressIndicator(0); if (!this->currentModelView()) @@ -182,9 +182,9 @@ namespace BlackGui if (percent > 100) { percent = 100; } if (percent < 0) { percent = 0; } ui->pb_StashingProgress->setValue(percent); - ui->le_Stashed->setText(QString::number(this->m_noStashed)); - ui->le_NoData->setText(QString::number(this->m_noData)); - ui->le_ValidationFailed->setText(QString::number(this->m_noValidationFailed)); + ui->le_Stashed->setText(QString::number(m_noStashed)); + ui->le_NoData->setText(QString::number(m_noData)); + ui->le_ValidationFailed->setText(QString::number(m_noValidationFailed)); } int CDbAutoStashingComponent::getSelectedOrAllCount() const @@ -231,9 +231,10 @@ namespace BlackGui Q_ASSERT_X(this->currentModelView(), Q_FUNC_INFO, "No view"); const CAircraftModelList models(ui->rb_Selected->isChecked() ? this->currentModelView()->selectedObjects() : this->currentModelView()->containerOrFilteredContainer()); if (models.isEmpty()) { return; } + if (!sGui || sGui->isShuttingDown()) { return; } // we have data and are good to go - this->m_state = Running; + m_state = Running; const int all = models.size(); // maximum @@ -284,16 +285,15 @@ namespace BlackGui this->updateProgressIndicator(100); sGui->processEventsToRefreshGui(); - const CStatusMessage stashedMsg(this, CStatusMessage::SeverityInfo, QString("Ready to auto stashed %1 models").arg(autoStashed.size())); + const CStatusMessage stashedMsg(this, CStatusMessage::SeverityInfo, QString("Ready to auto stash %1 models").arg(autoStashed.size())); this->addStatusMessage(stashedMsg); - this->m_modelsToStash = autoStashed; - this->m_state = Completed; + m_modelsToStash = autoStashed; + m_state = Completed; } bool CDbAutoStashingComponent::tryToStashModel(CAircraftModel &model, const CLivery &tempLivery) { const bool useTempLivery = tempLivery.isLoadedFromDb(); - bool stashed = false; // no airline and no livery, here replaced by temp livery if (useTempLivery && !model.hasAirlineDesignator() && !model.getLivery().hasValidDbKey()) @@ -305,39 +305,60 @@ namespace BlackGui if (!model.hasModelString()) { this->addStatusMessage(CStatusMessage(this, CStatusMessage::SeverityError, "No model string")); - this->m_noData++; + m_noData++; + return false; } - else if (!model.hasAircraftDesignator()) + + if (!model.hasAircraftDesignator()) { this->addStatusMessage(CStatusMessage(this, CStatusMessage::SeverityError, "No aircraft designator"), model); - this->m_noData++; + m_noData++; + return false; } - else if (!model.hasAirlineDesignator() && !model.getLivery().hasValidDbKey()) + + if (!model.hasAirlineDesignator() && !model.getLivery().hasValidDbKey()) { + // no valid airline and NO DB livery + // we try one fallback + const QString liveryCombinedCode = model.getLivery().getCombinedCode(); + bool fallback = false; + if (liveryCombinedCode.length() == 3 || liveryCombinedCode.length() == 4) + { + // could we use the combined code as airline + if (CAirlineIcaoCode::isValidAirlineDesignator(liveryCombinedCode)) + { + model.setAirlineIcaoDesignator(liveryCombinedCode); + fallback = true; + } + } + // if there is no livery (normal) we need an airline - this->addStatusMessage(CStatusMessage(this, CStatusMessage::SeverityError, "No airline designator"), model); - this->m_noData++; + if (!fallback) + { + this->addStatusMessage(CStatusMessage(this, CStatusMessage::SeverityError, "No airline designator"), model); + m_noData++; + return false; + } + } + + // stash here consolidates with DB data and validates + bool stashed = false; + const CAircraftModel stashModel(this->getMappingComponent()->consolidateModel(model)); + CStatusMessageList validationMsgs(stashModel.validate(true)); + validationMsgs.removeWarningsAndBelow(); + CStatusMessage msg = validationMsgs.toSingleMessage(); + if (msg.getSeverity() == CStatusMessage::SeverityError) + { + m_noValidationFailed++; } else { - // stash here consolidates with DB data and validates - CAircraftModel stashModel(this->getMappingComponent()->consolidateModel(model)); - CStatusMessageList validationMsgs(stashModel.validate(true)); - validationMsgs.removeWarningsAndBelow(); - CStatusMessage msg = validationMsgs.toSingleMessage(); - if (msg.getSeverity() == CStatusMessage::SeverityError) - { - this->m_noValidationFailed++; - } - else - { - msg = CStatusMessage(this, CStatusMessage::SeverityInfo, "Stashed succesfully"); - stashed = true; - this->m_noStashed++; - model = stashModel; - } - this->addStatusMessage(msg, stashModel); + msg = CStatusMessage(this, CStatusMessage::SeverityInfo, "Stashed succesfully"); + stashed = true; + m_noStashed++; + model = stashModel; } + this->addStatusMessage(msg, stashModel); return stashed; } diff --git a/src/blackgui/components/dbautostashingcomponent.h b/src/blackgui/components/dbautostashingcomponent.h index d9fb5475f..2d655c68a 100644 --- a/src/blackgui/components/dbautostashingcomponent.h +++ b/src/blackgui/components/dbautostashingcomponent.h @@ -23,8 +23,6 @@ #include #include -class QWidget; - namespace BlackMisc { class CLogCategoryList; @@ -41,7 +39,7 @@ namespace BlackGui */ class BLACKGUI_EXPORT CDbAutoStashingComponent : public QDialog, - public BlackGui::Components::CDbMappingComponentAware, + public CDbMappingComponentAware, public BlackCore::IProgressIndicator { Q_OBJECT @@ -63,7 +61,7 @@ namespace BlackGui explicit CDbAutoStashingComponent(QWidget *parent = nullptr); //! Destructor - virtual ~CDbAutoStashingComponent(); + virtual ~CDbAutoStashingComponent() override; //! At least run once and completed bool isCompleted() const { return m_state == Completed; } @@ -81,16 +79,15 @@ namespace BlackGui //! Show last result void showLastResults(); - private slots: - //! Data have been read - void ps_entitiesRead(BlackMisc::Network::CEntityFlags::Entity entity, BlackMisc::Network::CEntityFlags::ReadState readState, int count); - - //! Reset the description settings - void ps_resetDescription(); - private: QScopedPointer ui; + //! Data have been read + void onEntitiesRead(BlackMisc::Network::CEntityFlags::Entity entity, BlackMisc::Network::CEntityFlags::ReadState readState, int count); + + //! Reset the description settings + void resetDescription(); + //! Init the component void initGui(); diff --git a/src/blackmisc/aviation/livery.cpp b/src/blackmisc/aviation/livery.cpp index 3cc877d30..f8a50dee6 100644 --- a/src/blackmisc/aviation/livery.cpp +++ b/src/blackmisc/aviation/livery.cpp @@ -94,6 +94,13 @@ namespace BlackMisc return true; } + bool CLivery::setAirlineIcaoCodeDesignator(const QString &airlineIcaoDesignator) + { + if (m_airline.getDesignator() == airlineIcaoDesignator) { return false; } + m_airline.setDesignator(airlineIcaoDesignator); + return true; + } + bool CLivery::hasColorFuselage() const { return m_colorFuselage.isValid(); diff --git a/src/blackmisc/aviation/livery.h b/src/blackmisc/aviation/livery.h index 6e49512d7..1d46e54ac 100644 --- a/src/blackmisc/aviation/livery.h +++ b/src/blackmisc/aviation/livery.h @@ -101,6 +101,9 @@ namespace BlackMisc //! Airline ICAO code bool setAirlineIcaoCode(const CAirlineIcaoCode &airlineIcao); + //! Airline ICAO code designator + bool setAirlineIcaoCodeDesignator(const QString &airlineIcaoDesignator); + //! Combined code void setCombinedCode(const QString &code) { m_combinedCode = code.trimmed().toUpper(); } diff --git a/src/blackmisc/simulation/aircraftmodel.h b/src/blackmisc/simulation/aircraftmodel.h index db761e36d..60bf56121 100644 --- a/src/blackmisc/simulation/aircraftmodel.h +++ b/src/blackmisc/simulation/aircraftmodel.h @@ -185,6 +185,9 @@ namespace BlackMisc //! Airline ICAO code const Aviation::CAirlineIcaoCode &getAirlineIcaoCode() const { return m_livery.getAirlineIcaoCode(); } + //! Set airline ICAO code designator + bool setAirlineIcaoDesignator(const QString &designator) { return m_livery.setAirlineIcaoCodeDesignator(designator); } + //! Airline ICAO code designator const QString &getAirlineIcaoCodeDesignator() const { return m_livery.getAirlineIcaoCode().getDesignator(); }