Files
qt5-legatus-legacy/Lts/Plugins/TargetManagement/Gui/ShootbackTargetConfiguration/tgt_area_edit.cpp
T
2026-08-13 18:33:10 +02:00

175 lines
4.4 KiB
C++
Executable File

/**
* @RDE_HEADER@
* TargetManagement - Target Edit Dialog
* $Id$
* $HeadURL$
* $Author$
* Created by Norbert Thoden, NLE, 2020-05-29
*/
#include "tgt_area_edit.h"
#include "tgt_area_model.h"
#include "ui_tgt_area_edit.h"
#include <LtsUtilsSettings/settings.h>
namespace TargetManagement
{
AreaEdit::AreaEdit(QWidget *parent)
: LtsWidgets::LtsDialog(parent, LtsWidgets::ButtonCombination::OkApplyCancel)
, m_requestHelper(new LtsUtils::RequestHelper(this))
, m_ui(new Ui::AreaEdit)
, m_logger(getLogger("AreaEdit"))
{
m_ui->setupUi(this);
m_ui->sbWidth->setMinimum(s_minWidth);
m_ui->sbWidth->setMaximum(s_maxWidth);
m_ui->sbWidth->setSingleStep(s_stepWidth);
m_ui->sbHeight->setMinimum(s_minHeight);
m_ui->sbHeight->setMaximum(s_maxHeight);
m_ui->sbHeight->setSingleStep(s_stepHeight);
}
//-----------------------------------------------------------------------------
AreaEdit::~AreaEdit()
{
delete m_ui;
}
//-----------------------------------------------------------------------------
void AreaEdit::retranslate()
{
translate(m_ui, m_area, tr("ShootbackArea"));
}
bool AreaEdit::init(const std::shared_ptr<TargetManagement::Interface::Dtc> &dtc,
const std::shared_ptr<TargetManagement::Interface::Ftc> &ftc,
const std::shared_ptr<SituationMap::ForeignGuiInterface> &sitMapGuiIfc,
AreaModel *areaModel,
const ShootbackArea &area)
{
DEBUG_LOG(m_logger) << "AreaEdit::init()";
if (!dtc || !ftc || !sitMapGuiIfc)
{
ERROR_LOG(m_logger) << "AreaEdit::init() Invalid shared_ptr!";
return false;
}
m_dtc = dtc;
m_ftc = ftc;
m_sitMapGuiIfc = sitMapGuiIfc;
m_areaModel = areaModel;
setData(area);
if (m_sitMapGuiIfc)
connect(m_ui->pbPosition, &QPushButton::clicked, this, &AreaEdit::getPosition);
else
m_ui->pbPosition->setEnabled(false);
connect(m_ui->pbClear, &QPushButton::clicked,
m_ui->positionEdit, &LtsCoordWidget::LtsCoordWidget::clear);
setOnlineHelpFilename(QStringLiteral("Situation-Targets"));
// if (m_area.id() <= 0)
// slotChangesMade();
enaDisa();
return true;
}
void AreaEdit::enaDisa()
{
m_ui->pbPosition->setEnabled(m_sitMapGuiIfc.get());
}
//slots
bool AreaEdit::apply()
{
m_area.name(m_ui->leName->text().toStdString());
const QPointF &coord = m_ui->positionEdit->coordinate();
m_area.position({coord.x(), coord.y()});
m_area.width(m_ui->sbWidth->value());
m_area.height(m_ui->sbHeight->value());
m_requestHelper->addRequest([this]()
{
return m_ftc->shootbackAreaModifyRequest(m_area, this);
});
return m_requestHelper->startRequests();
}
void AreaEdit::getPosition()
{
if (!has2DMap())
return;
m_sitMapGuiIfc->getRectangleNorth(this,
SLOT(onRectData(QPointF,double,double,QPolygonF)),
nullptr,
s_minWidth,
s_maxWidth,
s_minHeight,
s_maxHeight,
m_ui->positionEdit->coordinate(),
m_ui->sbWidth->value(),
m_ui->sbHeight->value());
}
void AreaEdit::onRectData(const QPointF &centerPoint, double width, double height, const QPolygonF &coordinates)
{
m_previewPolygon = coordinates;
m_ui->positionEdit->setCoordinate(centerPoint);
m_ui->sbWidth->setValue(width);
m_ui->sbHeight->setValue(height);
DEBUG_LOG(m_logger) << "Pos X: " << centerPoint.x() << " Y: " << centerPoint.y() << " W: " << width << " H: " << height;
showPreviewObject();
}
//private
bool AreaEdit::has2DMap()
{
if (!m_sitMapGuiIfc)
return false;
if (m_sitMapGuiIfc->mapMode() != SituationMap::MapMode::MapMode_2D)
{
LtsWidgets::LtsMessageDialog::showMessage(this, tr("Only available in 2D mode"));
return false;
}
return true;
}
void AreaEdit::showPreviewObject()
{
if (!m_sitMapGuiIfc)
return;
if (m_previewPolygon.isEmpty())
return;
m_sitMapGuiIfc->displayPreviewObject(this, m_previewPolygon, true);
}
void AreaEdit::setData(const ShootbackArea &area)
{
m_area = area;
if (m_area.id() > 0)
{
m_ui->leName->setText(QString::fromStdString(m_area.name()));
m_ui->positionEdit->setCoordinate(m_area.position().lon(), m_area.position().lat());
m_ui->sbWidth->setValue(m_area.width());
m_ui->sbHeight->setValue(m_area.height());
}
}
}