diff --git a/src/MissionItem.cc b/src/MissionItem.cc index 9a9a059bfa1b4bd505ba82b34d75364832ea8f87..febbfed487d509794362dac8d0132b3f9b657162 100644 --- a/src/MissionItem.cc +++ b/src/MissionItem.cc @@ -158,6 +158,11 @@ MissionItem::MissionItem(QObject* parent, connect(_param1Fact, &Fact::valueChanged, this, &MissionItem::_factValueChanged); connect(_param2Fact, &Fact::valueChanged, this, &MissionItem::_factValueChanged); connect(_altitudeRelativeToHomeFact, &Fact::valueChanged, this, &MissionItem::_factValueChanged); + + // Connect valueChanged signals so we can output coordinateChanged signal + connect(_latitudeFact, &Fact::valueChanged, this, &MissionItem::_coordinateFactChanged); + connect(_longitudeFact, &Fact::valueChanged, this, &MissionItem::_coordinateFactChanged); + connect(_altitudeFact, &Fact::valueChanged, this, &MissionItem::_coordinateFactChanged); } MissionItem::MissionItem(const MissionItem& other, QObject* parent) @@ -182,6 +187,21 @@ MissionItem::MissionItem(const MissionItem& other, QObject* parent) _jumpSequenceMetaData = new FactMetaData(this); _jumpRepeatMetaData = new FactMetaData(this); + // Connect to valueChanged to track dirty state + connect(_latitudeFact, &Fact::valueChanged, this, &MissionItem::_factValueChanged); + connect(_longitudeFact, &Fact::valueChanged, this, &MissionItem::_factValueChanged); + connect(_altitudeFact, &Fact::valueChanged, this, &MissionItem::_factValueChanged); + connect(_yawRadiansFact, &Fact::valueChanged, this, &MissionItem::_factValueChanged); + connect(_loiterOrbitRadiusFact, &Fact::valueChanged, this, &MissionItem::_factValueChanged); + connect(_param1Fact, &Fact::valueChanged, this, &MissionItem::_factValueChanged); + connect(_param2Fact, &Fact::valueChanged, this, &MissionItem::_factValueChanged); + connect(_altitudeRelativeToHomeFact, &Fact::valueChanged, this, &MissionItem::_factValueChanged); + + // Connect valueChanged signals so we can output coordinateChanged signal + connect(_latitudeFact, &Fact::valueChanged, this, &MissionItem::_coordinateFactChanged); + connect(_longitudeFact, &Fact::valueChanged, this, &MissionItem::_coordinateFactChanged); + connect(_altitudeFact, &Fact::valueChanged, this, &MissionItem::_coordinateFactChanged); + *this = other; } @@ -752,7 +772,6 @@ void MissionItem::setYawRadians(double yaw) if (yawRadians() != yaw) { _yawRadiansFact->setValue(yaw); - emit yawChanged(yaw); emit changed(this); emit valueStringsChanged(valueStrings()); } @@ -813,6 +832,8 @@ bool MissionItem::canEdit(void) void MissionItem::setDirty(bool dirty) { _dirty = dirty; + // We want to emit dirtyChanged even if _dirty didn't change. This can be handy signal for + // any value within the item changing. emit dirtyChanged(_dirty); } @@ -821,3 +842,9 @@ void MissionItem::_factValueChanged(QVariant value) Q_UNUSED(value); setDirty(true); } + +void MissionItem::_coordinateFactChanged(QVariant value) +{ + Q_UNUSED(value); + emit coordinateChanged(coordinate()); +} diff --git a/src/MissionItem.h b/src/MissionItem.h index 5b350318ec07d2f378479218465a442ecfdee274..514816f6195b3748d26e7c16f3357e85808f4bdc 100644 --- a/src/MissionItem.h +++ b/src/MissionItem.h @@ -68,7 +68,6 @@ public: Q_PROPERTY(bool isCurrentItem READ isCurrentItem WRITE setIsCurrentItem NOTIFY isCurrentItemChanged) Q_PROPERTY(bool specifiesCoordinate READ specifiesCoordinate NOTIFY commandChanged) Q_PROPERTY(QGeoCoordinate coordinate READ coordinate WRITE setCoordinate NOTIFY coordinateChanged) - Q_PROPERTY(double yaw READ yawDegrees WRITE setYawDegrees NOTIFY yawChanged) Q_PROPERTY(QStringList commandNames READ commandNames CONSTANT) Q_PROPERTY(QString commandName READ commandName NOTIFY commandChanged) Q_PROPERTY(QStringList valueLabels READ valueLabels NOTIFY commandChanged) @@ -189,7 +188,6 @@ signals: void sequenceNumberChanged(int sequenceNumber); void isCurrentItemChanged(bool isCurrentItem); void coordinateChanged(const QGeoCoordinate& coordinate); - void yawChanged(double yaw); void dirtyChanged(bool dirty); /** @brief Announces a change to the waypoint data */ @@ -229,6 +227,7 @@ public: private slots: void _factValueChanged(QVariant value); + void _coordinateFactChanged(QVariant value); private: QString _oneDecimalString(double value);