Ref T660, utility functions

* check if model is in path
* addAsValidOrInvalidModel
* set corresponding simulator for validation
* display validation of empty model set
This commit is contained in:
Klaus Basan
2019-06-08 21:41:22 +02:00
committed by Mat Sutcliffe
parent d59e1c3332
commit f3ec7a8a68
12 changed files with 99 additions and 48 deletions

View File

@@ -70,7 +70,7 @@ namespace BlackGui
ui->tvp_OwnModelSet->menuAddItems(CAircraftModelView::MenuLoadAndSave | CAircraftModelView::MenuRefresh | CAircraftModelView::MenuOrderable);
ui->tvp_OwnModelSet->setSorting(CAircraftModel::IndexOrderString);
ui->tvp_OwnModelSet->initAsOrderable();
ui->tvp_OwnModelSet->setSimulatorForLoading(ui->comp_SimulatorSelector->getValue());
ui->tvp_OwnModelSet->setCorrespondingSimulator(ui->comp_SimulatorSelector->getValue());
ui->comp_SimulatorSelector->setMode(CSimulatorSelector::RadioButtons);
ui->comp_SimulatorSelector->setRememberSelectionAndSetToLastSelection();
const CSimulatorInfo simulator = ui->comp_SimulatorSelector->getValue();
@@ -428,7 +428,7 @@ namespace BlackGui
m_simulator = simulator;
ui->comp_SimulatorSelector->setValue(simulator);
ui->tvp_OwnModelSet->setSimulatorForLoading(simulator);
ui->tvp_OwnModelSet->setCorrespondingSimulator(simulator);
ui->le_Simulator->setText(simulator.toQString(true));
this->synchronizeCache(simulator);
this->updateViewToCurrentModels();

View File

@@ -36,6 +36,12 @@ namespace BlackGui
CAircraftModelValidationDialog::~CAircraftModelValidationDialog()
{ }
void CAircraftModelValidationDialog::setModels(const CAircraftModelList &models, const CSimulatorInfo &simulator)
{
m_models = models;
m_simulator = simulator;
}
void CAircraftModelValidationDialog::triggerValidation(int delayMs)
{
QPointer<CAircraftModelValidationDialog> myself(this);
@@ -57,7 +63,7 @@ namespace BlackGui
const bool ignoreEmpty = false;
const int maxFailedFiles = 25;
bool wasStopped = false;
const CStatusMessageList msgs = CAircraftModelUtilities::validateModelFiles(m_models, valid, invalid, ignoreEmpty, maxFailedFiles, wasStopped, "");
const CStatusMessageList msgs = CAircraftModelUtilities::validateModelFiles(m_simulator, m_models, valid, invalid, ignoreEmpty, maxFailedFiles, wasStopped, "");
ui->comp_StatusMessage->clear();
ui->comp_StatusMessage->setNoSorting(); // we use the pre-sorted list
ui->comp_StatusMessage->appendStatusMessagesToList(msgs);

View File

@@ -33,10 +33,12 @@ namespace BlackGui
explicit CAircraftModelValidationDialog(QWidget *parent = nullptr);
//! Destructor
virtual ~CAircraftModelValidationDialog();
virtual ~CAircraftModelValidationDialog() override;
//! Models
void setModels(const BlackMisc::Simulation::CAircraftModelList &models) { m_models = models; }
void setModels(
const BlackMisc::Simulation::CAircraftModelList &models,
const BlackMisc::Simulation::CSimulatorInfo &simulator);
//! Trigger a validation
void triggerValidation(int delayMs = 2500);
@@ -47,6 +49,7 @@ namespace BlackGui
QScopedPointer<Ui::CAircraftModelValidationDialog> ui;
BlackMisc::Simulation::CAircraftModelList m_models;
BlackMisc::Simulation::CSimulatorInfo m_simulator { BlackMisc::Simulation::CSimulatorInfo::None };
};
} // ns
} // ns

View File

