Improved model validation dialog

* validation can be triggered async
* validation context menu can be disabled
* originally Ref T247
This commit is contained in:
Klaus Basan
2019-03-16 01:47:05 +01:00
committed by Mat Sutcliffe
parent 86f14046bf
commit 8344f03cf3
4 changed files with 34 additions and 5 deletions

View File

@@ -12,6 +12,7 @@
#include <QPushButton> #include <QPushButton>
#include <QDialogButtonBox> #include <QDialogButtonBox>
#include <QPointer>
using namespace BlackMisc; using namespace BlackMisc;
using namespace BlackMisc::Simulation; using namespace BlackMisc::Simulation;
@@ -35,6 +36,16 @@ namespace BlackGui
CAircraftModelValidationDialog::~CAircraftModelValidationDialog() CAircraftModelValidationDialog::~CAircraftModelValidationDialog()
{ } { }
void CAircraftModelValidationDialog::triggerValidation(int delayMs)
{
QPointer<CAircraftModelValidationDialog> myself(this);
QTimer::singleShot(delayMs, this, [ = ]
{
if (!myself) { return; }
this->validate();
});
}
void CAircraftModelValidationDialog::validate() void CAircraftModelValidationDialog::validate()
{ {
ui->comp_StatusMessage->clear(); ui->comp_StatusMessage->clear();

View File

@@ -22,6 +22,7 @@ namespace BlackGui
{ {
/** /**
* Model validation * Model validation
* \remark there is also a more specific validation version BlackGui::Components::CAircraftModelSetValidationDialog
*/ */
class CAircraftModelValidationDialog : public QDialog class CAircraftModelValidationDialog : public QDialog
{ {
@@ -37,6 +38,9 @@ namespace BlackGui
//! Models //! Models
void setModels(const BlackMisc::Simulation::CAircraftModelList &models) { m_models = models; } void setModels(const BlackMisc::Simulation::CAircraftModelList &models) { m_models = models; }
//! Trigger a validation
void triggerValidation(int delayMs = 2500);
private: private:
//! Validate //! Validate
void validate(); void validate();

View File

@@ -300,7 +300,14 @@ namespace BlackGui
if (!this->isEmpty()) if (!this->isEmpty())
{ {
menuActions.addAction(CIcons::appAircraft16(), "Model statistics", CMenuAction::pathModel(), { this, &CAircraftModelView::displayModelStatisticsDialog }); 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<CAircraftModelValidationDialog *>(parentDialog))))
{
menuActions.addAction(CIcons::disk16(), "Model validation", CMenuAction::pathModel(), { this, &CAircraftModelView::displayModelValidationDialog });
}
}
} }
// Stash menus // Stash menus
@@ -427,10 +434,12 @@ namespace BlackGui
void CAircraftModelView::requestTempDisable() void CAircraftModelView::requestTempDisable()
{ {
if (!m_menus.testFlag(MenuDisableModelsTemp)) { return; } if (!m_menus.testFlag(MenuDisableModelsTemp)) { return; }
if (!sGui || sGui->isShuttingDown()) { return; }
if (!this->hasSelection()) { return; } if (!this->hasSelection()) { return; }
const CAircraftModelList models(this->selectedObjects());
emit this->requestTempDisableModelsForMatching(models); const CAircraftModelList selectedModels(this->selectedObjects());
sGui->displayInStatusBar(CStatusMessage(CStatusMessage::SeverityInfo, u"Temp.disabled " % models.getModelStringList(true).join(" "))); sGui->displayInStatusBar(CStatusMessage(CStatusMessage::SeverityInfo, u"Temp.disabled " % selectedModels.getModelStringList(true).join(" ")));
emit this->requestTempDisableModelsForMatching(selectedModels);
} }
void CAircraftModelView::displayModelStatisticsDialog() void CAircraftModelView::displayModelStatisticsDialog()
@@ -444,6 +453,7 @@ namespace BlackGui
{ {
if (!m_fileValidationDialog) { m_fileValidationDialog = new CAircraftModelValidationDialog(this); } if (!m_fileValidationDialog) { m_fileValidationDialog = new CAircraftModelValidationDialog(this); }
m_fileValidationDialog->setModels(this->selectedObjects()); m_fileValidationDialog->setModels(this->selectedObjects());
m_fileValidationDialog->triggerValidation(1000);
m_fileValidationDialog->exec(); m_fileValidationDialog->exec();
} }
} // namespace } // namespace

View File

@@ -112,6 +112,9 @@ namespace BlackGui
//! Loading data will be restricted to simulator //! Loading data will be restricted to simulator
void setSimulatorForLoading(const BlackMisc::Simulation::CSimulatorInfo &simulator) { m_loadingRequiresSimulator = 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: signals:
//! Request to stash if applicable //! Request to stash if applicable
void requestStash(const BlackMisc::Simulation::CAircraftModelList &models); void requestStash(const BlackMisc::Simulation::CAircraftModelList &models);
@@ -163,7 +166,8 @@ namespace BlackGui
//! File validation dialog //! File validation dialog
void displayModelValidationDialog(); 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; CAircraftModelStatisticsDialog *m_statisticsDialog = nullptr;
CAircraftModelValidationDialog *m_fileValidationDialog = nullptr; CAircraftModelValidationDialog *m_fileValidationDialog = nullptr;
BlackMisc::Simulation::CSimulatorInfo m_loadingRequiresSimulator; //!< simulator required when loading BlackMisc::Simulation::CSimulatorInfo m_loadingRequiresSimulator; //!< simulator required when loading