/* * @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 #include #include 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 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::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(); 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}