Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Snapping settings cleanup & geometry type-driven activation #5988

Merged
merged 2 commits into from
Feb 8, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions src/qml/QFieldSettings.qml
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,10 @@ Page {
property alias enableInfoCollection: registry.enableInfoCollection
property alias enableMapRotation: registry.enableMapRotation
property alias quality: registry.quality
property alias snapToCommonAngleIsEnabled: registry.snapToCommonAngleIsEnabled
property alias snapToCommonAngleIsRelative: registry.snapToCommonAngleIsRelative
property alias snapToCommonAngleDegrees: registry.snapToCommonAngleDegrees
property alias snapToCommonAngleTolerance: registry.snapToCommonAngleTolerance

visible: false
focus: visible
Expand Down Expand Up @@ -57,6 +61,11 @@ Page {
property bool enableMapRotation: true
property double quality: 1.0

property bool snapToCommonAngleIsEnabled: false
property bool snapToCommonAngleIsRelative: true
property double snapToCommonAngleDegrees: 45.0// = settings.valueInt("/QField/Digitizing/SnapToCommonAngleDegrees", 45);
property int snapToCommonAngleTolerance: 1// = settings.valueInt("/QField/Digitizing/SnappingTolerance", 1);

onEnableInfoCollectionChanged: {
if (enableInfoCollection) {
iface.initiateSentry();
Expand Down
44 changes: 19 additions & 25 deletions src/qml/qgismobileapp.qml
Original file line number Diff line number Diff line change
Expand Up @@ -912,6 +912,11 @@ ApplicationWindow {
averagedPosition: positionSource.averagedPosition
averagedPositionCount: positionSource.averagedPositionCount
overrideLocation: positionLocked ? positionSource.projectedPosition : undefined

snapToCommonAngles: qfieldSettings.snapToCommonAngleIsEnabled && (dashBoard.activeLayer.geometryType() === Qgis.GeometryType.Polygon || dashBoard.activeLayer.geometryType() === Qgis.GeometryType.Line)
snappingIsRelative: qfieldSettings.snapToCommonAngleIsRelative
snappingAngleDegrees: qfieldSettings.snapToCommonAngleDegrees
snappingTolerance: qfieldSettings.snapToCommonAngleTolerance
}

/* Location marker reflecting the current GNSS position */
Expand Down Expand Up @@ -1678,7 +1683,7 @@ ApplicationWindow {
iconColor: Theme.toolButtonColor
bgcolor: Theme.toolButtonBackgroundSemiOpaqueColor

state: coordinateLocator.snapToCommonAngles ? "On" : "Off"
state: qfieldSettings.snapToCommonAngleIsEnabled ? "On" : "Off"

states: [
State {
Expand All @@ -1700,22 +1705,14 @@ ApplicationWindow {
]

onClicked: {
coordinateLocator.snapToCommonAngles = !coordinateLocator.snapToCommonAngles;
settings.setValue("/QField/Digitizing/SnapToCommonAngleIsEnabled", coordinateLocator.snapToCommonAngles);
displayToast(coordinateLocator.snapToCommonAngles ? qsTr("Snap to %1° angle turned on").arg(coordinateLocator.snappingAngleDegrees) : qsTr("Snap to common angle turned off"));
qfieldSettings.snapToCommonAngleIsEnabled = !qfieldSettings.snapToCommonAngleIsEnabled;
displayToast(qfieldSettings.snapToCommonAngleIsEnabled ? qsTr("Snap to %1° angle turned on").arg(qfieldSettings.snapToCommonAngleDegrees) : qsTr("Snap to common angle turned off"));
}

onPressAndHold: {
snapToCommonAngleMenu.popup(parent.x, parent.y);
}

Component.onCompleted: {
coordinateLocator.snapToCommonAngles = settings.valueBool("/QField/Digitizing/SnapToCommonAngleIsEnabled", false);
coordinateLocator.snappingIsRelative = settings.valueBool("/QField/Digitizing/SnapToCommonAngleIsRelative", true);
coordinateLocator.snappingAngleDegrees = settings.valueInt("/QField/Digitizing/SnapToCommonAngleDegrees", 45);
coordinateLocator.snappingTolerance = settings.valueInt("/QField/Digitizing/SnappingTolerance", 1);
}

Menu {
id: snapToCommonAngleMenu
width: Theme.menuItemIconlessLeftPadding + Math.max(angles.count * 35, tolorences.count * 55) + 24
Expand All @@ -1727,11 +1724,10 @@ ApplicationWindow {
leftPadding: Theme.menuItemCheckLeftPadding

checkable: true
checked: coordinateLocator.snappingIsRelative
checked: qfieldSettings.snapToCommonAngleIsRelative

onTriggered: {
coordinateLocator.snappingIsRelative = checked;
settings.setValue("/QField/Digitizing/SnapToCommonAngleIsRelative", coordinateLocator.snappingIsRelative);
qfieldSettings.snapToCommonAngleIsRelative = !qfieldSettings.snapToCommonAngleIsRelative;
}
}

Expand Down Expand Up @@ -1762,7 +1758,7 @@ ApplicationWindow {
spacing: 3
orientation: ListView.Horizontal
model: [10, 15, 30, 45, 90]
currentIndex: Math.max(model.findIndex(q => q === coordinateLocator.snappingAngleDegrees), 0)
currentIndex: Math.max(model.findIndex(q => q === qfieldSettings.snapToCommonAngleDegrees), 0)
highlightFollowsCurrentItem: true

highlight: Rectangle {
Expand All @@ -1777,7 +1773,7 @@ ApplicationWindow {
height: width
enabled: !selected

property bool selected: modelData === coordinateLocator.snappingAngleDegrees
property bool selected: modelData === qfieldSettings.snapToCommonAngleDegrees

Text {
text: qsTr("%1°").arg(modelData)
Expand All @@ -1803,9 +1799,8 @@ ApplicationWindow {
if (parent.selected) {
return;
}
coordinateLocator.snapToCommonAngles = true;
coordinateLocator.snappingAngleDegrees = modelData;
settings.setValue("/QField/Digitizing/SnapToCommonAngleDegrees", coordinateLocator.snappingAngleDegrees);
qfieldSettings.snapToCommonAngleIsEnabled = true;
qfieldSettings.snapToCommonAngleDegrees = modelData;
displayToast(qsTr("Snap to %1° angle turned on").arg(modelData));
}
}
Expand Down Expand Up @@ -1846,15 +1841,15 @@ ApplicationWindow {
color: Theme.mainColor
radius: 4
}
currentIndex: coordinateLocator.snappingTolerance
currentIndex: qfieldSettings.snapToCommonAngleTolerance
highlightFollowsCurrentItem: true
delegate: Item {
id: tolorenceDelegate
width: (angles.contentWidth) / 3
height: 35
enabled: !selected

property bool selected: index === coordinateLocator.snappingTolerance
property bool selected: index === qfieldSettings.snapToCommonAngleTolerance

Text {
id: tolorenceText
Expand Down Expand Up @@ -1884,10 +1879,9 @@ ApplicationWindow {
if (parent.selected) {
return;
}
coordinateLocator.snapToCommonAngles = true;
coordinateLocator.snappingTolerance = index;
settings.setValue("/QField/Digitizing/SnappingTolerance", coordinateLocator.snappingTolerance);
displayToast(qsTr("Snapping tolerance setted to %1").arg(modelData));
qfieldSettings.snapToCommonAngleIsEnabled = true;
qfieldSettings.snapToCommonAngleTolerance = index;
displayToast(qsTr("Snapping tolerance set to %1").arg(modelData));
}
}
}
Expand Down
Loading