| 40 | } |
| 41 | |
| 42 | PositioningWidget::PositioningWidget(QWidget *parent) |
| 43 | : QWidget(parent) |
| 44 | , ui(new Ui::PositioningWidget) |
| 45 | , m_mapController(new MapController(this)) |
| 46 | , m_replaySource(nullptr) |
| 47 | , m_updateLock(false) |
| 48 | { |
| 49 | ui->setupUi(this); |
| 50 | auto mapView = new QQuickWidget; |
| 51 | mapView->rootContext()->setContextProperty(QStringLiteral("_controller"), m_mapController); |
| 52 | ui->topLayout->addWidget(mapView); |
| 53 | |
| 54 | ObjectBroker::registerClientObjectFactoryCallback<PositioningInterface *>(createPositioningClient); |
| 55 | |
| 56 | m_interface = ObjectBroker::object<PositioningInterface *>(); |
| 57 | Q_ASSERT(m_interface); |
| 58 | connect(m_interface, &PositioningInterface::positionInfoChanged, this, [this]() { |
| 59 | m_mapController->setSourceCoordinate(m_interface->positionInfo().coordinate()); |
| 60 | m_mapController->setSourceDirection(m_interface->positionInfo().attribute(QGeoPositionInfo::Direction)); |
| 61 | m_mapController->setSourceHorizontalAccuracy(m_interface->positionInfo().attribute(QGeoPositionInfo::HorizontalAccuracy)); |
| 62 | if (ui->overrideBox->isChecked()) |
| 63 | return; |
| 64 | setUiToPosition(m_interface->positionInfo()); |
| 65 | }); |
| 66 | |
| 67 | connect(ui->overrideBox, &QCheckBox::toggled, this, [this](bool enabled) { |
| 68 | if (enabled && m_interface->positionInfoOverride().isValid()) { |
| 69 | setUiToPosition(m_interface->positionInfoOverride()); |
| 70 | } else if (!enabled && m_interface->positionInfo().isValid()) { |
| 71 | setUiToPosition(m_interface->positionInfo()); |
| 72 | } |
| 73 | updateWidgetState(); |
| 74 | updatePosition(); |
| 75 | }); |
| 76 | connect(ui->latitude, QOverload<double>::of(&QDoubleSpinBox::valueChanged), this, &PositioningWidget::updatePosition); |
| 77 | connect(ui->longitude, QOverload<double>::of(&QDoubleSpinBox::valueChanged), this, &PositioningWidget::updatePosition); |
| 78 | connect(ui->horizontalSpeed, QOverload<double>::of(&QDoubleSpinBox::valueChanged), this, &PositioningWidget::updatePosition); |
| 79 | connect(ui->horizontalAccuracy, QOverload<int>::of(&QSpinBox::valueChanged), this, &PositioningWidget::updatePosition); |
| 80 | connect(ui->altitude, QOverload<int>::of(&QSpinBox::valueChanged), this, &PositioningWidget::updatePosition); |
| 81 | connect(ui->verticalSpeed, QOverload<double>::of(&QDoubleSpinBox::valueChanged), this, &PositioningWidget::updatePosition); |
| 82 | connect(ui->verticalAccuracy, QOverload<int>::of(&QSpinBox::valueChanged), this, &PositioningWidget::updatePosition); |
| 83 | connect(ui->direction, QOverload<int>::of(&QSpinBox::valueChanged), this, &PositioningWidget::updatePosition); |
| 84 | connect(ui->magneticVariation, QOverload<int>::of(&QSpinBox::valueChanged), this, &PositioningWidget::updatePosition); |
| 85 | connect(ui->timestamp, &QDateTimeEdit::dateTimeChanged, this, &PositioningWidget::updatePosition); |
| 86 | |
| 87 | connect(m_mapController, &MapController::overrideCoordinateChanged, this, [this]() { |
| 88 | if (m_updateLock) |
| 89 | return; |
| 90 | m_updateLock = true; |
| 91 | ui->latitude->setValue(m_mapController->overrideCoordinate().latitude()); |
| 92 | ui->longitude->setValue(m_mapController->overrideCoordinate().longitude()); |
| 93 | ui->timestamp->setDateTime(QDateTime::currentDateTime()); |
| 94 | m_updateLock = false; |
| 95 | updatePosition(); |
| 96 | }); |
| 97 | connect(m_mapController, &MapController::overrideDirectionChanged, this, [this]() { |
| 98 | if (m_updateLock) |
| 99 | return; |
nothing calls this directly
no test coverage detected