Files
pilotclient/src/blackgui/components/settingsmatchingcomponent.cpp
Lars Toenning bcc4bdd31e Add SPDX identifiers for REUSE compliance
Co-authored-by: Mat Sutcliffe <oktal3700@gmail.com>
2023-10-03 09:29:49 +02:00

109 lines
3.7 KiB
C++

// SPDX-FileCopyrightText: Copyright (C) 2018 swift Project Community / Contributors
// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-swift-pilot-client-1
#include "settingsmatchingcomponent.h"
#include "ui_settingsmatchingcomponent.h"
#include "blackgui/guiapplication.h"
#include "blackcore/context/contextsimulator.h"
#include "blackmisc/simulation/aircraftmatchersetup.h"
#include "blackmisc/logmessage.h"
#include <QPointer>
using namespace BlackMisc;
using namespace BlackMisc::Simulation;
using namespace BlackCore::Context;
namespace BlackGui::Components
{
CSettingsMatchingComponent::CSettingsMatchingComponent(QWidget *parent) : QFrame(parent),
ui(new Ui::CSettingsMatchingComponent)
{
ui->setupUi(this);
connect(ui->pb_Save, &QPushButton::released, this, &CSettingsMatchingComponent::onSavePressed);
connect(ui->pb_Reload, &QPushButton::released, this, &CSettingsMatchingComponent::onReloadPressed);
connect(ui->pb_MatchingAgain, &QPushButton::released, this, &CSettingsMatchingComponent::onMatchingsAgainPressed);
// also used in mapping tool, must also work without contexts
IContextSimulator *simContext = simulatorContext();
if (simContext)
{
connect(simContext, &IContextSimulator::matchingSetupChanged, this, &CSettingsMatchingComponent::onSetupChanged, Qt::QueuedConnection);
this->deferredReload(5000);
}
else
{
this->showButtons(false);
}
}
CSettingsMatchingComponent::~CSettingsMatchingComponent()
{}
CAircraftMatcherSetup CSettingsMatchingComponent::getMatchingSetup() const
{
return ui->form_Matching->value();
}
void CSettingsMatchingComponent::setMatchingSetup(const CAircraftMatcherSetup &setup)
{
ui->form_Matching->setValue(setup);
}
void CSettingsMatchingComponent::showButtons(bool show)
{
ui->fr_Buttons->setVisible(show);
}
void CSettingsMatchingComponent::onSavePressed() const
{
IContextSimulator *simContext = simulatorContext();
if (!simContext) { return; }
const CAircraftMatcherSetup setup = ui->form_Matching->value();
simContext->setMatchingSetup(setup);
}
void CSettingsMatchingComponent::onReloadPressed()
{
this->deferredReload(0);
}
void CSettingsMatchingComponent::onMatchingsAgainPressed()
{
if (!sGui || !sGui->getISimulator() || !sGui->getISimulator()->isConnected()) { return; }
const int reMatchedNo = sGui->getIContextSimulator()->doMatchingsAgain();
CLogMessage(this).info(u"Triggered re-apping of %1 aircraft") << reMatchedNo;
}
void CSettingsMatchingComponent::onSetupChanged()
{
const IContextSimulator *simContext = simulatorContext();
if (!simContext) { return; }
this->deferredReload(0);
}
void CSettingsMatchingComponent::deferredReload(int deferMs)
{
IContextSimulator *simContext = simulatorContext();
if (!simContext) { return; }
if (deferMs < 1)
{
const CAircraftMatcherSetup setup = simContext->getMatchingSetup();
ui->form_Matching->setValue(setup);
}
else
{
QPointer<CSettingsMatchingComponent> myself(this);
QTimer::singleShot(deferMs, this, [=] {
if (!myself) { return; }
this->deferredReload(0);
});
}
}
IContextSimulator *CSettingsMatchingComponent::simulatorContext()
{
if (!sGui || sGui->isShuttingDown() || !sGui->getIContextSimulator()) { return nullptr; }
return sGui->getIContextSimulator();
}
} // ns