diff --git a/src/core/trackingmodel.cpp b/src/core/trackingmodel.cpp index cf1f0b7320..e2980a5c9e 100644 --- a/src/core/trackingmodel.cpp +++ b/src/core/trackingmodel.cpp @@ -283,8 +283,17 @@ void TrackingModel::createProjectTrackers( QgsProject *project ) mTrackers.append( tracker ); endInsertRows(); - startTracker( vl ); + requestTrackingSettings( vl, true ); } } } } + +void TrackingModel::requestTrackingSettings( QgsVectorLayer *layer, bool skipSettings ) +{ + Tracker *tracker = trackerForLayer( layer ); + if ( tracker ) + { + emit trackingSettingsRequested( index( mTrackers.indexOf( tracker ), 0 ), skipSettings ); + } +} diff --git a/src/core/trackingmodel.h b/src/core/trackingmodel.h index c268a72a36..0fddc0d573 100644 --- a/src/core/trackingmodel.h +++ b/src/core/trackingmodel.h @@ -77,9 +77,14 @@ class TrackingModel : public QAbstractItemModel void reset(); + Q_INVOKABLE void requestTrackingSettings( QgsVectorLayer *layer, bool skipSettings = false ); + signals: + void layerInTrackingChanged( QgsVectorLayer *layer, bool tracking ); + void trackingSettingsRequested( QModelIndex trackerIndex, bool skipSettings ); + private: QList mTrackers; QList::const_iterator trackerIterator( QgsVectorLayer *layer ) diff --git a/src/qml/LayerTreeItemProperties.qml b/src/qml/LayerTreeItemProperties.qml index 9aec16ab76..c5e0787dc7 100644 --- a/src/qml/LayerTreeItemProperties.qml +++ b/src/qml/LayerTreeItemProperties.qml @@ -319,9 +319,7 @@ Popup { tracker.conjunction = positioningSettings.trackerMeetAllConstraints tracker.measureType = positioningSettings.trackerMeasureType } - trackerSettings.tracker = tracker - trackerSettings.open() - trackerSettings.focus = true + trackingModel.requestTrackingSettings(layer) } } } diff --git a/src/qml/TrackerSettings.qml b/src/qml/TrackerSettings.qml index 588f68de46..392dbef08c 100644 --- a/src/qml/TrackerSettings.qml +++ b/src/qml/TrackerSettings.qml @@ -21,6 +21,31 @@ Popup { closePolicy: Popup.CloseOnEscape property var tracker: undefined + + Connections { + target: trackingModel + + function onTrackingSettingsRequested(trackerIndex, skipSettings) { + tracker = trackings.itemAt(trackerIndex.row).tracker + if (!skipSettings) { + trackerSettings.open() + trackerSettings.focus = true + } else { + featureModel.resetAttributes() + tracker.feature = featureModel.feature + if (embeddedAttributeFormModel.rowCount() > 0 && !featureModel.suppressFeatureForm()) { + embeddedFeatureForm.active = true + } else { + trackingModel.startTracker(tracker.vectorLayer) + displayToast(qsTr('Track on layer %1 started').arg(tracker.vectorLayer.name)) + if (featureModel.currentLayer.geometryType === Qgis.GeometryType.Point) { + projectInfo.saveTracker(featureModel.currentLayer) + } + } + } + } + } + onTrackerChanged: { if (tracker != undefined) { featureModel.currentLayer = tracker.vectorLayer