diff --git a/src/blackgui/share/qss/stdwidget.qss b/src/blackgui/share/qss/stdwidget.qss index 28354e71b..53ba265a3 100644 --- a/src/blackgui/share/qss/stdwidget.qss +++ b/src/blackgui/share/qss/stdwidget.qss @@ -92,11 +92,6 @@ BlackGui--Components--CSetupLoadingDialog { background-image: url(:/textures/icons/textures/texture-inner.jpg); } -BlackGui--Views--CAircraftModelStatisticsDialog { - background: black; /* background is background color here */ - background-image: url(:/textures/icons/textures/texture-inner.jpg); -} - /* setup load dialog details frame */ /* BlackGui--Components--CSetupLoadingDialog #fr_Details { @@ -199,6 +194,10 @@ BlackGui--Components--CSimulatorSelector::disabled { background: rgba(4, 105, 105, 105); } +BlackGui--Components--CAircraftModelSetValidationDialog, +BlackGui--Components--CCoreSettingsDialog, +BlackGui--Views--CAircraftModelValidationDialog, +BlackGui--Views--CAircraftModelStatisticsDialog, BlackGui--Components--CDownloadComponent, BlackGui--Components--CDownloadDialog, BlackGui--Components--CRawFsdMessagesComponent, diff --git a/src/blackgui/views/aircraftmodelvalidationdialog.cpp b/src/blackgui/views/aircraftmodelvalidationdialog.cpp new file mode 100644 index 000000000..681e69083 --- /dev/null +++ b/src/blackgui/views/aircraftmodelvalidationdialog.cpp @@ -0,0 +1,59 @@ +/* Copyright (C) 2019 + * swift project Community / Contributors + * + * This file is part of swift project. It is subject to the license terms in the LICENSE file found in the top-level + * directory of this distribution and at http://www.swift-project.org/license.html. No part of swift project, + * including this file, may be copied, modified, propagated, or distributed except according to the terms + * contained in the LICENSE file. + */ + +#include "aircraftmodelvalidationdialog.h" +#include "ui_aircraftmodelvalidationdialog.h" +#include "blackmisc/simulation/aircraftmodelutils.h" + +#include +#include + +using namespace BlackMisc; +using namespace BlackMisc::Simulation; + +namespace BlackGui +{ + namespace Views + { + CAircraftModelValidationDialog::CAircraftModelValidationDialog(QWidget *parent) : + QDialog(parent), + ui(new Ui::CAircraftModelValidationDialog) + { + ui->setupUi(this); + this->setWindowFlags(this->windowFlags() & ~Qt::WindowContextHelpButtonHint); + + QPushButton *validateButton = new QPushButton("Validate", ui->bb_ValidationDialog); + ui->bb_ValidationDialog->addButton(validateButton, QDialogButtonBox::ActionRole); + connect(validateButton, &QPushButton::released, this, &CAircraftModelValidationDialog::validate); + } + + CAircraftModelValidationDialog::~CAircraftModelValidationDialog() + { } + + void CAircraftModelValidationDialog::validate() + { + ui->comp_StatusMessage->clear(); + if (m_models.isEmpty()) { return; } + + CAircraftModelList valid; + CAircraftModelList invalid; + const CCountPerSimulator counts = m_models.countPerSimulator(); + const double fsFamilyCount = counts.getCountForFsFamilySimulators(); + const double fsRatio = fsFamilyCount / m_models.size(); + const bool ignoreEmpty = false; + const int maxFailedFiles = 25; + const CStatusMessageList msgs = fsRatio > 0.9 ? + CFsCommonUtil::validateConfigFiles(m_models, valid, invalid, ignoreEmpty, maxFailedFiles) : + m_models.validateFiles(valid, invalid, ignoreEmpty, maxFailedFiles); + ui->comp_StatusMessage->clear(); + ui->comp_StatusMessage->appendStatusMessagesToList(msgs); + } + + } // ns +} // ns diff --git a/src/blackgui/views/aircraftmodelvalidationdialog.h b/src/blackgui/views/aircraftmodelvalidationdialog.h new file mode 100644 index 000000000..b47e9a0a1 --- /dev/null +++ b/src/blackgui/views/aircraftmodelvalidationdialog.h @@ -0,0 +1,51 @@ +/* Copyright (C) 2019 + * swift project Community / Contributors + * + * This file is part of swift project. It is subject to the license terms in the LICENSE file found in the top-level + * directory of this distribution and at http://www.swift-project.org/license.html. No part of swift project, + * including this file, may be copied, modified, propagated, or distributed except according to the terms + * contained in the LICENSE file. + */ + +//! \file + +#ifndef BLACKGUI_VIEWS_AIRCRAFTMODELVALIDATIONDIALOG_H +#define BLACKGUI_VIEWS_AIRCRAFTMODELVALIDATIONDIALOG_H + +#include +#include +#include "blackmisc/simulation/aircraftmodellist.h" + +namespace Ui { class CAircraftModelValidationDialog; } +namespace BlackGui +{ + namespace Views + { + /** + * Model validation + */ + class CAircraftModelValidationDialog : public QDialog + { + Q_OBJECT + + public: + //! Constructor + explicit CAircraftModelValidationDialog(QWidget *parent = nullptr); + + //! Destructor + virtual ~CAircraftModelValidationDialog(); + + //! Models + void setModels(const BlackMisc::Simulation::CAircraftModelList &models) { m_models = models; } + + private: + //! Validate + void validate(); + + QScopedPointer ui; + BlackMisc::Simulation::CAircraftModelList m_models; + }; + } // ns +} // ns + +#endif // guard diff --git a/src/blackgui/views/aircraftmodelvalidationdialog.ui b/src/blackgui/views/aircraftmodelvalidationdialog.ui new file mode 100644 index 000000000..f885247b9 --- /dev/null +++ b/src/blackgui/views/aircraftmodelvalidationdialog.ui @@ -0,0 +1,73 @@ + + + CAircraftModelValidationDialog + + + + 400 + 300 + + + + Validation dialog + + + + + + + + + Qt::Horizontal + + + QDialogButtonBox::Close + + + + + + + + BlackGui::Components::CStatusMessagesDetail + QFrame +
blackgui/components/statusmessagesdetail.h
+ 1 +
+
+ + + + bb_ValidationDialog + accepted() + CAircraftModelValidationDialog + accept() + + + 248 + 254 + + + 157 + 274 + + + + + bb_ValidationDialog + rejected() + CAircraftModelValidationDialog + reject() + + + 316 + 260 + + + 286 + 274 + + + + +
diff --git a/src/blackgui/views/aircraftmodelview.cpp b/src/blackgui/views/aircraftmodelview.cpp index 9450e0b50..b8120e520 100644 --- a/src/blackgui/views/aircraftmodelview.cpp +++ b/src/blackgui/views/aircraftmodelview.cpp @@ -10,6 +10,7 @@ #include "aircraftmodelview.h" #include "viewbase.h" #include "aircraftmodelstatisticsdialog.h" +#include "aircraftmodelvalidationdialog.h" #include "blackgui/filters/aircraftmodelfilterdialog.h" #include "blackgui/menus/menuaction.h" #include "blackgui/guiapplication.h" @@ -290,10 +291,11 @@ namespace BlackGui void CAircraftModelView::customMenu(CMenuActions &menuActions) { - // Statistics + // Statistics and validation 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 }); } // Stash menus @@ -428,13 +430,16 @@ namespace BlackGui void CAircraftModelView::displayModelStatisticsDialog() { - if (!m_statisticsDialog) - { - m_statisticsDialog = new CAircraftModelStatisticsDialog(this); - } - + if (!m_statisticsDialog) { m_statisticsDialog = new CAircraftModelStatisticsDialog(this); } m_statisticsDialog->analyzeModels(this->container()); m_statisticsDialog->exec(); } + + void CAircraftModelView::displayModelValidationDialog() + { + if (!m_fileValidationDialog) { m_fileValidationDialog = new CAircraftModelValidationDialog(this); } + m_fileValidationDialog->setModels(this->selectedObjects()); + m_fileValidationDialog->exec(); + } } // namespace } // namespace diff --git a/src/blackgui/views/aircraftmodelview.h b/src/blackgui/views/aircraftmodelview.h index 418926a86..8425cf9cc 100644 --- a/src/blackgui/views/aircraftmodelview.h +++ b/src/blackgui/views/aircraftmodelview.h @@ -43,10 +43,11 @@ namespace BlackMisc { namespace Simulation { class CAircraftModel; } } namespace BlackGui { namespace Filters { class CAircraftModelFilterDialog; } - namespace Menus { class CMenuActions; } + namespace Menus { class CMenuActions; } namespace Views { class CAircraftModelStatisticsDialog; + class CAircraftModelValidationDialog; //! Aircraft view class BLACKGUI_EXPORT CAircraftModelView : @@ -157,8 +158,12 @@ namespace BlackGui //! Dialog about model statistics void displayModelStatisticsDialog(); + //! File validation dialog + void displayModelValidationDialog(); + bool m_stashingClearsSelection = true; //!< stashing unselects - CAircraftModelStatisticsDialog *m_statisticsDialog = nullptr; + CAircraftModelStatisticsDialog *m_statisticsDialog = nullptr; + CAircraftModelValidationDialog *m_fileValidationDialog = nullptr; BlackMisc::Simulation::CSimulatorInfo m_loadingRequiresSimulator; //!< simulator required when loading }; } // ns