@@ -322,7 +322,7 @@ namespace BlackGui
QDialog *parentDialog = CGuiUtility::findParentDialog(this);
if (!(parentDialog && (qobject_cast<CAircraftModelValidationDialog *>(parentDialog))))
{
menuActions.addAction(CIcons::disk16(), "Model validation", CMenuAction::pathModel(), { this, &CAircraftModelView::displayModelValidationDialog });
menuActions.addAction(CIcons::disk16(), "Model validation (selected)", CMenuAction::pathModel(), { this, &CAircraftModelView::displayModelValidationDialog });
}
}
if (CAircraftModelList::hasInvalidModelFile())
@@ -389,22 +389,22 @@ namespace BlackGui
CStatusMessage CAircraftModelView::modifyLoadedJsonData(CAircraftModelList &models) const
{
if (m_loadingRequiresSimulator.isNoSimulator()) { return {}; }
if (m_correspondingSimulator.isNoSimulator()) { return {}; }
if (models.isEmpty()) { return CStatusMessage(this, CStatusMessage::SeverityDebug, u"Empty models", true); }
// multiple sims with same count
const int removed = models.removeIfNotMatchingSimulator(m_loadingRequiresSimulator);
const int removed = models.removeIfNotMatchingSimulator(m_correspondingSimulator);
if (removed < 1) { return {}; }
return CStatusMessage(this, CStatusMessage::SeverityWarning, u"Reduced by %1 model(s) to only use %2 models", true) << removed << m_loadingRequiresSimulator.toQString(true);
return CStatusMessage(this, CStatusMessage::SeverityWarning, u"Reduced by %1 model(s) to only use %2 models", true) << removed << m_correspondingSimulator.toQString(true);
}
CStatusMessage CAircraftModelView::validateLoadedJsonData(const CAircraftModelList &models) const
{
if (models.isEmpty()) { return COrderableViewWithDbObjects::validateLoadedJsonData(models); }
if (m_loadingRequiresSimulator.isNoSimulator()) { return COrderableViewWithDbObjects::validateLoadedJsonData(models); }
if (models.containsNotMatchingSimulator(m_loadingRequiresSimulator))
if (m_correspondingSimulator.isNoSimulator()) { return COrderableViewWithDbObjects::validateLoadedJsonData(models); }
if (models.containsNotMatchingSimulator(m_correspondingSimulator))
{
return CStatusMessage(this, CStatusMessage::SeverityError, u"Found entry not matching %1 in model data", true) << m_loadingRequiresSimulator.toQString();
return CStatusMessage(this, CStatusMessage::SeverityError, u"Found entry not matching %1 in model data", true) << m_correspondingSimulator.toQString();
}
return COrderableViewWithDbObjects::validateLoadedJsonData(models);
}
@@ -473,7 +473,7 @@ namespace BlackGui
void CAircraftModelView::displayModelValidationDialog()
{
if (!m_fileValidationDialog) { m_fileValidationDialog = new CAircraftModelValidationDialog(this); }
m_fileValidationDialog->setModels(this->selectedObjects());
m_fileValidationDialog->setModels(this->selectedObjects(), m_correspondingSimulator);
m_fileValidationDialog->triggerValidation(1000);
m_fileValidationDialog->exec();
}

View File

@@ -112,8 +112,9 @@ namespace BlackGui
//! \copydoc BlackGui::Models::CAircraftModelListModel::highlightModels
bool highlightModels() const;
//! Loading data will be restricted to simulator
void setSimulatorForLoading(const BlackMisc::Simulation::CSimulatorInfo &simulator) { m_loadingRequiresSimulator = simulator; }
//! Corresponding simulator
//! \remark used for validation or loading data will be restricted to simulator
void setCorrespondingSimulator(const BlackMisc::Simulation::CSimulatorInfo &simulator) { m_correspondingSimulator = simulator; }
//! Enable the validation context menu
void setValidationContextMenu(const bool enabled) { m_withValidationContextMenu = enabled; }
@@ -171,9 +172,9 @@ namespace BlackGui
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;
BlackMisc::Simulation::CSimulatorInfo m_loadingRequiresSimulator; //!< simulator required when loading
BlackMisc::Simulation::CSimulatorInfo m_correspondingSimulator; //!< validation, simulator required when loading
};
} // ns
} // ns