8 #include "ui_aircraftmodelvalidationcomponent.h"
14 using namespace swift::misc::simulation;
15 using namespace swift::core::context;
19 CAircraftModelValidationComponent::CAircraftModelValidationComponent(QWidget *parent)
24 ui->comp_Simulator->setRememberSelection(
false);
25 ui->comp_Messages->setNoSorting();
26 ui->tvp_InvalidModels->setValidationContextMenu(
false);
32 connect(ui->cb_EnableStartupCheck, &QCheckBox::toggled,
this,
33 &CAircraftModelValidationComponent::onCheckAtStartupChanged);
34 connect(ui->cb_OnlyIfErrorsOrWarnings, &QCheckBox::toggled,
this,
35 &CAircraftModelValidationComponent::onOnlyErrorWarningChanged);
37 connect(ui->pb_TempDisableInvalid, &QPushButton::released,
this,
38 &CAircraftModelValidationComponent::onTempDisabledButtonClicked, Qt::QueuedConnection);
39 connect(ui->pb_TempDisableSelected, &QPushButton::released,
this,
40 &CAircraftModelValidationComponent::onTempDisabledButtonClicked, Qt::QueuedConnection);
41 connect(ui->pb_RemoveInvalid, &QPushButton::released,
this,
42 &CAircraftModelValidationComponent::onRemoveButtonClicked, Qt::QueuedConnection);
43 connect(ui->pb_RemoveSelected, &QPushButton::released,
this,
44 &CAircraftModelValidationComponent::onRemoveButtonClicked, Qt::QueuedConnection);
46 connect(ui->pb_TriggerValidation, &QPushButton::released,
this,
47 &CAircraftModelValidationComponent::triggerValidation, Qt::QueuedConnection);
48 connect(ui->pb_Help, &QPushButton::released,
this, &CAircraftModelValidationComponent::showHelp,
49 Qt::QueuedConnection);
52 QPointer<CAircraftModelValidationComponent> myself(
this);
53 const qint64 lastResults = m_lastResults;
56 if (m_lastResults > lastResults) {
return; }
57 myself->requestLastResults();
72 constexpr std::chrono::seconds MsgTimeout { 15000 };
73 m_lastResults = QDateTime::currentMSecsSinceEpoch();
74 ui->tvp_InvalidModels->updateContainerMaybeAsync(invalid);
75 ui->comp_Simulator->setValue(simulator);
76 ui->comp_Messages->clear();
77 if (!msgs.
isEmpty()) { ui->comp_Messages->appendStatusMessagesToList(msgs); }
83 ui->tw_CAircraftModelValidationComponent->setCurrentWidget(ui->tb_Messages);
85 else { ui->tw_CAircraftModelValidationComponent->setCurrentWidget(ui->tb_InvalidModels); }
89 ui->pb_TempDisableInvalid->setEnabled(!invalid.
isEmpty());
90 ui->pb_TempDisableSelected->setEnabled(!invalid.
isEmpty());
91 ui->pb_RemoveInvalid->setEnabled(!invalid.
isEmpty());
92 ui->pb_RemoveSelected->setEnabled(!invalid.
isEmpty());
96 QStringLiteral(
"Validation for '%1' stopped, maybe your models are not accessible or too many issues")
98 QStringLiteral(
"Validated for '%1'. Valid: %2 Invalid: %3")
101 .arg(invalid.
size());
102 ui->lbl_Summay->setText(msg);
106 this->
showOverlayHTMLMessage(u
"There are warnings or errors, please check the messages and invalid models.",
109 else { this->
showOverlayHTMLMessage(u
"There are NO warnings or errors, your set looks good.", MsgTimeout); }
112 void CAircraftModelValidationComponent::tempDisableModels(
const CAircraftModelList &models)
114 if (models.
isEmpty()) {
return; }
118 this->saveInvalidModels(models);
121 void CAircraftModelValidationComponent::onCheckAtStartupChanged(
bool checked)
130 void CAircraftModelValidationComponent::onOnlyErrorWarningChanged(
bool checked)
139 void CAircraftModelValidationComponent::triggerValidation()
141 using namespace std::chrono_literals;
159 QStringLiteral(
"Cannot trigger validation for '%1'").arg(simulator.
toQString(
true)), 5s);
163 void CAircraftModelValidationComponent::requestLastResults()
165 using namespace std::chrono_literals;
177 void CAircraftModelValidationComponent::onTempDisabledButtonClicked()
179 using namespace std::chrono_literals;
184 const QObject *sender = QObject::sender();
185 if (sender == ui->pb_TempDisableInvalid) { disableModels = ui->tvp_InvalidModels->
container(); }
186 else if (sender == ui->pb_TempDisableSelected) { disableModels = ui->tvp_InvalidModels->selectedObjects(); }
191 this->tempDisableModels(disableModels);
196 void CAircraftModelValidationComponent::onRemoveButtonClicked()
198 using namespace std::chrono_literals;
204 const QObject *sender = QObject::sender();
205 if (sender == ui->pb_RemoveInvalid) { removeModels = ui->tvp_InvalidModels->
container(); }
206 else if (sender == ui->pb_RemoveSelected) { removeModels = ui->tvp_InvalidModels->selectedObjects(); }
211 const QMessageBox::StandardButton ret = QMessageBox::question(
212 this, tr(
"Model validation"),
213 tr(
"Do you really want to delete %1 models from model set?").arg(removeModels.
sizeInt()),
214 QMessageBox::Ok | QMessageBox::Cancel);
215 if (ret != QMessageBox::Ok) {
return; }
222 void CAircraftModelValidationComponent::showHelp()
228 void CAircraftModelValidationComponent::saveInvalidModels(
const CAircraftModelList &models)
const
bool isShuttingDown() const
Is application shutting down?
const context::IContextSimulator * getIContextSimulator() const
Direct access to contexts if a CCoreFacade has been initialized.
bool supportsContexts(bool ignoreShutdownTest=false) const
Supports contexts.
virtual void disableModelsForMatching(const swift::misc::simulation::CAircraftModelList &removedModels, bool incremental)=0
Remove a model for matching.
virtual bool isValidationInProgress() const =0
Validation in progress.
virtual int removeModelsFromSet(const swift::misc::simulation::CAircraftModelList &removeModels)=0
Remove models from set.
virtual bool triggerModelSetValidation(const swift::misc::simulation::CSimulatorInfo &simulator)=0
Trigger model set validation.
void showHelp(const QString &context={}) const
Show help page (online help)
bool showOverlayHTMLMessage(const QString &htmlMessage, std::chrono::milliseconds timeout=std::chrono::milliseconds(0))
HTML message.
Using this class provides a QFrame with the overlay functionality already integrated.
Handle validation result.
void validatedModelSet(const swift::misc::simulation::CSimulatorInfo &simulator, const swift::misc::simulation::CAircraftModelList &valid, const swift::misc::simulation::CAircraftModelList &invalid, bool stopped, const swift::misc::CStatusMessageList &msgs)
Validated a model set.
virtual ~CAircraftModelValidationComponent()
Destructor.
CStatusMessage setAndSave(const T &value, qint64 timestamp=0)
Write and save in the same step. Must be called from the thread in which the owner lives.
T get() const
Get a copy of the current value.
size_type size() const
Returns number of elements in the sequence.
bool isEmpty() const
Synonym for empty.
int sizeInt() const
Avoid compiler warnings when using with int.
Streamable status message, e.g.
Status messages, e.g. from Core -> GUI.
bool hasWarningOrErrorMessages() const
Warning or error messages.
const CONTAINER & container() const
Container.
QString toQString(bool i18n=false) const
Cast as QString.
bool onlyShowVerificationWarningsAndErrors() const
Verification only shown for warning/errors?
void setOnlyShowVerificationWarningsAndErrors(bool only)
Set the "show only errors" mode.
bool doVerificationAtStartup() const
Verification at startup?
void setVerificationAtStartup(bool verify)
Set startup verification.
Value object encapsulating a list of aircraft models.
CStatusMessage saveInvalidModels() const
Save/load invalid models.
Simple hardcoded info about the corresponding simulator.
SWIFT_GUI_EXPORT swift::gui::CGuiApplication * sGui
Single instance of GUI application object.
High level reusable GUI components.
Free functions in swift::misc.
auto singleShot(int msec, QObject *target, F &&task)
Starts a single-shot timer which will call a task in the thread of the given object when it times out...