diff --git a/src/blackgui/views/aircraftmodelvalidationdialog.cpp b/src/blackgui/views/aircraftmodelvalidationdialog.cpp index 0fb93adc3..16d33bd87 100644 --- a/src/blackgui/views/aircraftmodelvalidationdialog.cpp +++ b/src/blackgui/views/aircraftmodelvalidationdialog.cpp @@ -12,6 +12,7 @@ #include #include +#include using namespace BlackMisc; using namespace BlackMisc::Simulation; @@ -35,6 +36,16 @@ namespace BlackGui CAircraftModelValidationDialog::~CAircraftModelValidationDialog() { } + void CAircraftModelValidationDialog::triggerValidation(int delayMs) + { + QPointer myself(this); + QTimer::singleShot(delayMs, this, [ = ] + { + if (!myself) { return; } + this->validate(); + }); + } + void CAircraftModelValidationDialog::validate() { ui->comp_StatusMessage->clear(); diff --git a/src/blackgui/views/aircraftmodelvalidationdialog.h b/src/blackgui/views/aircraftmodelvalidationdialog.h index 6843d9e84..123d46e87 100644 --- a/src/blackgui/views/aircraftmodelvalidationdialog.h +++ b/src/blackgui/views/aircraftmodelvalidationdialog.h @@ -22,6 +22,7 @@ namespace BlackGui { /** * Model validation + * \remark there is also a more specific validation version BlackGui::Components::CAircraftModelSetValidationDialog */ class CAircraftModelValidationDialog : public QDialog { @@ -37,6 +38,9 @@ namespace BlackGui //! Models void setModels(const BlackMisc::Simulation::CAircraftModelList &models) { m_models = models; } + //! Trigger a validation + void triggerValidation(int delayMs = 2500); + private: //! Validate void validate(); diff --git a/src/blackgui/views/aircraftmodelview.cpp b/src/blackgui/views/aircraftmodelview.cpp index 7966415e2..2bac03854 100644 --- a/src/blackgui/views/aircraftmodelview.cpp +++ b/src/blackgui/views/aircraftmodelview.cpp @@ -300,7 +300,14 @@ namespace BlackGui if (!this->isEmpty()) { menuActions.addAction(CIcons::appAircraft16(), "Model statistics", CMenuAction::pathModel(), { this, &CAircraftModelView::displayModelStatisticsDialog }); - menuActions.addAction(CIcons::disk16(), "Model validation", CMenuAction::pathModel(), { this, &CAircraftModelView::displayModelValidationDialog }); + if (m_withValidationContextMenu) + { + QDialog *parentDialog = CGuiUtility::findParentDialog(this); + if (!(parentDialog && (qobject_cast(parentDialog)))) + { + menuActions.addAction(CIcons::disk16(), "Model validation", CMenuAction::pathModel(), { this, &CAircraftModelView::displayModelValidationDialog }); + } + } } // Stash menus @@ -427,10 +434,12 @@ namespace BlackGui void CAircraftModelView::requestTempDisable() { if (!m_menus.testFlag(MenuDisableModelsTemp)) { return; } + if (!sGui || sGui->isShuttingDown()) { return; } if (!this->hasSelection()) { return; } - const CAircraftModelList models(this->selectedObjects()); - emit this->requestTempDisableModelsForMatching(models); - sGui->displayInStatusBar(CStatusMessage(CStatusMessage::SeverityInfo, u"Temp.disabled " % models.getModelStringList(true).join(" "))); + + const CAircraftModelList selectedModels(this->selectedObjects()); + sGui->displayInStatusBar(CStatusMessage(CStatusMessage::SeverityInfo, u"Temp.disabled " % selectedModels.getModelStringList(true).join(" "))); + emit this->requestTempDisableModelsForMatching(selectedModels); } void CAircraftModelView::displayModelStatisticsDialog() @@ -444,6 +453,7 @@ namespace BlackGui { if (!m_fileValidationDialog) { m_fileValidationDialog = new CAircraftModelValidationDialog(this); } m_fileValidationDialog->setModels(this->selectedObjects()); + m_fileValidationDialog->triggerValidation(1000); m_fileValidationDialog->exec(); } } // namespace diff --git a/src/blackgui/views/aircraftmodelview.h b/src/blackgui/views/aircraftmodelview.h index a59931817..9b3c53476 100644 --- a/src/blackgui/views/aircraftmodelview.h +++ b/src/blackgui/views/aircraftmodelview.h @@ -112,6 +112,9 @@ namespace BlackGui //! Loading data will be restricted to simulator void setSimulatorForLoading(const BlackMisc::Simulation::CSimulatorInfo &simulator) { m_loadingRequiresSimulator = simulator; } + //! Enable the validation context menu + void setValidationContextMenu(const bool enabled) { m_withValidationContextMenu = enabled; } + signals: //! Request to stash if applicable void requestStash(const BlackMisc::Simulation::CAircraftModelList &models); @@ -163,7 +166,8 @@ namespace BlackGui //! File validation dialog void displayModelValidationDialog(); - bool m_stashingClearsSelection = true; //!< stashing unselects + bool m_stashingClearsSelection = true; //!< stashing unselects + bool m_withValidationContextMenu = true; //!< validation didalog context menu CAircraftModelStatisticsDialog *m_statisticsDialog = nullptr; CAircraftModelValidationDialog *m_fileValidationDialog = nullptr; BlackMisc::Simulation::CSimulatorInfo m_loadingRequiresSimulator; //!< simulator required when loading