154 lines
5.7 KiB
C++
Executable File
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}
|