Files
qt5-legatus-legacy/Lts/Tools/WlsRandomPositions/mainwindow.cpp
T
2026-08-13 18:33:10 +02:00

154 lines
5.7 KiB
C++
Executable File

/*
* @RDE_HEADER@
* MainWindow
* $Id$
* $HeadURL$
* $Author$
* Created by Hanna E. Rathje, SLTE, 2022-03-29
*/
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "position_helper.h"
#include "settings.h"
#include "worker.h"
#include <NGLLogger/NGLLoggerBootstrap.h>
#include <LtsCoordTrans/lts_coord_trans.h>
#include <LtsCoordTrans/lts_coord_widget.h>
namespace WlsRandomPositions
{
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, m_ui(new Ui::MainWindow)
, m_worker(new Worker(this))
, m_posHelper(nullptr)
, m_logger(NGL::NGLLoggerBootstrap::getNGLRootLogger().getNGLLogger("MainWindow"))
{
m_ui->setupUi(this);
const QMap<int, Settings::TrainingArea> trainingAreas = Settings::trainingAreas();
ERROR_LOG(m_logger) << "trainingArea size: " << trainingAreas.size();
for (const auto &item : trainingAreas)
{
DEBUG_LOG(m_logger) << "ta name: " << item.name << ", id: " << item.id;
m_ui->cbTrainingArea->addItem(item.name, QVariant::fromValue(item));
}
connect(m_worker, &Worker::connectionStateChanged, this, &MainWindow::onConnectionStateChanged);
connect(m_worker, &Worker::telegramsIncremented, this, &MainWindow::onTelegramsIncremented);
m_ui->sbAmountPlayers->setValue(Settings::amountPlayers());
m_ui->sbEquipNo->setValue(Settings::firstEquipNo());
m_ui->sbMsecs->setValue(Settings::msecs());
m_ui->sbJitter->setValue(Settings::jitter());
m_ui->leMacAddress->setInputMask(QStringLiteral("HH:HH:HH:HH:HH:HH"));
m_ui->leMacAddress->setText(Settings::firstMacAddress());
m_ui->leServerName->setText(Settings::serverName());
m_ui->sbServerPort->setValue(Settings::serverPort());
m_ui->sbHeightMin->setValue(Settings::heightMin());
m_ui->sbHeightMax->setValue(Settings::heightMax());
m_ui->sbMaxdistance->setValue(Settings::maxDistance());
m_statusLabelConnected = new QLabel(this);
m_statusLabelConnected->setText(tr("Disconnected"));
m_statusLabelSentTelegrams = new QLabel(this);
m_statusLabelSentTelegrams->setText(tr("0 telegrams"));
m_ui->statusbar->addWidget(m_statusLabelConnected, 50);
m_ui->statusbar->addWidget(m_statusLabelSentTelegrams, 100);
connect(m_ui->actionExit, &QAction::triggered, this, &MainWindow::close);
m_ui->buttonBox->getButton(LtsWidgets::DialogButton::Load)->setText(tr("Start"));
m_ui->buttonBox->connectButton(LtsWidgets::DialogButton::Load, this, &MainWindow::onStartClicked);
m_ui->buttonBox->getButton(LtsWidgets::DialogButton::Ok)->setText(tr("Stop"));
connect(m_ui->buttonBox->getButton(LtsWidgets::DialogButton::Ok), &QPushButton::clicked, this, &MainWindow::onStopClicked);
m_ui->buttonBox->getButton(LtsWidgets::DialogButton::Close)->hide();
m_ui->sbMaxdistance->setEnabled(false);
connect(m_ui->cbMaxDistance, &QCheckBox::toggled, m_ui->sbMaxdistance, &LtsWidgets::LtsDoubleSpinBox::setEnabled);
connect(m_ui->cbTrainingArea, QOverload<int>::of(&QComboBox::currentIndexChanged), this, &MainWindow::onTrainingAreaChanged);
onTrainingAreaChanged(m_ui->cbTrainingArea->currentIndex());
}
MainWindow::~MainWindow()
{
delete m_ui;
delete m_posHelper;
}
void MainWindow::onTrainingAreaChanged(int index)
{
Settings::TrainingArea ta = m_ui->cbTrainingArea->itemData(index).value<Settings::TrainingArea>();
LtsCoordTrans::UtmCoordinate bottomLeft = LtsCoordTrans::UtmCoordinate::fromMgrs(ta.bottomLeft);
LtsCoordTrans::getMgrsSquares(QRectF(bottomLeft.geographic(0, 0), bottomLeft.geographic(ta.width, ta.height)), true, true);
delete m_ui->peTopLeft;
m_ui->peTopLeft = new LtsCoordWidget::LtsCoordWidget(m_ui->centralwidget);
m_ui->peTopLeft->setObjectName(QString::fromUtf8("peTopLeft"));
m_ui->gridLayout->addWidget(m_ui->peTopLeft, 8, 1, 1, 3);
m_ui->peTopLeft->setCoordinate(bottomLeft.geographic(0, ta.height), true);
delete m_ui->peBottomRight;
m_ui->peBottomRight = new LtsCoordWidget::LtsCoordWidget(m_ui->centralwidget);
m_ui->peBottomRight->setObjectName(QString::fromUtf8("peButtomRight"));
m_ui->gridLayout->addWidget(m_ui->peBottomRight, 9, 1, 1, 3);
m_ui->peBottomRight->setCoordinate(bottomLeft.geographic(ta.width, 0), true);
}
void MainWindow::onStartClicked()
{
m_ui->buttonBox->getButton(LtsWidgets::DialogButton::Load)->setDisabled(true);
if (!m_posHelper)
m_posHelper = new PositionHelper(m_ui->peTopLeft->coordinate(), m_ui->peBottomRight->coordinate(), m_ui->sbHeightMin->value(), m_ui->sbHeightMax->value());
else
m_posHelper->set(m_ui->peTopLeft->coordinate(), m_ui->peBottomRight->coordinate(), m_ui->sbHeightMin->value(), m_ui->sbHeightMax->value());
m_worker->connectToServer(m_ui->leServerName->text(), m_ui->sbServerPort->value());
}
void MainWindow::onConnectionStateChanged(bool connected, const QString &status)
{
m_statusLabelConnected->setText(status);
if (!connected)
{
m_ui->buttonBox->getButton(LtsWidgets::DialogButton::Load)->setDisabled(false);
return;
}
QString macAddressStr = m_ui->leMacAddress->text();
macAddressStr.remove(QLatin1Char(':'));
bool ok;
qint64 macAddress = macAddressStr.toLongLong(&ok, 16);
DEBUG_LOG(m_logger) << "MacAdress: " << macAddressStr << ", numeric: " << macAddress << ", Okay? " << ok;
double maxDistance = 0;
if (m_ui->cbMaxDistance->isChecked())
maxDistance = m_ui->sbMaxdistance->value();
m_worker->start(m_ui->sbAmountPlayers->value(), m_ui->sbEquipNo->value(), macAddress, m_ui->sbMsecs->value(), m_ui->sbJitter->value(), maxDistance);
}
void MainWindow::onStopClicked()
{
m_ui->buttonBox->getButton(LtsWidgets::DialogButton::Load)->setDisabled(false);
m_worker->stop();
}
void MainWindow::onTelegramsIncremented(int sentTelegrams)
{
m_statusLabelSentTelegrams->setText(tr("%1 telegrams sent.").arg(sentTelegrams));
}
} // Namespace WlsRandomPositions}