Mergin Maps mobile app is a QGIS powered app for Android and iOS devices.
",
"license": "GPLv3",
"title": "Mergin Maps mobile app",
- "version": "2024.5.0",
+ "version": "2024.5.1",
"upload_type": "software",
"publication_date": "2022-02-24",
"creators": [
@@ -39,7 +39,7 @@
"related_identifiers": [
{
"scheme": "url",
- "identifier": "https://github.com/MerginMaps/mobile/tree/2024.5.0",
+ "identifier": "https://github.com/MerginMaps/mobile/tree/2024.5.1",
"relation": "isSupplementTo"
},
{
diff --git a/CITATION.cff b/CITATION.cff
index 8b1d6266b..5819d1869 100644
--- a/CITATION.cff
+++ b/CITATION.cff
@@ -1,4 +1,4 @@
-cff-version: 2024.5.0
+cff-version: 2024.5.1
message: "If you use this software, please cite it as below."
authors:
- family-names: "Martin"
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 8a883047c..abeb14fe3 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -7,7 +7,7 @@ cmake_minimum_required(VERSION 3.22)
# TODO automatically change with the scripts/update version script
set(MM_VERSION_MAJOR "2024")
set(MM_VERSION_MINOR "5")
-set(MM_VERSION_PATCH "0")
+set(MM_VERSION_PATCH "1")
set(QT_VERSION_DEFAULT "6.6.3")
# Note: we cannot set this for non-android build, since CMake will start looking for
diff --git a/app/CMakeLists.txt b/app/CMakeLists.txt
index b96c77c27..cf9201375 100644
--- a/app/CMakeLists.txt
+++ b/app/CMakeLists.txt
@@ -27,6 +27,7 @@ set(MM_SRCS
maptools/abstractmaptool.cpp
maptools/recordingmaptool.cpp
maptools/splittingmaptool.cpp
+ maptools/measurementmaptool.cpp
ios/iosimagepicker.cpp
ios/iosutils.cpp
position/providers/abstractpositionprovider.cpp
@@ -109,6 +110,7 @@ set(MM_HDRS
maptools/abstractmaptool.h
maptools/recordingmaptool.h
maptools/splittingmaptool.h
+ maptools/measurementmaptool.h
ios/iosimagepicker.h
ios/iosutils.h
position/providers/abstractpositionprovider.h
diff --git a/app/i18n/input_de.qm b/app/i18n/input_de.qm
index 155bb4b43..0e21377b3 100644
Binary files a/app/i18n/input_de.qm and b/app/i18n/input_de.qm differ
diff --git a/app/i18n/input_de.ts b/app/i18n/input_de.ts
index 9742ce1b6..5cf3b404f 100644
--- a/app/i18n/input_de.ts
+++ b/app/i18n/input_de.ts
@@ -25,7 +25,7 @@
- Dem Layer ist ein ungültiges Koordinatenreferenzsystem zugewiesen. Aufnahme und Speicher Funktionen verhalten sich undefiniert.
+ Dem Layer ist ein ungültiges Koordinatenreferenzsystem zugewiesen. Aufnahme- und Speicherfunktionen verhalten sich undefiniert!
@@ -33,23 +33,23 @@
- Intern (fused)
+ Intern (fusioniert)
- Intern (gps)
+ Intern (GPS)
- Keine Standortberechtigungen
+ Keine Standortberechtigungen
- Fused Standort ist nicht verfügbar
+ Fusionierter Standort ist nicht verfügbar
@@ -64,27 +64,27 @@
- Es ist eine Fehler aufgetreten und Tracking konnte nicht gestartet werden, kontaktieren Sie den Support
+ Es ist ein Fehler aufgetreten und das Tracking konnte nicht gestartet werden. Kontaktieren Sie bitte den Support.
- Ihr Gerät unterstützt kein Tracking. Mindestanforderung ist Android 8.0
+ Ihr Gerät unterstützt kein Tracking - erst ab Android 8.0.
- Bitte aktivieren Sie die Berechtigung zur Standortbestimmung, bevor Sie das Tracking starten
+ Bitte aktivieren Sie die Berechtigung zur Standortbestimmung, bevor Sie das Tracking starten.
- Bitte aktivieren Sie die Standortbestimmung ihres Gerätes, bevor Sie das Tracking starten
+ Bitte aktivieren Sie die Standortbestimmung ihres Gerätes, bevor Sie das Tracking starten.
- Aktivieren Sie Benachrichtigungen, um den Tracking-Status im Benachrichtigungsfeld zu sehen.
+ Aktivieren Sie *Benachrichtigungen*, um den Tracking-Status im Benachrichtigungsfeld zu sehen.
@@ -92,22 +92,22 @@
- Die Speicherberechtigung wurde dauerhaft verweigert. Erlauben Sie dies in den Einstellungen, um Bilder aus der Galerie zu laden
+ Die Speicherberechtigung wurde dauerhaft verweigert. Geben Sie diese in den Einstellungen, um Bilder aus der Galerie laden zu können.
- Mergin Maps benötigt Speicherberechtigung um Bilder aus der Gallerie zu laden
+ Mergin Maps benötigt Speicherberechtigung, um Bilder aus der Gallerie zu laden.
- Keine Kameraerlaubnis erteilt, bitte in Einstellungen genehmigen
+ Keine Kameraerlaubnis erteilt, bitte in den Einstellungen genehmigen.
- Wir benötigen eine Kameraerlaubnis, um ein Foto zu machen
+ Wir benötigen eine Kameraerlaubnis, um ein Foto zu machen.
@@ -127,17 +127,17 @@
- Keine Verbindung, Verbindungsaufbau wird wiederholt in (%1)
+ Keine Verbindung. Der Verbindungsaufbau wird in (%1) wiederholt.
- Bluetooth Berechtigung deaktiviert
+ Bluetooth-Berechtigung deaktiviert
- Die Verbindung zum Gerät konnte nicht hergestellt werden, da es nicht gepaart ist.
+ Die Verbindung zum Gerät konnte nicht hergestellt werden, da es nicht gekoppelt ist.
@@ -154,7 +154,7 @@
FeaturesModel
-
+ Unbekannter Titel
@@ -164,7 +164,7 @@
- Vor dem Hinzufügen eines neuen Feldes bitte den Namen des vorhergehenden Feldes eingeben
+ Vor dem Hinzufügen eines neuen Feldes bitte den Namen des vorhergehenden Feldes eingeben.
@@ -184,12 +184,12 @@ Wird dem Projekt nicht hinzugefügt.
- Erforderliche PROJ Datum-Shift-Grids fehlen: %1. Für das zuletzt heruntergeladene Projekt bitte Mergin Maps-Neustart durchführen.
+ Erforderliches PROJ Datum-Shift-Grid fehlt: %1. Für das zuletzt heruntergeladene Projekt bitte einen Mergin Maps-Neustart durchführen.
- Fehler bei benutzerdefinierter PROJ Operation. Für das zuletzt heruntergeladene Projekt bitte Mergin Maps-Neustart durchführen.
+ Fehler bei benutzerdefinierter PROJ-Operation. Für das zuletzt heruntergeladene Projekt bitte einen Mergin Maps-Neustart durchführen.
@@ -200,119 +200,119 @@ Wird dem Projekt nicht hinzugefügt.
InputUtils
-
+ gerade jetzt
-
+ vor %1 Minuten
-
+ vor %1 Minute
-
+ vor %1 Stunden
-
+ vor %1 Stunde
-
-
+
+ vor %1 Tagen
-
-
+
+ vor %1 Tag
-
+ vor %1 Wochen
-
+ vor %1 Woche
-
+ vor %1 Monaten
-
+ vor %1 Monat
-
+ vor %1 Jahren
-
+ vor %1 Jahr
-
+ Bildschirmauflösung: %1x%2 px
-
+
- Bildschirm DPI: %1x%2
+ Bildschirm-DPI: %1x%2
-
+ Bildschirmgröße: %1x%2 mm
-
+ Gemeldetes Gerätepixelverhältnis: %1
-
+ Berechnetes Gerätepixelverhältnis: %1
-
+ verwendete DP-Skala: %1
-
+ Sie müssen mindestens %1 Punkt(e) zu jedem Teil hinzufügen.
-
+ Sie müssen mindestens %1 Punkt(e) hinzufügen.
@@ -336,17 +336,17 @@ Wird dem Projekt nicht hinzugefügt.
- Download fehlgeschlagen, Datei entfernen und erneut versuchen
+ Download fehlgeschlagen. Datei entfernen und erneut versuchen.
- Mehrere QGIS Projektdateien gefunden
+ Mehrere QGIS-Projektdateien gefunden
- Es konnte keine QGIS Projektdatei gefunden werden.
+ Es konnte keine QGIS-Projektdatei gefunden werden.
@@ -359,7 +359,7 @@ Wird dem Projekt nicht hinzugefügt.
- Wir bringen die Vorteile von Open Source GIS ohne Kompromisse in Unternehmen
+ Wir bringen die Vorteile von Open Source-GIS ohne Kompromisse in Unternehmen.
@@ -377,7 +377,7 @@ Wird dem Projekt nicht hinzugefügt.
- Sie haben eine ausstehende Einladung zu einem Arbeitsbereich<br> Bitte %1akzeptieren oder ablehnen%2.
+ Sie haben eine ausstehende Einladung zu einem Arbeitsbereich<br>. Bitte %1akzeptieren oder ablehnen%2.
@@ -385,12 +385,12 @@ Wird dem Projekt nicht hinzugefügt.
- Sie wurden zu einem Arbeitsbereich eingeladen
+ Sie wurden zu einem Arbeitsbereich eingeladen.
- Treten Sie dem Arbeitsbereich bei und entdecken Sie gemeinsam
+ Treten Sie dem Arbeitsbereich bei und nehmen Sie gemeinsam auf!
@@ -423,7 +423,7 @@ Wird dem Projekt nicht hinzugefügt.
- Ich stimme den %1Allgemeinen Geschäftsbedingungen%3 und der %2Datenschutzerklärung%3 von Mergin zu.
+ Ich stimme den %1Allgemeinen Geschäftsbedingungen%3 und der %2Datenschutzerklärung%3 zu.
@@ -484,7 +484,7 @@ Wird dem Projekt nicht hinzugefügt.
- Sie müssen Bluetooth aktivieren, um den neuen GPS-Empfänger zu verbinden.
+ Sie müssen Bluetooth aktivieren, um einen neuen GPS-Empfänger zu verbinden.
@@ -540,8 +540,7 @@ Wird dem Projekt nicht hinzugefügt.
- Wir konnten keine Verbindung mit dem angegebenen Gerät herstellen.
- Bitte stellen Sie sicher, dass Ihr Gerät eingeschaltet ist und eine Verbindung hergestellt werden kann.%1 %2Hier erfahren Sie mehr%3.
+ Wir konnten keine Verbindung mit dem angegebenen Gerät herstellen. Bitte stellen Sie sicher, dass Ihr Gerät eingeschaltet ist und eine Verbindung hergestellt werden kann.
@@ -572,7 +571,7 @@ Wird dem Projekt nicht hinzugefügt.
- Änderungen seit Ihrem letzten Besuch anzeigen
+ Sehen Sie, was sich seit Ihrem letzten Besuch geändert hat.
@@ -585,7 +584,7 @@ Wird dem Projekt nicht hinzugefügt.
- Diese Aktion löscht Ihren Account. Sollten Sie Eigentümer eines Arbeitsbereiches sein, müssen Sie diesen zuerst an jemand anderen übertragen.
+ Diese Aktion löscht Ihren Account. Sollten Sie Eigentümer eines Arbeitsbereiches sein, müssen Sie diesen zuerst an jemand anderen übertragen oder den Arbeitsbereich schließen.
@@ -692,12 +691,12 @@ Wird dem Projekt nicht hinzugefügt.
- Wenn Sie auf 'Ja' klicken, werden Ihre Änderungen an der Geometrie verworfen. Wenn Sie die Änderungen stattdessen speichern möchten, klicken Sie auf 'Nein' und dann auf 'Fertig' in der Symbolleiste.
+ Wenn Sie auf 'Ja' klicken, werden Ihre Änderungen an der Geometrie verworfen. Wenn Sie die Änderungen stattdessen speichern möchten, klicken Sie auf 'Nein' und dann in der Symbolleiste auf 'Fertig'.
- Wenn Sie auf 'Ja' klicken, werden neuen Geometrien verworfen und kein Feature gespeichert. Wenn Sie die Geometrie stattdessen speichern möchten, klicken Sie auf 'Nein' und dann auf 'Fertig' in der Symbolleiste.
+ Wenn Sie auf 'Ja' klicken, werden neuen Geometrien verworfen und kein Feature gespeichert. Wenn Sie die Geometrie stattdessen speichern möchten, klicken Sie auf 'Nein' und dann in der Symbolleiste auf 'Fertig'.
@@ -721,8 +720,7 @@ Wird dem Projekt nicht hinzugefügt.
- Möchten Sie das Projekt herunterladen
- %1 ?
+ Möchten Sie das Projekt %1 herunterladen?
@@ -738,7 +736,7 @@ Wird dem Projekt nicht hinzugefügt.
MMFeaturesListPage
-
+ Objekt hinzufügen
@@ -748,7 +746,7 @@ Wird dem Projekt nicht hinzugefügt.
- nach Objekten suchen...
+ Nach Objekten suchen...
@@ -789,7 +787,7 @@ Wird dem Projekt nicht hinzugefügt.
- Das Speichern der Änderungen schlug fehl. Dies sollte normalerweise nicht passieren. Bitte die App neustarten und nochmal probieren - wenn dies auch nicht hilft, kontaktieren Sie den Support.
+ Das Speichern der Änderungen schlug fehl. Dies sollte normalerweise nicht passieren. Bitte die App neu starten und noch einmal probieren - wenn dies auch nicht hilft, kontaktieren Sie bitte den Support.
@@ -808,7 +806,7 @@ Wird dem Projekt nicht hinzugefügt.
- Bearbeite Objekt
+ Objekt bearbeiten
@@ -823,7 +821,7 @@ Wird dem Projekt nicht hinzugefügt.
- Objekt konnte nicht gespeichert werden, bitte überprüfen Sie alle Pflichtfelder
+ Objekt konnte nicht gespeichert werden, bitte überprüfen Sie alle Pflichtfelder.
@@ -846,12 +844,12 @@ Wird dem Projekt nicht hinzugefügt.
- Ordner %1 konnte nicht erstellt werden
+ Ordner %1 konnte nicht erstellt werden.
- Das Bild konnte nicht verarbeitet werden
+ Das Bild konnte nicht verarbeitet werden.
@@ -895,7 +893,7 @@ Wird dem Projekt nicht hinzugefügt.
- Ja, ich möchte speichern
+ Ja, ich möchte speichern.
@@ -908,12 +906,12 @@ Wird dem Projekt nicht hinzugefügt.
- GPS info
+ GPS-Info
- GPS Gerät
+ GPS-Gerät
@@ -928,7 +926,7 @@ Wird dem Projekt nicht hinzugefügt.
- Longitude
+ Längengrad
@@ -948,12 +946,12 @@ Wird dem Projekt nicht hinzugefügt.
- N/A
+ k. A.
- Latitude
+ Breitengrad
@@ -983,12 +981,12 @@ Wird dem Projekt nicht hinzugefügt.
- Fixierungstyp
+ Fix-Typ
- Satelliten (in Verwendung/Ansicht)
+ Satelliten (in Verwendung/Blick)
@@ -1018,7 +1016,7 @@ Wird dem Projekt nicht hinzugefügt.
- GPS Antennen Höhe
+ GPS-Antennenhöhe
@@ -1028,7 +1026,7 @@ Wird dem Projekt nicht hinzugefügt.
- GPS Empfänger verwalten
+ GPS-Empfänger verwalten
@@ -1051,12 +1049,12 @@ Wird dem Projekt nicht hinzugefügt.
- QGIS Webseite
+ QGIS-Webseite
- App Store
+ App-Store
@@ -1121,7 +1119,7 @@ Wird dem Projekt nicht hinzugefügt.
- Bitte geben Sie eine Quelle an
+ Bitte geben Sie eine Quelle an.
@@ -1139,7 +1137,7 @@ Wird dem Projekt nicht hinzugefügt.
- Sichtbar auf der Karte
+ Auf der Karte sichtbar
@@ -1149,17 +1147,17 @@ Wird dem Projekt nicht hinzugefügt.
- Attribution
+ Attribuierung
- Features
+ Objekte
- Layer Info
+ Layer-Info
@@ -1224,7 +1222,7 @@ Wird dem Projekt nicht hinzugefügt.
- Log in
+ Log-in
@@ -1244,7 +1242,7 @@ Wird dem Projekt nicht hinzugefügt.
- Login
+ Anmelden
@@ -1264,7 +1262,7 @@ Wird dem Projekt nicht hinzugefügt.
- Server Adresse
+ Server-Adresse
@@ -1275,97 +1273,102 @@ Wird dem Projekt nicht hinzugefügt.
MMMapController
-
+
- Setzen Sie einen Punkt auf der Karte und klicken Sie danach auf "Erfassen"
+ Setzen Sie einen Punkt auf der Karte und klicken Sie danach auf "Erfassen".
-
+
- Linie erstellen, um das ausgewählte Feature zu teilen
+ Linie erstellen, um das ausgewählte Feature zu teilen.
+
+
+
+
+ Fügen Sie Punkte für die Streckenmessung hinzu. Für die Flächenmessung setzen Sie den Endpunkt auf den Anfangspunkt, um das Polygon zu schließen.
-
+ fortlaufende Aufzeichnung
-
+ Verbindet mit %1
-
+ Verbunden, keine Position
-
+ Unbekannte Genauigkeit
-
+ GPS derzeit nicht verfügbar.
-
+ Aktiven Layer wählen
-
+ Konnte keinen editierbaren Layer im Projekt finden.
-
+ Sehen Sie, wie Sie das Digitalisieren in Ihrem Projekt aktivieren können.
-
+ Mehr Optionen
-
+ Geometrie teilen
-
+ Geometrie neu zeichnen
-
+ Fortlaufende Aufzeichnung
-
+ Aktiv
-
+ Aufteilung erfolgreich durchgeführt
-
+ Wähle einen Punkt aus, um mit der Bearbeitung der Geometrie zu beginnen.
-
+ Neue Geometrie für das Feature erfassen
-
+ GPS derzeit nicht verfügbar.
@@ -1385,7 +1388,63 @@ Wird dem Projekt nicht hinzugefügt.
- Finden Sie heraus wie man %1 Kartenthemen erstellen %2 kann
+ Finden Sie heraus wie man %1 Kartenthemen erstellen %2 kann.
+
+
+
+ MMMeasureCrosshair
+
+
+
+ Polygon schließen
+
+
+
+ MMMeasureDrawer
+
+
+
+ Messen
+
+
+
+
+ Wiederholen
+
+
+
+
+ Rückgängig machen
+
+
+
+
+ Umfang
+
+
+
+
+ Länge
+
+
+
+
+ Fläche
+
+
+
+
+ Polygon schließen
+
+
+
+
+ Punkt hinzufügen
+
+
+
+
+ Fertig
@@ -1406,7 +1465,7 @@ Wird dem Projekt nicht hinzugefügt.
- Dieses Projekt ist derzeit nicht in der Cloud hochgeladen. Laden Sie es hoch, um die Synchronisation und Zusammenarbeit zu aktivieren.
+ Dieses Projekt ist derzeit nicht in der Cloud hochgeladen. Laden Sie es hoch, um die Synchronisierung und Zusammenarbeit zu aktivieren.
@@ -1424,17 +1483,17 @@ Wird dem Projekt nicht hinzugefügt.
- Melden Sie sich bei Ihrem Konto an
+ Melden Sie sich bei Ihrem Konto an.
- Sie müssen bei Ihrem Mergin Maps Konto angemeldet sein, um das Projekt zu synchronisieren.
+ Sie müssen bei Ihrem Mergin Maps-Konto angemeldet sein, um das Projekt synchronisieren zu können.
- Ja, ich möchte mich anmelden
+ Ja, ich möchte mich anmelden.
@@ -1452,12 +1511,12 @@ Wird dem Projekt nicht hinzugefügt.
- Sie dürfen Ihre Änderungen in diesem Projekt nicht synchronisieren. Wenden Sie sich an den Projekt Eigentümer, um Ihnen die richtige Berechtigung zuzuweisen. Wenn Sie der Projekt Eigentümer sind, melden Sie sich beim Dashboard an.
+ Sie dürfen Ihre Änderungen in diesem Projekt nicht synchronisieren. Wenden Sie sich an den Projekt-Eigentümer, damit er Ihnen die richtige Berechtigung zuweist. Wenn Sie der Projekt-Eigentümer sind, melden Sie sich beim Dashboard an.
- Ok, ich verstehe
+ Ok, ich verstehe.
@@ -1465,7 +1524,7 @@ Wird dem Projekt nicht hinzugefügt.
- Ihr Server wird in Kürze veraltet veraltet sein
+ Ihr Server wird in Kürze veraltet sein.
@@ -1521,12 +1580,12 @@ Wird dem Projekt nicht hinzugefügt.
- Eine Verbindung zu externen Empfängern über Bluetooth wird nicht unterstützt
+ Eine Verbindung zu externen Empfängern über Bluetooth wird nicht unterstützt.
- Diese Funktion ist auf iOS nicht verfügbar. Ihr Hardware-Hersteller könnte eine spezielle App bereitstellen, die sich mit dem Empfänger verbindet und die Position bereitstellt. Mergin Maps wird dennoch annehmen, dass es sich um das interne GPS Ihres Handys/Tablets handelt.
+ Diese Funktion ist auf iOS nicht verfügbar. Ihr Hardware-Hersteller könnte eine spezielle App bereitstellen, die sich mit dem Empfänger verbindet und die Position bereitstellt. Mergin Maps wird dann dennoch annehmen, dass es sich um das interne GPS Ihres Handys/Tablets handelt.
@@ -1536,7 +1595,7 @@ Wird dem Projekt nicht hinzugefügt.
- GPS Empfänger verwalten
+ GPS-Empfänger verwalten
@@ -1544,17 +1603,17 @@ Wird dem Projekt nicht hinzugefügt.
- Positions Tracking
+ Positions-Aufzeichnung
- Verfolgen Sie Ihre Routen auch bei ausgeschaltetem Bildschirm. Ihre Aufzeichnungen werden in einem separaten Layer gespeichert. Fertiggestellte Strecken werden wie alle anderen Objekte synchronisiert.
+ Nehmen Sie Ihre Routen auch bei ausgeschaltetem Bildschirm auf. Ihre Aufzeichnungen werden in einem separaten Layer gespeichert. Fertiggestellte Strecken werden wie alle anderen Objekte synchronisiert.
- Mergin Maps kann Ihre Position in diesem Projekt aufzeichnen.
+ Mergin Maps kann Ihre Positionen in diesem Projekt aufzeichnen.
@@ -1595,7 +1654,7 @@ Wird dem Projekt nicht hinzugefügt.
- PROJ Fehler
+ PROJ-Fehler
@@ -1631,7 +1690,7 @@ Wird dem Projekt nicht hinzugefügt.
- Server wird nicht unterstützt. Bitte kontaktieren Sie Ihren Server Administrator
+ Server wird nicht unterstützt. Bitte kontaktieren Sie Ihren Server Administrator.
@@ -1644,7 +1703,7 @@ Wird dem Projekt nicht hinzugefügt.
- Bitte App nicht schließen
+ Bitte App nicht schließen.
@@ -1692,12 +1751,12 @@ Wird dem Projekt nicht hinzugefügt.
- Ihre Aufmerksamkeit ist erforderlich
+ Ihre Aufmerksamkeit ist erforderlich.
- Klicken Sie hier um zum Mergin Maps Dashboard zu gelangen
+ Klicken Sie hier um zum Mergin Maps-Dashboard zu gelangen.
@@ -1707,12 +1766,12 @@ Wird dem Projekt nicht hinzugefügt.
- Klicken Sie hier um einen Arbeitsbereich zu erstellen
+ Klicken Sie hier, um einen Arbeitsbereich zu erstellen.
- derzeit geöffnet
+ Derzeit geöffnet
@@ -1730,7 +1789,7 @@ Wird dem Projekt nicht hinzugefügt.
- QGIS log
+ QGIS-Protokoll
@@ -1738,7 +1797,7 @@ Wird dem Projekt nicht hinzugefügt.
- Sie haben die maximale Anzahl an Projekten erreicht
+ Sie haben die maximale Anzahl an Projekten erreicht.
@@ -1756,7 +1815,7 @@ Wird dem Projekt nicht hinzugefügt.
- Das Projekt kann nicht geöffnet werden
+ Das Projekt kann nicht geöffnet werden.
@@ -1771,12 +1830,12 @@ Wird dem Projekt nicht hinzugefügt.
- Lassen Sie uns anfangen
+ Lassen Sie uns anfangen!
- Erster Schritt ist ein neues Projekt zu erstellen
+ Im ersten Schritt erstellen wir ein neues Projekt.
@@ -1804,7 +1863,7 @@ Wird dem Projekt nicht hinzugefügt.
- Leider konnte Ihr Projekt nicht geöffnet werden. Bitte ziehen Sie unsere Dokumentation zu Rate, um häufige Probleme zu verstehen.
+ Leider konnte Ihr Projekt nicht geöffnet werden. Bitte ziehen Sie unsere Dokumentation zurate, um häufige Probleme verstehen zu lernen.
@@ -1851,7 +1910,7 @@ Wird dem Projekt nicht hinzugefügt.
- Änderungen
+ Ihre lokalen Änderungen
@@ -1861,12 +1920,12 @@ Wird dem Projekt nicht hinzugefügt.
- Es gibt momentan keine lokalen Änderungen
+ Es gibt momentan keine lokalen Änderungen.
- Sobald Sie einige Änderungen vorgenommen haben, werden sie hier erscheinen
+ Sobald Sie einige Änderungen vorgenommen haben, werden sie hier erscheinen.
@@ -1912,17 +1971,17 @@ Wird dem Projekt nicht hinzugefügt.
- Wollen Sie den Empfänger von der Liste der letzten Empfänger entfernen?
+ Wollen Sie den Empfänger von der Liste der zuletzt genutzten Empfänger entfernen?
- Ja, ich will entfernen
+ Ja, ich will ihn entfernen.
- Nein, Danke
+ Nein, Danke.
@@ -1930,7 +1989,7 @@ Wird dem Projekt nicht hinzugefügt.
- Rückgängig
+ Rückgängig machen
@@ -1964,7 +2023,7 @@ Wird dem Projekt nicht hinzugefügt.
- Möchten Sie das Foto löschen oder die Verknüpfung aufheben? Durch das Löschen wird das Foto vollständig aus Ihrem Projekt entfernt, während durch das Aufheben der Verknüpfung das Foto in Ihrem Projekt verbleibt, aber nicht mehr mit dem spezifischen Objekt verknüpft ist.
+ Möchten Sie das Foto löschen oder die Verknüpfung aufheben? Durch das Löschen wird das Foto vollständig aus Ihrem Projekt entfernt. Durch das Aufheben der Verknüpfung verbleibt das Foto in Ihrem Projekt, ist aber nicht mehr mit dem spezifischen Objekt verknüpft.
@@ -1974,7 +2033,7 @@ Wird dem Projekt nicht hinzugefügt.
- Unlink Foto
+ Foto-Verknüpfung aufheben
@@ -1988,7 +2047,7 @@ Wird dem Projekt nicht hinzugefügt.
- Alle nicht synchronisierten Änderungen im Projekt gehen verloren %1
+ Alle nicht synchronisierten Änderungen im Projekt %1 gehen verloren.
@@ -2006,7 +2065,7 @@ Wird dem Projekt nicht hinzugefügt.
- Änderungen können nicht geladen werden
+ Änderungen können nicht geladen werden.
@@ -2038,42 +2097,42 @@ Wird dem Projekt nicht hinzugefügt.
- GPS Genauigkeitsschwellenwert
+ GPS-Genauigkeitsschwellenwert
- Bestimmt, wann der Genauigkeitsindikator gelb wird
+ Bestimmt, wann der Genauigkeitsindikator gelb wird.
- GPS Genauigkeitsschwellenwert, in Metern
+ GPS-Genauigkeitsschwellenwert, in Metern
- GPS Empfänger verwalten
+ GPS-Empfänger verwalten
- GPS Antennen Höhe
+ GPS-Antennenhöhe
- Enthält die Stabhöhe und die Höhe der GPS-Empfängerantenne
+ Ist die Stabhöhe + die Höhe der GPS-Empfängerantenne
- GPS Antennenhöhe, in Metern
+ GPS-Antennenhöhe, in Metern
- Aufzeichnungs Modus
+ Aufzeichnungs-Modus
@@ -2083,7 +2142,7 @@ Wird dem Projekt nicht hinzugefügt.
- Wählen Sie eine Intervall Typ zur automatischen Aufzeichnung
+ Wählen Sie eine Intervall-Typ für die automatische Aufzeichnung.
@@ -2093,22 +2152,22 @@ Wird dem Projekt nicht hinzugefügt.
- Intervall Schwelle
+ Intervall-Schwelle
- Im Aufzeichnungs-Modus wird in jedem Intervall ein Punk zum Objekt hinzugefügt
+ Im Aufzeichnungs-Modus wird nach jedem Intervall ein Punkt zum Objekt hinzugefügt.
- Intervall Schwelle, in Metern
+ Intervall-Schwelle, in Metern
- Intervall Schwelle, in Sekunden
+ Intervall-Schwelle, in Sekunden
@@ -2118,32 +2177,32 @@ Wird dem Projekt nicht hinzugefügt.
- Letzten Wert wiederverwenden
+ Zuletzt eingegebenen Wert wiederverwenden
- Jedes Feld bietet die Option, den gleichen Wert für das nächste Objekt wiederzuverwenden
+ Jedes Feld bietet die Option, denselben Wert wieder für das nächste Objekt zu verwenden.
- Änderungen werden automatisch synchronisiert
+ Änderungen werden automatisch synchronisiert.
- Jedes Mal, wenn Sie Änderungen speichern, wird die App automatisch synchronisieren
+ Jedes Mal, wenn Sie Änderungen speichern, wird die App diese automatisch synchronisieren.
- Auto-Lock Position
+ Position auto-sperren
- Bei jedem Start der Aufnahme, zentriert sich die App auf die GPS-Position
+ Bei jedem Start der Aufnahme, zentriert sich die App auf die GPS-Position.
@@ -2212,12 +2271,12 @@ Wird dem Projekt nicht hinzugefügt.
- Ich möchte mich für den Newsletter anmelden
+ Ich möchte mich für den Newsletter anmelden.
- Ich habe bereits ein Benutzerkonto
+ Ich habe bereits ein Benutzerkonto.
@@ -2230,17 +2289,17 @@ Wird dem Projekt nicht hinzugefügt.
- Das Feature konnte nicht geteilt werden
+ Das Feature konnte nicht geteilt werden.
- Bitte stellen Sie sicher, dass die geteilte Linie Ihr Feature kreuzt. Das Feature muss eine gültige Geometrie haben, damit es geteilt werden kann.
+ Bitte stellen Sie sicher, dass die Teilungs-Linie Ihr Objekt schneidet. Das Objekt muss eine gültige Geometrie haben, damit es geteilt werden kann.
- Ok, ich verstehe
+ Ok, ich verstehe.
@@ -2248,7 +2307,7 @@ Wird dem Projekt nicht hinzugefügt.
- Rückgängig
+ Rückgängig machen
@@ -2274,19 +2333,19 @@ Wird dem Projekt nicht hinzugefügt.
Abstecken
-
+ Objekt
-
+ Distanz
-
+
- N/A
+ k. A.
@@ -2294,7 +2353,7 @@ Wird dem Projekt nicht hinzugefügt.
- Sie haben ein Datenlimit erreicht
+ Sie haben ein Datenlimit erreicht.
@@ -2309,7 +2368,7 @@ Wird dem Projekt nicht hinzugefügt.
- in Verwendung
+ In Verwendung
@@ -2322,7 +2381,7 @@ Wird dem Projekt nicht hinzugefügt.
- Bewegen Sie sich um das festgelegte Objekt, um seine Geometrie aufzuzeichnen. Sie können dies jederzeit beenden.
+ Umrunden Sie das festgelegte Objekt, um seine Geometrie aufzuzeichnen. Sie können dies jederzeit beenden.
@@ -2373,7 +2432,7 @@ Wird dem Projekt nicht hinzugefügt.
- Ok, ich verstehe
+ Ok, ich verstehe.
@@ -2399,12 +2458,12 @@ Wird dem Projekt nicht hinzugefügt.
- Wir waren fleißig und haben Mergin Maps noch besser gemacht! Dieses Update bringt ein frisches Design und verbesserte Navigation mit sich. Finden Sie schneller was Sie benötigen. Schauen Sie sich um!
+ Wir waren fleißig und haben Mergin Maps noch besser gemacht! Dieses Update bringt ein frisches Design und eine verbesserte Navigation mit sich. Finden Sie nun schneller, was Sie benötigen. Schauen Sie sich um!
- Lassen Sie uns anfangen
+ Lassen Sie uns anfangen!
@@ -2472,7 +2531,7 @@ Wird dem Projekt nicht hinzugefügt.
- Bitte geben Sie Ihre Branche an
+ Bitte geben Sie Ihre Branche an.
@@ -2482,12 +2541,12 @@ Wird dem Projekt nicht hinzugefügt.
- Erstellen Ihres Arbeitsbereichs: Teilen Sie uns Ihre Branche mit.
+ Erstellung Ihres Arbeitsbereichs: Teilen Sie uns Ihre Branche mit.
- Bitte geben Sie Ihre Branche an
+ Bitte geben Sie Ihre Branche an.
@@ -2506,32 +2565,32 @@ only allows up to %1 downloaded projects.
- Der Benutzername muss mindestens 4 Zeichen haben
+ Der Benutzername muss mindestens 4 Zeichen haben.
- Der Benutzername enthält ungültige Zeichen
+ Der Benutzername enthält ungültige Zeichen.
- Bitte eine gültige E-Mail-Adresse eingeben
+ Bitte eine gültige E-Mail-Adresse eingeben.
- Passwort nicht sicher genug. Es muss%1 mindestens 8 Zeichen haben%1 Kleinbuchstaben enthalten%1 Großbuchstaben enthalten%1 Zahlen oder Sonderzeichen enthalten
+ Passwort nicht sicher genug. Es muss%1 mindestens 8 Zeichen haben%1 Klein- und Großbuchstaben enthalten%1 und Zahlen oder Sonderzeichen enthalten.
- Passwörter nicht identisch
+ Passwörter sind nicht identisch.
- Bitte den Geschäftsbedingungen und der Datenschutzerklärung zustimmen
+ Bitte den Geschäftsbedingungen und der Datenschutzerklärung zustimmen.
@@ -2566,12 +2625,12 @@ only allows up to %1 downloaded projects.
- Der Name des Arbeitsbereiches enthält ungültige Zeichen
+ Der Name des Arbeitsbereiches enthält ungültige Zeichen.
- Arbeitsbereich %1 ist bereits vorhanden
+ Arbeitsbereich %1 ist bereits vorhanden.
@@ -2584,7 +2643,7 @@ only allows up to %1 downloaded projects.
- Änderungen konnten nicht übernommen werden
+ Änderungen konnten nicht übernommen werden.
@@ -2597,12 +2656,12 @@ only allows up to %1 downloaded projects.
- GPS Empfänger dieses Gerätes
+ GPS-Empfänger dieses Gerätes
- Intern (fused)
+ Intern (fusioniert)
@@ -2617,7 +2676,7 @@ only allows up to %1 downloaded projects.
- Intern (gps)
+ Intern (GPS)
@@ -2627,12 +2686,12 @@ only allows up to %1 downloaded projects.
- Bluetooth Gerät
+ Bluetooth-Gerät
- Bluetooth Gerät
+ Bluetooth-Gerät
@@ -2640,17 +2699,17 @@ only allows up to %1 downloaded projects.
- Konnten den Aufzeichnungs-Layer für das Projekt nicht finden
+ Konnte den Tracking-Layer für das Projekt nicht finden.
- Aufzeichnungs-Layer wurde nicht gefunden oder ist ungültig
+ Tracking-Layer wurde nicht gefunden oder ist ungültig.
- Aufzeichnung konnte nicht gestartet werden, bitte kontaktieren Sie den Support
+ Tracking konnte nicht gestartet werden, bitte kontaktieren Sie den Support.
@@ -2658,7 +2717,7 @@ only allows up to %1 downloaded projects.
- Der Projekt Name enthält ungültige Zeichen
+ Der Projektname enthält ungültige Zeichen.
@@ -2671,7 +2730,7 @@ only allows up to %1 downloaded projects.
- Anstehende Änderungen für die Synchronisation
+ Zur Synchronisierung anstehende Änderungen
@@ -2766,27 +2825,27 @@ only allows up to %1 downloaded projects.
- DGPS Fix
+ DGPS-Fix
- PPS Fix
+ PPS-Fix
- RTK Fix
+ RTK-Fix
- RTK Float
+ RTK-Float
- Geschätzter Fixpunkt (Koppelnavigation)
+ Geschätzter Fix (Koppelnavigation)
@@ -2796,7 +2855,7 @@ only allows up to %1 downloaded projects.
- Bericht gesendet. Kontaktiere uns unter %1
+ Bericht gesendet. Kontaktieren Sie uns unter %1.
@@ -2806,7 +2865,7 @@ only allows up to %1 downloaded projects.
- Synchronisation abgebrochen
+ Synchronisierung abgebrochen
@@ -2820,113 +2879,118 @@ only allows up to %1 downloaded projects.
main
-
+ Sync
-
+ Hinzufügen
-
+
- Keine zu bearbeitenden Layer gefunden!
+ Keine bearbeitbaren Layer gefunden!
-
+ Layers
-
+ Projekte
-
+
- Gesamtansicht
+ Auf Projekt zoomen
-
+ Kartenthemen
-
+
- Positions Tracking
+ Positions-Tracking
+
+
+
+
+ Messen
-
+
- Änderungen
+ Lokale Änderungen
-
+ Einstellungen
-
-
+
+
- keine Aufzeichnung
+ kein Tracking
-
+ Objekt auswählen
-
+
- Jemand anderes synchronisiert gerade, wir versuchen es später noch einmal
+ Jemand anderes synchronisiert gerade, wir versuchen es später noch einmal.
-
+ Details
-
+ Die Kommunikation mit dem Server ist fehlgeschlagen. Versuchen Sie, Ihre Netzwerkverbindung zu verbessern.
-
+ Auf dem neuesten Stand
-
+ Beim Laden des Projekts traten Probleme auf. %1Details anzeigen%2
-
+ Abstecken ist deaktiviert, weil der Standort nicht verfügbar ist!
-
+ Synchronisierung erfolgreich
-
+
- Bei der Synchronisierung ist ein Problem aufgetreten. Wir werden es erneut versuchen. Klicken Sie hier, um mehr zu erfahren
+ Bei der Synchronisierung ist ein Problem aufgetreten. Wir werden es erneut versuchen. Klicken Sie hier, um mehr zu erfahren.
-
+ Konnte die Projektdatei nicht lesen:
-
+ Drücken Sie erneut auf "Zurück", um die Anwendung zu beenden.
diff --git a/app/i18n/input_en.qm b/app/i18n/input_en.qm
index 38cc9c4ed..5b93e96c2 100644
Binary files a/app/i18n/input_en.qm and b/app/i18n/input_en.qm differ
diff --git a/app/i18n/input_en.ts b/app/i18n/input_en.ts
index 4513cea6d..4102b0bf6 100644
--- a/app/i18n/input_en.ts
+++ b/app/i18n/input_en.ts
@@ -201,117 +201,117 @@ Won't be added to the project.
InputUtils
-
+
-
+
-
+
-
+
-
+
-
-
+
+
-
-
+
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+ screen resolution: %1x%2 px
-
+ screen DPI: %1x%2
-
+ screen size: %1x%2 mm
-
+
-
+
-
+
-
+
-
+
@@ -1272,97 +1272,102 @@ Won't be added to the project.
MMMapController
-
+
-
+
-
+
+
+
+
+
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -1385,6 +1390,62 @@ Won't be added to the project.
+
+ MMMeasureCrosshair
+
+
+
+
+
+
+
+ MMMeasureDrawer
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Undo
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Done
+
+MMMessage
@@ -2271,17 +2332,17 @@ Won't be added to the project.
-
+
-
+
-
+
@@ -2791,12 +2852,12 @@ only allows up to %1 downloaded projects.
-
+
-
+
@@ -2817,113 +2878,118 @@ only allows up to %1 downloaded projects.
main
-
+
-
+
-
+
-
+
-
+ Projects
-
+ Zoom to project
-
+ Map themes
-
+
-
+
+
+
+
+
+
-
+ Settings
-
-
+
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
diff --git a/app/i18n/input_fr.qm b/app/i18n/input_fr.qm
index 39c5ce7d7..36824a897 100644
Binary files a/app/i18n/input_fr.qm and b/app/i18n/input_fr.qm differ
diff --git a/app/i18n/input_fr.ts b/app/i18n/input_fr.ts
index ad62c15fe..7c502e3ce 100644
--- a/app/i18n/input_fr.ts
+++ b/app/i18n/input_fr.ts
@@ -154,7 +154,7 @@
FeaturesModel
-
+ Titre inconnu
@@ -200,119 +200,119 @@ Ne sera pas ajouté au projet.
InputUtils
-
+ à l'instant
-
+ il y a %1 minutes
-
+ il y a %1 minute
-
+ il y a %1 heures
-
+ il y a %1 heure
-
-
+
+ il y a %1 jours
-
-
+
+ il y a %1 jour
-
+ il y a %1 semaines
-
+ il y a %1 semaine
-
+ il y a %1 mois
-
+ il y a %1 mois
-
+ il y a %1 ans
-
+ il y a %1 an
-
+ résolution de l'écran : %1x%2 px
-
+ DPI de l'écran : %1x%2
-
+ taille de l'écran : %1x%2 mm
-
+ Ratio rapporté de pixels de l'appareil: %1
-
+ Ratio calculé de pixels de l'appareil: %1
-
+ Échelle dp utilisée: %1
-
+ Vous devez ajouter au moins %1 point(s) à chaque partie.
-
+ Vous devez ajouter au moins %1 point(s).
@@ -737,7 +737,7 @@ Ne sera pas ajouté au projet.
MMFeaturesListPage
-
+ Ajouter un élément
@@ -1274,97 +1274,102 @@ Ne sera pas ajouté au projet.
MMMapController
-
+ Marquez la géométrie sur la carte et cliquez sur Enregistrer.
-
+ Créer une ligne pour diviser l'élément sélectionné
-
+
+
+ Ajouter des points pour mesurer une distance, fermer le polygone pour mesurer une surface
+
+
+ streaming
-
+ Connexion à %1
-
+ Connecté, aucune position
-
+ Précision inconnue
-
+ GPS actuellement indisponible
-
+ Choisir la couche active
-
+ Aucune couche éditable n'a été trouvée dans le projet.
-
+ Découvrez comment activer la digitalisation dans votre projet.
-
+ Plus d'options
-
+ Fractionner la géométrie
-
+ Redessiner la géométrie
-
+ Mode streaming
-
+ Active
-
+ Le fractionnement a été effectué avec succès
-
+ Sélectionner un point pour commencer à modifier la géométrie
-
+ Enregistrer une nouvelle géométrie pour l'élément
-
+ GPS actuellement indisponible.
@@ -1387,6 +1392,62 @@ Ne sera pas ajouté au projet.
En savoir plus sur %1comment configurer les thèmes%2.
+
+ MMMeasureCrosshair
+
+
+
+ Fermer la couche
+
+
+
+ MMMeasureDrawer
+
+
+
+ Mesurer
+
+
+
+
+ Recommencer
+
+
+
+
+ Annuler
+
+
+
+
+ Périmètre
+
+
+
+
+ Longueur
+
+
+
+
+ Surface
+
+
+
+
+ Fermer la couche
+
+
+
+
+ Ajouter un point
+
+
+
+
+ Fait
+
+MMMessage
@@ -2274,17 +2335,17 @@ Ne sera pas ajouté au projet.
Piquetage
-
+ Entité
-
+ Distance
-
+ N/A
@@ -2820,113 +2881,118 @@ only allows up to %1 downloaded projects.
main
-
+ Synchroniser
-
+ Ajouter
-
+ Aucune couche éditable n'a pu être trouvée.
-
+ Couches
-
+ Projets
-
+ Se localiser
-
+ Thèmes
-
+ Enregistrement de la position
-
+
+
+ Mesure
+
+
+ Changements locaux
-
+ Paramètres
-
-
+
+ Pas d'enregistrement de la position
-
+ Sélectionner une entité
-
+ Quelqu'un d'autre est une train de synchroniser, veuillez réessayer plus tard
-
+ Détails
-
+ La connexion avec le serveur a échoué. Essayez avec un meilleur réseau
-
+ À jour
-
+ Il y a eu des problèmes au chargement du projet. %1 Voir les détails %2
-
+ Le piquetage est désactivé car aucune position n'est disponible!
-
+ Synchronisation effectuée avec succès
-
+ Il y a eu un problème lors de la synchronisation, nous allons réessayer. Cliquez pour en savoir plus
-
+ Le fichier du projet n'a pu être lu
-
+ Appuyer à nouveau sur retour pour quitter l'application
diff --git a/app/i18n/input_fr_FR.qm b/app/i18n/input_fr_FR.qm
index db450eb18..8abbe7789 100644
Binary files a/app/i18n/input_fr_FR.qm and b/app/i18n/input_fr_FR.qm differ
diff --git a/app/i18n/input_fr_FR.ts b/app/i18n/input_fr_FR.ts
index dd41c17bd..e4f369e19 100644
--- a/app/i18n/input_fr_FR.ts
+++ b/app/i18n/input_fr_FR.ts
@@ -156,7 +156,7 @@
FeaturesModel
-
+ Titre inconnu
@@ -202,119 +202,119 @@ Ne sera pas ajouté au projet.
InputUtils
-
+ à l'instant
-
+ il y a %1 minutes
-
+ il y a %1 minute
-
+ il y a %1 heures
-
+ il y a %1 heure
-
-
+
+ il y a %1 jours
-
-
+
+ il y a %1 jour
-
+ il y a %1 semaines
-
+ il y a %1 semaine
-
+ il y a %1 mois
-
+ il y a %1 mois
-
+ il y a %1 ans
-
+ il y a %1 an
-
+ résolution de l'écran : %1x%2 px
-
+ DPI de l'écran : %1x%2
-
+ taille de l'écran : %1x%2 mm
-
+ Ratio rapporté de pixels de l'appareil: %1
-
+ Ratio calculé de pixels de l'appareil: %1
-
+ Échelle dp utilisée: %1
-
+ Vous devez ajouter au moins %1 point(s) à chaque partie.
-
+ Vous devez ajouter au moins %1 point(s).
@@ -743,7 +743,7 @@ Ne sera pas ajouté au projet.
MMFeaturesListPage
-
+ Ajouter un élément
@@ -818,7 +818,7 @@ Ne sera pas ajouté au projet.
- Suprimmer
+ Supprimer
@@ -1280,102 +1280,107 @@ Ne sera pas ajouté au projet.
MMMapController
-
+ Marquez la géométrie sur la carte et cliquez sur Enregistrer.
-
+ Créer une ligne pour diviser l'élément sélectionné
-
+
+
+ Ajouter des points pour mesurer une distance, fermer le polygone pour mesurer une surface
+
+
+ streaming
-
+ Connexion à %1
-
+ Connecté, aucune position
-
+ Précision inconnue
-
+ GPS actuellement indisponible
-
+ Choisir la couche active
-
+ Aucune couche éditable n'a été trouvée dans le projet.
-
+ Découvrez comment activer la digitalisation dans votre projet.
-
+ Plus d'options
-
+ Fractionner la géométrie
-
+ Redessiner la géométrie
-
+ Mode streaming
-
+ Active
-
+ Le fractionnement a été effectué avec succès
-
+ Sélectionner un point pour commencer à modifier la géométrie
-
+ Enregistrer une nouvelle géométrie pour l'élément
-
+ GPS actuellement indisponible.
@@ -1398,6 +1403,62 @@ Ne sera pas ajouté au projet.
En savoir plus sur %1comment configurer les thèmes%2.
+
+ MMMeasureCrosshair
+
+
+
+ Fermer la couche
+
+
+
+ MMMeasureDrawer
+
+
+
+ Mesurer
+
+
+
+
+ Recommencer
+
+
+
+
+ Annuler
+
+
+
+
+ Périmètre
+
+
+
+
+ Longueur
+
+
+
+
+ Surface
+
+
+
+
+ Fermer la couche
+
+
+
+
+ Ajouter un point
+
+
+
+
+ Fait
+
+MMMessage
@@ -2288,17 +2349,17 @@ Ne sera pas ajouté au projet.
Piquetage
-
+ Entité
-
+ Distance
-
+ N/A
@@ -2836,113 +2897,118 @@ only allows up to %1 downloaded projects.
main
-
+ Synchroniser
-
+ Ajouter
-
+ Aucune couche éditable n'a pu être trouvée.
-
+ Couches
-
+ Projets
-
+ Se localiser
-
+ Thèmes
-
+ Enregistrement de la position
-
+
+
+ Mesure
+
+
+ Changements locaux
-
+ Paramètres
-
-
+
+ Pas d'enregistrement de la position
-
+ Sélectionner une entité
-
+ Quelqu'un d'autre est une train de synchroniser, veuillez réessayer plus tard
-
+ Détails
-
+ La connexion avec le serveur a échoué. Essayez avec un meilleur réseau
-
+ À jour
-
+ Il y a eu des problèmes au chargement du projet. %1 Voir les détails %2
-
+ Le piquetage est désactivé car aucune position n'est disponible!
-
+ Synchronisation effectuée avec succès
-
+ Il y a eu un problème lors de la synchronisation, nous allons réessayer. Cliquez pour en savoir plus
-
+ Le fichier du projet n'a pu être lu
-
+ Appuyer à nouveau sur retour pour quitter l'application
diff --git a/app/i18n/input_hr.qm b/app/i18n/input_hr.qm
index 34c0f2c53..be89cb49b 100644
Binary files a/app/i18n/input_hr.qm and b/app/i18n/input_hr.qm differ
diff --git a/app/i18n/input_hr.ts b/app/i18n/input_hr.ts
index 65d85b1f2..b93109fa5 100644
--- a/app/i18n/input_hr.ts
+++ b/app/i18n/input_hr.ts
@@ -154,7 +154,7 @@
FeaturesModel
-
+ Nepoznati naslov
@@ -199,119 +199,119 @@ Won't be added to the project.
InputUtils
-
+ upravo
-
+ prije %1 minuta
-
+ prije %1 minute
-
+ prije %1 sati
-
+ prije %1 sata
-
-
+
+ prije %1 dana
-
-
+
+ prije %1 dana
-
+ prije %1 tjedana
-
+ prije %1 tjedna
-
+ prije %1 mjeseci
-
+ prije %1 mjeseca
-
+ prije %1 godina
-
+ prije %1 godine
-
+ rezolucija zaslona: %1x%2 px
-
+ DPI zaslona: %1x%2
-
+ veličina zaslona: %1x%2 mm
-
+ prijavljeni omjer piksela zaslona uređaja: %1
-
+ izračunati omjer piksela zaslona uređaja: %1
-
+ korišteno dp mjerilo: %1
-
+ Morate dodati barem %1 točku u svakom od segmenata.
-
+ Morate dodati barem %1 točku(točaka).
@@ -736,7 +736,7 @@ Won't be added to the project.
MMFeaturesListPage
-
+ Dodaj objekt
@@ -1273,97 +1273,102 @@ Won't be added to the project.
MMMapController
-
+ Označi geometriju na karti i klikni
-
+ Stvori liniju kako bi razdvojio odabrani objekt
-
+
+
+ Dodajte točke za mjerenje udaljenosti, zatvorite površinu za mjerenje površine
+
+
+ kontinuirano snimanje
-
+ Povezivanje na %1
-
+ Povezano, nema pozicije
-
+ Nepoznata preciznost
-
+ GPS trenutno nije dostupan
-
+ Odaberi aktivni sloj
-
+ Nema slojeva predviđenih za snimanje u projektu!
-
+ Pogledajte kako omogućiti snimanje u projektu
-
+ Više mogućnosti
-
+ Razdvoji geometriju
-
+ Ponovno iscrtaj geometriju
-
+ Kontinuirano snimanje
-
+ Aktivno
-
+ Razdvajanje uspješno izvršeno
-
+ Odaberite jednu od točaka za početak izmjene geometrije
-
+ Snimi novu geometriju za objekt
-
+ GPS trenutno nije dostupan
@@ -1386,6 +1391,62 @@ Won't be added to the project.
Saznaj više o tome %1kako postaviti teme%2.
+
+ MMMeasureCrosshair
+
+
+
+ Zatvori površinu
+
+
+
+ MMMeasureDrawer
+
+
+
+ Izmjeri
+
+
+
+
+ Ponovi
+
+
+
+
+ Poništi
+
+
+
+
+ Opseg
+
+
+
+
+ Duljina
+
+
+
+
+ Površina
+
+
+
+
+ Zatvori površinu
+
+
+
+
+ Dodaj točku
+
+
+
+
+ Završi
+
+MMMessage
@@ -2273,17 +2334,17 @@ Won't be added to the project.
Navođenje
-
+ Objekt
-
+ Udaljenost
-
+ N/A
@@ -2820,113 +2881,118 @@ dozvoljava samo %1 preuzetih projekata.
main
-
+ Sinkronizacija
-
+ Dodaj
-
+ Nema slojeva za uređivanje.
-
+ Slojevi
-
+ Projekti
-
+ Zumiraj na projekt
-
+ Teme karte
-
+ Praćenje pozicije
-
+
+
+ Izmjeri
+
+
+ Lokalne izmjene
-
+ Postavke
-
-
+
+ ne pratim
-
+ Odaberi objekt
-
+ Netko upravo sinkronizira podatke, pokušati ćemo nešto kasnije
-
+ Detalji
-
+ Neuspješna komunikacija sa poslužiteljem. Provjerite mrežne postavke i kvalitetu signala.
-
+ Ažurno
-
+ Došlo je do problema prilikom učitavanja projekta. %1Pogledajte detalje%2
-
+ Navođenje je onemogućeno zbog nedostupnosti lokacije!
-
+ Uspješno sinkronizirano
-
+ Došlo je do problema prilikom sinkronizacije, pokušati ćemo ponovno. Klikni za više
-
+ Nije bilo moguće otvoriti datoteku projekta:
-
+ Odaberite "nazad" još jednom za izlaz iz aplikacije
diff --git a/app/i18n/input_hr_BA.qm b/app/i18n/input_hr_BA.qm
index adbc14ed9..b19011e04 100644
Binary files a/app/i18n/input_hr_BA.qm and b/app/i18n/input_hr_BA.qm differ
diff --git a/app/i18n/input_hr_BA.ts b/app/i18n/input_hr_BA.ts
index 2821b7449..67df63269 100644
--- a/app/i18n/input_hr_BA.ts
+++ b/app/i18n/input_hr_BA.ts
@@ -154,7 +154,7 @@
FeaturesModel
-
+ Nepoznati naslov
@@ -199,119 +199,119 @@ Won't be added to the project.
InputUtils
-
+ upravo
-
+ prije %1 minuta
-
+ prije %1 minute
-
+ prije %1 sati
-
+ prije %1 sata
-
-
+
+ prije %1 dana
-
-
+
+ prije %1 dana
-
+ prije %1 tjedana
-
+ prije %1 tjedna
-
+ prije %1 mjeseci
-
+ prije %1 mjeseca
-
+ prije %1 godina
-
+ prije %1 godine
-
+ rezolucija zaslona: %1x%2 px
-
+ DPI zaslona: %1x%2
-
+ veličina zaslona: %1x%2 mm
-
+ prijavljeni omjer piksela zaslona uređaja: %1
-
+ izračunati omjer piksela zaslona uređaja: %1
-
+ korišteno dp mjerilo: %1
-
+ Morate dodati barem %1 točku(točaka) u svakom od segmenata.
-
+ Morate dodati barem %1 točku(točaka).
@@ -736,7 +736,7 @@ Won't be added to the project.
MMFeaturesListPage
-
+ Dodaj objekt
@@ -1273,97 +1273,102 @@ Won't be added to the project.
MMMapController
-
+ Označi geometriju na karti i klikni
-
+ Stvori liniju kako bi razdvojio odabrani objekt
-
+
+
+ Dodajte točke za mjerenje udaljenosti, zatvorite oblik za mjerenje površine
+
+
+ kontinuirano snimanje
-
+ Povezivanje na %1
-
+ Povezano, nema pozicije
-
+ Nepoznata preciznost
-
+ GPS trenutno nije dostupan
-
+ Odaberi aktivni sloj
-
+ Nema slojeva predviđenih za snimanje u projektu!
-
+ Pogledajte kako omogućiti snimanje u projektu
-
+ Više mogućnosti
-
+ Razdvoji geometriju
-
+ Ponovno iscrtaj geometriju
-
+ Kontinuirano snimanje
-
+ Aktivno
-
+ Razdvajanje uspješno izvršeno
-
+ Odaberite jednu od točaka za početak izmjene geometrije
-
+ Snimi novu geometriju za objekt
-
+ GPS trenutno nije dostupan
@@ -1386,6 +1391,62 @@ Won't be added to the project.
Saznaj više o tome %1kako postaviti teme%2.
+
+ MMMeasureCrosshair
+
+
+
+ Zatvori objekt
+
+
+
+ MMMeasureDrawer
+
+
+
+ Izmjeri
+
+
+
+
+ Ponovi
+
+
+
+
+ Poništi
+
+
+
+
+ Opseg
+
+
+
+
+ Duljina
+
+
+
+
+ Površina
+
+
+
+
+ Zatvori objekt
+
+
+
+
+ Dodaj točku
+
+
+
+
+ Završi
+
+MMMessage
@@ -2273,17 +2334,17 @@ Won't be added to the project.
Navođenje
-
+ Objekt
-
+ Udaljenost
-
+ N/A
@@ -2820,113 +2881,118 @@ dozvoljava samo %1 preuzetih projekata.
main
-
+ Sinkronizacija
-
+ Dodaj
-
+ Nema slojeva za uređivanje.
-
+ Slojevi
-
+ Projekti
-
+ Zumiraj na projekt
-
+ Teme karte
-
+ Praćenje pozicije
-
+
+
+ Izmjeri
+
+
+ Lokalne izmjene
-
+ Postavke
-
-
+
+ ne pratim
-
+ Odaberi objekt
-
+ Netko upravo sinkronizira podatke, pokušati ćemo nešto kasnije
-
+ Detalji
-
+ Neuspješna komunikacija sa poslužiteljem. Provjerite mrežne postavke i kvalitetu signala.
-
+ Ažurno
-
+ Došlo je do problema prilikom učitavanja projekta. %1Pogledajte detalje%2
-
+ Navođenje je onemogućeno zbog nedostupnosti lokacije!
-
+ Uspješno sinkronizirano
-
+ Došlo je do problema prilikom sinkronizacije, pokušati ćemo ponovno. Klikni za više
-
+ Nije bilo moguće otvoriti datoteku projekta:
-
+ Odaberite "nazad" još jednom za izlaz iz aplikacije
diff --git a/app/i18n/input_hr_HR.qm b/app/i18n/input_hr_HR.qm
index d7e2f196e..22206aec5 100644
Binary files a/app/i18n/input_hr_HR.qm and b/app/i18n/input_hr_HR.qm differ
diff --git a/app/i18n/input_hr_HR.ts b/app/i18n/input_hr_HR.ts
index 650fed386..2ad41ae50 100644
--- a/app/i18n/input_hr_HR.ts
+++ b/app/i18n/input_hr_HR.ts
@@ -154,7 +154,7 @@
FeaturesModel
-
+ Nepoznati naslov
@@ -199,119 +199,119 @@ Won't be added to the project.
InputUtils
-
+ upravo
-
+ prije %1 minuta
-
+ prije %1 minute
-
+ prije %1 sati
-
+ prije %1 sata
-
-
+
+ prije %1 dana
-
-
+
+ prije %1 dana
-
+ prije %1 tjedana
-
+ prije %1 tjedna
-
+ prije %1 mjeseci
-
+ prije %1 mjeseca
-
+ prije %1 godina
-
+ prije %1 godine
-
+ rezolucija zaslona: %1x%2 px
-
+ DPI zaslona: %1x%2
-
+ veličina zaslona: %1x%2 mm
-
+ prijavljeni omjer piksela zaslona uređaja: %1
-
+ izračunati omjer piksela zaslona uređaja: %1
-
+ korišteno dp mjerilo: %1
-
+ Morate dodati barem %1 točku(točaka) u svakom od segmenata.
-
+ Morate dodati barem %1 točku(točaka).
@@ -736,7 +736,7 @@ Won't be added to the project.
MMFeaturesListPage
-
+ Dodaj objekt
@@ -1273,97 +1273,102 @@ Won't be added to the project.
MMMapController
-
+ Označi geometriju na karti i klikni
-
+ Stvori liniju kako bi razdvojio odabrani objekt
-
+
+
+ Dodajte točke za mjerenje udaljenosti, zatvorite oblik za mjerenje površine
+
+
+ kontinuirano snimanje
-
+ Povezivanje na %1
-
+ Povezano, nema pozicije
-
+ Nepoznata preciznost
-
+ GPS trenutno nije dostupan
-
+ Odaberi aktivni sloj
-
+ Nema slojeva predviđenih za snimanje u projektu!
-
+ Pogledajte kako omogućiti snimanje u projektu
-
+ Više mogućnosti
-
+ Razdvoji geometriju
-
+ Ponovno iscrtaj geometriju
-
+ Kontinuirano snimanje
-
+ Aktivno
-
+ Razdvajanje uspješno izvršeno
-
+ Odaberite jednu od točaka za početak izmjene geometrije
-
+ Snimi novu geometriju za objekt
-
+ GPS trenutno nije dostupan
@@ -1386,6 +1391,62 @@ Won't be added to the project.
Saznaj više o tome %1kako postaviti teme%2.
+
+ MMMeasureCrosshair
+
+
+
+ Zatvori objekt
+
+
+
+ MMMeasureDrawer
+
+
+
+ Izmjeri
+
+
+
+
+ Ponovi
+
+
+
+
+ Poništi
+
+
+
+
+ Opseg
+
+
+
+
+ Duljina
+
+
+
+
+ Površina
+
+
+
+
+ Zatvori objekt
+
+
+
+
+ Dodaj točku
+
+
+
+
+ Završi
+
+MMMessage
@@ -2273,17 +2334,17 @@ Won't be added to the project.
Navođenje
-
+ Objekt
-
+ Udaljenost
-
+ N/A
@@ -2820,113 +2881,118 @@ dozvoljava samo %1 preuzetih projekata.
main
-
+ Sinkronizacija
-
+ Dodaj
-
+ Nema slojeva za uređivanje.
-
+ Slojevi
-
+ Projekti
-
+ Zumiraj na projekt
-
+ Teme karte
-
+ Praćenje pozicije
-
+
+
+ Izmjeri
+
+
+ Lokalne izmjene
-
+ Postavke
-
-
+
+ ne pratim
-
+ Odaberi objekt
-
+ Netko upravo sinkronizira podatke, pokušati ćemo nešto kasnije
-
+ Detalji
-
+ Neuspješna komunikacija sa poslužiteljem. Provjerite mrežne postavke i kvalitetu signala.
-
+ Ažurno
-
+ Došlo je do problema prilikom učitavanja projekta. %1Pogledajte detalje%2
-
+ Navođenje je onemogućeno zbog nedostupnosti lokacije!
-
+ Uspješno sinkronizirano
-
+ Došlo je do problema prilikom sinkronizacije, pokušati ćemo ponovno. Klikni za više
-
+ Nije bilo moguće otvoriti datoteku projekta:
-
+ Odaberite "nazad" još jednom za izlaz iz aplikacije
diff --git a/app/i18n/input_hu.qm b/app/i18n/input_hu.qm
index e28299bfa..d84bc05a8 100644
Binary files a/app/i18n/input_hu.qm and b/app/i18n/input_hu.qm differ
diff --git a/app/i18n/input_hu.ts b/app/i18n/input_hu.ts
index de2366333..92c4d6ae3 100644
--- a/app/i18n/input_hu.ts
+++ b/app/i18n/input_hu.ts
@@ -154,7 +154,7 @@
FeaturesModel
-
+ Ismeretlen cím
@@ -200,119 +200,119 @@ Nem lesz hozzáadva a projekthez.
InputUtils
-
+ csak most
-
+ %1 perccel ezelőtt
-
+ %1 perccel ezelőtt
-
+ %1 órával ezelőtt
-
+ %1 órával ezelőtt
-
-
+
+ %1 nappal ezelőtt
-
-
+
+ %1 nappal ezelőtt
-
+ %1 héttel ezelőtt
-
+ %1 héttel ezelőtt
-
+ %1 hónappal ezelőtt
-
+ %1 hónappal ezelőtt
-
+ %1 évvel ezelőtt
-
+ %1 évvel ezelőtt
-
+ képernyő felbontás: %1x%2 pixel
-
+ képernyő DPI: %1x%2
-
+ képernyő méret: %1x%2 mm
-
+ jelentett eszköz pixelarány: %1
-
+ számított eszköz pixelarány: %1
-
+ használt dp skála: %1
-
+ Minden részhez legalább %1 pontot kell hozzáadnia.
-
+ Legalább %1 pontot kell hozzáadnia.
@@ -737,7 +737,7 @@ Nem lesz hozzáadva a projekthez.
MMFeaturesListPage
-
+ Elem hozzáadása
@@ -1274,97 +1274,102 @@ Nem lesz hozzáadva a projekthez.
MMMapController
-
+ Válassza ki a geometriát a térképen, és bökjön a rögzítésre
-
+ Vonal létrehozása a kiválasztott elem felosztásához
-
+
+
+ Adjon hozzá pontokat a távolság méréséhez, zárja be az alakzatot a terület méréséhez
+
+
+ streaming
-
+ Csatlakozás: %1
-
+ Csatlakozva, nincs pozíció
-
+ Ismeretlen pontosság
-
+ A GPS jelenleg nem elérhető
-
+ Aktív réteg kiválasztása
-
+ A projektben nem található semmilyen szerkeszthető réteg.
-
+ Nézze meg, hogy lehet engedélyezni a digitalizálást a projektjében.
-
+ Több lehetőség
-
+ Geometria felosztása
-
+ Geometria újrarajzolása
-
+ Streaming mód
-
+ Aktív
-
+ A felosztás sikeresen megtörtént
-
+ Válasszon ki egy pontot a geometria szerkesztésének megkezdéséhez
-
+ Új geometria létrehozása az elemhez
-
+ A GPS jelenleg nem elérhető.
@@ -1387,6 +1392,62 @@ Nem lesz hozzáadva a projekthez.
Tudjon meg többet %1hogyan lehet beállítani egy térkép témát%2.
+
+ MMMeasureCrosshair
+
+
+
+ Alakzat zárása
+
+
+
+ MMMeasureDrawer
+
+
+
+ Mérés
+
+
+
+
+ Ismét
+
+
+
+
+ Mégsem
+
+
+
+
+ Kerület
+
+
+
+
+ Hosszúság
+
+
+
+
+ Terület
+
+
+
+
+ Alakzat zárása
+
+
+
+
+ Pont hozzáadása
+
+
+
+
+ Kész
+
+MMMessage
@@ -2274,17 +2335,17 @@ Nem lesz hozzáadva a projekthez.
Áthelyezés
-
+ Elem
-
+ Távolság
-
+ N/A
@@ -2821,113 +2882,118 @@ legfeljebb %1 letöltött projektet engedélyez.
main
-
+ Szinkronizálás
-
+ Hozzáadás
-
+ Nem található szerkeszthető réteg.
-
+ Rétegek
-
+ Projektek
-
+ Nagyítás a projektre
-
+ Térkép témák
-
+ Pozíció követése
-
+
+
+ Mérés
+
+
+ Helyi változások
-
+ Beállítások
-
-
+
+ nincs követés
-
+ Elem kiválasztása
-
+ Valaki más is szinkronizál, később újra megpróbáljuk
-
+ Részletek
-
+ Nem sikerült kommunikálni a szerverrel. Próbálja meg javítani a hálózati kapcsolatot.
-
+ Naprakész
-
+ Probléma történt a projekt betöltése során. %1Nézze meg a részleteket%2
-
+ Az áthelyezés le van tiltva, mert a helymeghatározás nem elérhető!
-
+ Sikeresen szinkronizálva
-
+ Hiba történt a szinkronizálás során, újra megpróbáljuk. Kattintson a további információért
-
+ Nem sikerült beolvasni a projektfájlt:
-
+ Nyomja meg újra a vissza gombot az alkalmazásból való kilépéshez
diff --git a/app/i18n/input_i18n.qrc b/app/i18n/input_i18n.qrc
index 022f7565f..e5a5d2be8 100644
--- a/app/i18n/input_i18n.qrc
+++ b/app/i18n/input_i18n.qrc
@@ -1,39 +1,39 @@
- input_hr.qminput_vi_VN.qm
- input_fi.qm
- input_hr_BA.qm
- input_pl.qm
- input_es_419.qm
- input_et.qm
- input_sl.qm
- input_ar_EG.qm
- input_zh_CN.qm
- input_az.qm
- input_fr_FR.qm
+ input_zh-Hans.qminput_sl_SI.qm
- input_pt_BR.qm
- input_pt_PT.qm
- input_es_ES.qm
- input_hr_HR.qm
- input_ar_IQ.qm
- input_de.qm
- input_et_EE.qminput_ca.qm
- input_zh-Hans.qm
- input_ja_JP.qm
- input_fi_FI.qm
+ input_az_AZ.qm
+ input_hr.qm
+ input_hu.qm
+ input_es_ES.qm
+ input_ar_EG.qm
+ input_sl.qminput_ar.qm
- input_sk.qminput_it.qm
- input_es.qm
+ input_fr_FR.qm
+ input_zh_CN.qm
+ input_fi_FI.qm
+ input_de.qm
+ input_et_EE.qminput_en.qm
- input_id_ID.qm
- input_zh.qm
+ input_es_419.qm
+ input_ar_IQ.qminput_fr.qm
- input_az_AZ.qm
- input_hu.qm
+ input_az.qm
+ input_et.qm
+ input_pt_PT.qm
+ input_pl.qm
+ input_pt_BR.qm
+ input_es.qm
+ input_sk.qminput_sk_SK.qm
+ input_hr_BA.qm
+ input_hr_HR.qm
+ input_ja_JP.qm
+ input_zh.qm
+ input_fi.qm
+ input_id_ID.qm
diff --git a/app/i18n/input_it.qm b/app/i18n/input_it.qm
index cb0ccb33d..867104e83 100644
Binary files a/app/i18n/input_it.qm and b/app/i18n/input_it.qm differ
diff --git a/app/i18n/input_it.ts b/app/i18n/input_it.ts
index f92ae1fe6..857701293 100644
--- a/app/i18n/input_it.ts
+++ b/app/i18n/input_it.ts
@@ -154,7 +154,7 @@
FeaturesModel
-
+ Titolo sconosciuto
@@ -200,119 +200,119 @@ Non verrà aggiunto al progetto.
InputUtils
-
+ Proprio ora
-
+ %1 minuti fa
-
+ %1 minuto fa
-
+ %1 ore fa
-
+ %1 ora fa
-
-
+
+ %1 giorni fa
-
-
+
+ %1 giorno fa
-
+ %1 settimane fa
-
+ %1 settimana fa
-
+ %1 mesi fa
-
+ %1 mese fa
-
+ %1 anni fa
-
+ %1 anno fa
-
+ risoluzione dello schermo: %1x%2 px
-
+ DPI dello schermo: %1x%2
-
+ dimensioni dello schermo: %1x%2 mm
-
+ pixel ratio del dispositivo riportato: %1
-
+ pixel ratio del dispositivo calcolato: %1
-
+ usa scala dp: %1
-
+ È necessario aggiungere almeno %1 punti per ciascuna parte.
-
+ È necessario aggiungere almeno %1 punti.
@@ -737,7 +737,7 @@ Non verrà aggiunto al progetto.
MMFeaturesListPage
-
+ Aggiungi elemento
@@ -1274,97 +1274,102 @@ Non verrà aggiunto al progetto.
MMMapController
-
+ Contrassegna la geometria sulla mappa e premi su registra
-
+ Disegna una linea per tagliare la geometria selezionata
-
+
+
+ Aggiungi dei punti per misurare la distanza, chiudi il poligono per misurare l'area
+
+
+ streaming
-
+ Connessione a %1
-
+ Connesso, nessuna posizione
-
+ Accuratezza sconosciuta
-
+ GPS attualmente non disponibile.
-
+ Scegli un layer attivo
-
+ Impossibile trovare il layer modificabile nel progetto
-
+ Vedi come abilitare la modifica nel tuo progetto
-
+ Più opzioni
-
+ Dividi geometria
-
+ Ridisegna geometria
-
+ Modalità streaming
-
+ Attivo
-
+ Divisione eseguita con successo
-
+ Seleziona un punto per iniziare a modificare la geometria
-
+ Registra la nuova geometria per l'elemento.
-
+ GPS attualmente non disponibile.
@@ -1387,6 +1392,62 @@ Non verrà aggiunto al progetto.
Scopri come %1impostare i temi mappa%2.
+
+ MMMeasureCrosshair
+
+
+
+ Chiudi il poligono
+
+
+
+ MMMeasureDrawer
+
+
+
+ Misura
+
+
+
+
+ Ricomincia
+
+
+
+
+ Annulla
+
+
+
+
+ Perimetro
+
+
+
+
+ Lunghezza
+
+
+
+
+ Area
+
+
+
+
+ Chiudi il poligono
+
+
+
+
+ Aggiungi punto
+
+
+
+
+ Fatto
+
+MMMessage
@@ -2274,17 +2335,17 @@ Non verrà aggiunto al progetto.
Picchettamento (stake out)
-
+ Elemento
-
+ Distanza
-
+ N/A
@@ -2821,113 +2882,118 @@ consente solo fino a %1 progetti scaricati.
main
-
+ Sincronizza
-
+ Aggiungi
-
+ Non è stato trovato nessun layer modificabile.
-
+ Layer
-
+ Progetti
-
+ Ingrandisci il progetto
-
+ Temi mappa
-
+ Tracciamento posizione
-
+
+
+ Misura
+
+
+ Modifiche locali
-
+ Impostazioni
-
-
+
+ non in tracciamento
-
+ Seleziona elemento
-
+ Un altro utente sta sincronizzando, riproveremo più tardi
-
+ Dettagli
-
+ Impossibile comunicare con Mergin. Prova a migliorare la qualità della tua connessione
-
+ Aggiornato
-
+ Problemi durante il caricamento del progetto. %1Vedi i dettagli%2
-
+ Picchettamento disabilitato perché la posizione non è disponibile!
-
+ Sincronizzato con successo
-
+ Errore durante la sincronizzazione, riproveremo più tardi. Clicca per avere maggiori informazioni
-
+ Impossibile leggere il file del progetto:
-
+ Premi di nuovo indietro per uscire dall'app
diff --git a/app/i18n/input_sl.qm b/app/i18n/input_sl.qm
index 91f9f5a6a..e3995a85f 100644
Binary files a/app/i18n/input_sl.qm and b/app/i18n/input_sl.qm differ
diff --git a/app/i18n/input_sl.ts b/app/i18n/input_sl.ts
index 6a7813f45..dcdd8861b 100644
--- a/app/i18n/input_sl.ts
+++ b/app/i18n/input_sl.ts
@@ -154,7 +154,7 @@
FeaturesModel
-
+ Neznan naslov
@@ -200,119 +200,119 @@ V projekt ne bo dodano.
InputUtils
-
+ zdaj
-
+ pred %1 minutami
-
+ pred %1 minuto
-
+ pred %1 urami
-
+ pred %1 uro
-
-
+
+ pred %1 dnevi
-
-
+
+ pred %1 dnevom
-
+ pred %1 tedni
-
+ pred %1 tednom
-
+ pred %1 meseci
-
+ pred %1 mesecem
-
+ pred %1 leti
-
+ pred %1 letom
-
+ ločljivost zaslona: %1x%2 px
-
+ DPI zaslona: %1x%2
-
+ velikost zaslona: %1x%2 mm
-
+ poročano razmerje slikovnih pik naprave: %1
-
+ izračunano razmerje slikovnih pik naprave: %1
-
+ uporabljeno dp merilo: %1
-
+ Vsaj %1 točk(a) je zahtevanih za vsak del.
-
+ Dodaj vsaj %1 točk(o).
@@ -737,7 +737,7 @@ V projekt ne bo dodano.
MMFeaturesListPage
-
+ Dodaj element
@@ -912,7 +912,7 @@ V projekt ne bo dodano.
- vir
+ Vir
@@ -1125,7 +1125,7 @@ V projekt ne bo dodano.
- vir
+ Vir
@@ -1274,97 +1274,102 @@ V projekt ne bo dodano.
MMMapController
-
+ Označi geometrijo na karti in klikni na Zajemi
-
+ Nariši linijo kjer boš razdelil izbran element
-
+
+
+ Dodaj točke za izračun razdalje, zaključi lik za izračun površine
+
+
+ sledenje
-
+ povezovanje z %1
-
+ povezano, brez lokacije
-
+ neznana natančnost
-
+ GPS trenutno nedostopen.
-
+ Izberi sloj za urejanje
-
+ Ne najdem sloja za urejanje v projektu.
-
+ Oglej si, kako omogočiti urejanje v vašem projektu.
-
+ Več možnosti
-
+ Razdeli geometrijo
-
+ Osveži geometrijo
-
+ Način sledenja
-
+ Aktiven
-
+ Delitev uspela
-
+ Izberi nekaj točk za začetek urejanja geometrije
-
+ Zajemi novo geometrijo za element
-
+ GPS trenutno nedostopen.
@@ -1387,6 +1392,62 @@ V projekt ne bo dodano.
Preberi si %1kako nastaviti teme v projektu%2.
+
+ MMMeasureCrosshair
+
+
+
+ Zaključi lik
+
+
+
+ MMMeasureDrawer
+
+
+
+ Meri
+
+
+
+
+ Ponovi
+
+
+
+
+ Razveljavi
+
+
+
+
+ Obseg
+
+
+
+
+ Dolžina
+
+
+
+
+ Površina
+
+
+
+
+ Zaključi lik
+
+
+
+
+ Dodaj točko
+
+
+
+
+ Končaj
+
+MMMessage
@@ -2274,17 +2335,17 @@ V projekt ne bo dodano.
Zakoličba
-
+ Element
-
+ razdalja
-
+ N/A
@@ -2821,113 +2882,118 @@ omogoča do %1 prenešenih projektov.
main
-
+ Sinhr.
-
+ Dodaj
-
+ Ni slojev za urejanje.
-
+ Sloji
-
+ Projekti
-
+ Prikaži vse
-
+ Teme
-
+ Sledenje lokacije
-
+
+
+ Meri
+
+
+ Lokalne spremembe
-
+ Nastavitve
-
-
+
+ sledenje se ne izvaja
-
+ Izberi element
-
+ Sinhronizacija je ravno v teku, bomo poskusili kasneje
-
+ podrobnosti
-
+ Napaka pri povezavi z Merginom. Poskusi izboljšati omrežno povezavo.
-
+ Posodobljeno
-
+ Napake pri odpiranju projekta. %1Podrobnosti%2
-
+ Zakoličba ni mogoča, ker lokacija ni na voljo!
-
+ Uspešno sinhronizirano
-
+ Pri sinhronizaciji je prišlo do napake, bomo še poskušali kasneje. Več informacij
-
+ Ne morem prebrati projekta:
-
+ Ponovni pritisni nazaj za izhod iz aplikacije
diff --git a/app/i18n/input_sl_SI.qm b/app/i18n/input_sl_SI.qm
index b375e978f..016e8f22e 100644
Binary files a/app/i18n/input_sl_SI.qm and b/app/i18n/input_sl_SI.qm differ
diff --git a/app/i18n/input_sl_SI.ts b/app/i18n/input_sl_SI.ts
index 835b58300..fa40361b5 100644
--- a/app/i18n/input_sl_SI.ts
+++ b/app/i18n/input_sl_SI.ts
@@ -154,7 +154,7 @@
FeaturesModel
-
+ Neznan naslov
@@ -200,119 +200,119 @@ V projekt ne bo dodano.
InputUtils
-
+ zdaj
-
+ pred %1 minutami
-
+ pred %1 minuto
-
+ pred %1 urami
-
+ pred %1 uro
-
-
+
+ pred %1 dnevi
-
-
+
+ pred %1 dnevom
-
+ pred %1 tedni
-
+ pred %1 tednom
-
+ pred %1 meseci
-
+ pred %1 mesecem
-
+ pred %1 leti
-
+ pred %1 letom
-
+ ločljivost zaslona: %1x%2 px
-
+ DPI zaslona: %1x%2
-
+ velikost zaslona: %1x%2 mm
-
+ poročano razmerje slikovnih pik naprave: %1
-
+ izračunano razmerje slikovnih pik naprave: %1
-
+ uporabljeno dp merilo: %1
-
+ Vsaj %1 točka je zahtevana za vsak del.
-
+ Dodaj vsa %1 točk()
@@ -737,7 +737,7 @@ V projekt ne bo dodano.
MMFeaturesListPage
-
+ Dodaj element
@@ -1274,97 +1274,102 @@ V projekt ne bo dodano.
MMMapController
-
+ Označi geometrijo na karti in klikni na Snemanje
-
+ Nariši linijo kjer boš razdelil izbran element
-
+
+
+ Dodaj točke za izračun razdalje, zaključi lik za izračun površine
+
+
+ pretakanje
-
+ povezovanje z %1
-
+ povezano, brez lokacije
-
+ neznana natančnost
-
+ GPS trenutno nedostopen.
-
+ Izberi sloj za urejanje
-
+ Ne najdem sloja za urejanje v projektu.
-
+ Oglej si, kako omogočiti urejanje v vašem projektu.
-
+ Več možnosti
-
+ Razdeli geometrijo
-
+ Osveži geometrijo
-
+ pretočni način
-
+ Aktiven
-
+ Delitev uspela
-
+ Izberi nekaj točk za začetek urejanja geometrije
-
+ Posnemi novo geometrijo za element
-
+ GPS trenutno nedostopen.
@@ -1387,6 +1392,62 @@ V projekt ne bo dodano.
Podrobnosti o tem %1kako nastaviti teme v projektu%2.
+
+ MMMeasureCrosshair
+
+
+
+ Zaključi lik
+
+
+
+ MMMeasureDrawer
+
+
+
+ Meri
+
+
+
+
+ Ponovi
+
+
+
+
+ Razveljavi
+
+
+
+
+ Obseg
+
+
+
+
+ Dolžina
+
+
+
+
+ Površina
+
+
+
+
+ Zaključi lik
+
+
+
+
+ Dodaj točko
+
+
+
+
+ Končaj
+
+MMMessage
@@ -2274,17 +2335,17 @@ V projekt ne bo dodano.
Zakoličba
-
+ Element
-
+ razdalja
-
+ N/A
@@ -2821,113 +2882,118 @@ omogoča do %1 prenešenih projektov.
main
-
+ Sinhr.
-
+ Dodaj
-
+ Ni slojev za urejanje.
-
+ Sloji
-
+ Projekti
-
+ Prikaži vse
-
+ Teme
-
+ Sledenje lokacije
-
+
+
+ Meri
+
+
+ Lokalne spremembe
-
+ Nastavitve
-
-
+
+ sledenje se ne izvaja
-
+ Izberi element
-
+ Sinhronizacija je ravno v teku, bomo poskusili kasneje
-
+ podrobnosti
-
+ Napaka pri povezavi z Merginom. Poskusi izboljšati omrežno povezavo.
-
+ Posodobljeno
-
+ Napake pri odpiranju projekta. %1Podrobnosti%2
-
+ Zakoličba ni mogoča, ker lokacija ni na voljo!
-
+ Uspešno sinhronizirano
-
+ Pri sinhronizaciji je prišlo do napake, bomo še poskušali kasneje. Več informacij
-
+ Ne morem prebrati projekta:
-
+ Ponovni pritisni nazaj za izhodi iz aplikacije
diff --git a/app/icons/CloseShape.svg b/app/icons/CloseShape.svg
new file mode 100644
index 000000000..594a3a78e
--- /dev/null
+++ b/app/icons/CloseShape.svg
@@ -0,0 +1,7 @@
+
diff --git a/app/icons/Measure.svg b/app/icons/Measure.svg
new file mode 100644
index 000000000..0666bf957
--- /dev/null
+++ b/app/icons/Measure.svg
@@ -0,0 +1,7 @@
+
diff --git a/app/icons/icons.qrc b/app/icons/icons.qrc
index c3f553a97..3f88e0ec6 100644
--- a/app/icons/icons.qrc
+++ b/app/icons/icons.qrc
@@ -97,5 +97,7 @@
ZoomToProject.svgStakeOut.svgStudent.svg
+ Measure.svg
+ CloseShape.svg
diff --git a/app/images/NeutralMMSymbol.svg b/app/images/NeutralMMSymbol.svg
new file mode 100644
index 000000000..e31c406a2
--- /dev/null
+++ b/app/images/NeutralMMSymbol.svg
@@ -0,0 +1,23 @@
+
diff --git a/app/images/images.qrc b/app/images/images.qrc
index ac0474d90..b0b772a30 100644
--- a/app/images/images.qrc
+++ b/app/images/images.qrc
@@ -23,6 +23,7 @@
ExternalGpsGreen.svgNegativeMMSymbol.svgPositiveMMSymbol.svg
+ NeutralMMSymbol.svgCloseAccount.svgAttention.svgBubble.svg
diff --git a/app/inpututils.cpp b/app/inpututils.cpp
index 5b40e14c0..218c024e1 100644
--- a/app/inpututils.cpp
+++ b/app/inpututils.cpp
@@ -168,25 +168,48 @@ QString InputUtils::formatNumber( const double number, int precision )
return QString::number( number, 'f', precision );
}
-QString InputUtils::formatDistanceInProjectUnit( const double distanceInMeters, int precision, Qgis::DistanceUnit destUnit )
+QString InputUtils::formatDistanceInProjectUnit( const double distanceInMeters, int precision, QgsProject *project )
{
- Qgis::DistanceUnit distUnit = destUnit;
+ if ( !project )
+ return QString();
+
+ return InputUtils::formatDistanceHelper( distanceInMeters, precision, project->distanceUnits() );
+}
- if ( distUnit == Qgis::DistanceUnit::Unknown )
+QString InputUtils::formatDistanceHelper( const double distanceInMeters, int precision, Qgis::DistanceUnit destUnit )
+{
+ if ( destUnit == Qgis::DistanceUnit::Unknown )
{
- distUnit = QgsProject::instance()->distanceUnits();
+ destUnit = Qgis::DistanceUnit::Meters;
}
- if ( distUnit == Qgis::DistanceUnit::Unknown )
+ const double factor = QgsUnitTypes::fromUnitToUnitFactor( Qgis::DistanceUnit::Meters, destUnit );
+ const double distance = distanceInMeters * factor;
+ const QString abbreviation = QgsUnitTypes::toAbbreviatedString( destUnit );
+
+ return QString( "%L1 %2" ).arg( QString::number( distance, 'f', precision ), abbreviation );
+}
+
+QString InputUtils::formatAreaInProjectUnit( const double areaInSquareMeters, int precision, QgsProject *project )
+{
+ if ( !project )
+ return QString();
+
+ return InputUtils::formatAreaHelper( areaInSquareMeters, precision, project->areaUnits() );
+}
+
+QString InputUtils::formatAreaHelper( const double areaInSquareMeters, int precision, Qgis::AreaUnit destUnit )
+{
+ if ( destUnit == Qgis::AreaUnit::Unknown )
{
- return QString::number( distanceInMeters, 'f', precision );
+ destUnit = Qgis::AreaUnit::SquareMeters;
}
- double factor = QgsUnitTypes::fromUnitToUnitFactor( Qgis::DistanceUnit::Meters, distUnit );
- double distance = distanceInMeters * factor;
- QString abbreviation = QgsUnitTypes::toAbbreviatedString( distUnit );
+ const double factor = QgsUnitTypes::fromUnitToUnitFactor( Qgis::AreaUnit::SquareMeters, destUnit );
+ const double area = areaInSquareMeters * factor;
+ const QString abbreviation = QgsUnitTypes::toAbbreviatedString( destUnit );
- return QString( "%1 %2" ).arg( QString::number( distance, 'f', precision ), abbreviation );
+ return QString( "%L1 %2" ).arg( QString::number( area, 'f', precision ), abbreviation );
}
QString InputUtils::formatDateTimeDiff( const QDateTime &tMin, const QDateTime &tMax )
@@ -2194,3 +2217,8 @@ bool InputUtils::openLink( const QString &homePath, const QString &link )
return true;
}
+
+double InputUtils::pixelDistanceBetween( const QPointF &p1, const QPointF &p2 )
+{
+ return std::hypot( p1.x() - p2.x(), p1.y() - p2.y() );
+}
diff --git a/app/inpututils.h b/app/inpututils.h
index 2ba463900..83be81f39 100644
--- a/app/inpututils.h
+++ b/app/inpututils.h
@@ -75,7 +75,12 @@ class InputUtils: public QObject
Q_INVOKABLE QString getFileName( const QString &filePath );
Q_INVOKABLE QString formatProjectName( const QString &fullProjectName );
Q_INVOKABLE QString formatNumber( const double number, int precision = 1 );
- Q_INVOKABLE QString formatDistanceInProjectUnit( const double distanceInMeters, int precision = 1, Qgis::DistanceUnit destUnit = Qgis::DistanceUnit::Unknown );
+ Q_INVOKABLE QString formatDistanceInProjectUnit( const double distanceInMeters, int precision, QgsProject *project );
+ Q_INVOKABLE QString formatAreaInProjectUnit( const double areaInSquareMeters, int precision, QgsProject *project );
+
+ static QString formatDistanceHelper( const double distanceInMeters, int precision, Qgis::DistanceUnit destUnit );
+ static QString formatAreaHelper( const double areaInSquareMeters, int precision, Qgis::AreaUnit destUnit );
+
Q_INVOKABLE void setExtentToFeature( const FeatureLayerPair &pair, InputMapSettings *mapSettings );
/**
@@ -579,6 +584,11 @@ class InputUtils: public QObject
*/
static QVector qgisProfilerLog();
+ /**
+ * Calculates the Euclidean distance between two pixel points
+ */
+ static double pixelDistanceBetween( const QPointF &p1, const QPointF &p2 );
+
public slots:
void onQgsLogMessageReceived( const QString &message, const QString &tag, Qgis::MessageLevel level );
diff --git a/app/main.cpp b/app/main.cpp
index d0c35cd24..2ff044e83 100644
--- a/app/main.cpp
+++ b/app/main.cpp
@@ -114,6 +114,7 @@
#include "maptools/abstractmaptool.h"
#include "maptools/recordingmaptool.h"
#include "maptools/splittingmaptool.h"
+#include "maptools/measurementmaptool.h"
#include "layer/layertreemodel.h"
#include "layer/layertreemodelpixmapprovider.h"
@@ -348,6 +349,7 @@ void initDeclarative()
qmlRegisterUncreatableType< AbstractMapTool >( "mm", 1, 0, "AbstractMapTool", "Instantiate one of child map tools instead" );
qmlRegisterType< RecordingMapTool >( "mm", 1, 0, "RecordingMapTool" );
qmlRegisterType< SplittingMapTool >( "mm", 1, 0, "SplittingMapTool" );
+ qmlRegisterType< MeasurementMapTool >( "mm", 1, 0, "MeasurementMapTool" );
}
void addQmlImportPath( QQmlEngine &engine )
diff --git a/app/maptools/abstractmaptool.cpp b/app/maptools/abstractmaptool.cpp
index dd8b25636..ee81f1dc0 100644
--- a/app/maptools/abstractmaptool.cpp
+++ b/app/maptools/abstractmaptool.cpp
@@ -26,6 +26,10 @@ void AbstractMapTool::setMapSettings( InputMapSettings *newMapSettings )
{
if ( mMapSettings == newMapSettings )
return;
+
+ emit onAboutToChangeMapSettings();
+
mMapSettings = newMapSettings;
+
emit mapSettingsChanged( mMapSettings );
}
diff --git a/app/maptools/abstractmaptool.h b/app/maptools/abstractmaptool.h
index ec6a9ca99..e6eba3532 100644
--- a/app/maptools/abstractmaptool.h
+++ b/app/maptools/abstractmaptool.h
@@ -30,11 +30,10 @@ class AbstractMapTool : public QObject
void setMapSettings( InputMapSettings *newMapSettings );
signals:
-
+ void onAboutToChangeMapSettings();
void mapSettingsChanged( InputMapSettings *mapSettings );
private:
-
InputMapSettings *mMapSettings = nullptr;
};
diff --git a/app/maptools/measurementmaptool.cpp b/app/maptools/measurementmaptool.cpp
new file mode 100644
index 000000000..dcaad908b
--- /dev/null
+++ b/app/maptools/measurementmaptool.cpp
@@ -0,0 +1,319 @@
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ ***************************************************************************/
+
+#include "measurementmaptool.h"
+
+MeasurementMapTool::MeasurementMapTool( QObject *parent )
+ : AbstractMapTool{ parent }
+{
+ connect( this, &AbstractMapTool::onAboutToChangeMapSettings, this, &MeasurementMapTool::resetMapSettings );
+ connect( this, &AbstractMapTool::mapSettingsChanged, this, &MeasurementMapTool::updateMapSettings );
+}
+
+MeasurementMapTool::~MeasurementMapTool() = default;
+
+void MeasurementMapTool::addPoint()
+{
+ if ( mapSettings() )
+ {
+ QgsPoint transformedPoint = mapSettings()->screenToCoordinate( mCrosshairPoint );
+
+ if ( !mPoints.empty() && transformedPoint == mPoints.back() )
+ return;
+
+ mPoints.push_back( transformedPoint );
+ rebuildGeometry();
+ }
+}
+
+void MeasurementMapTool::removePoint()
+{
+ if ( !mPoints.isEmpty() && mapSettings() )
+ {
+ mPoints.pop_back();
+ checkCanCloseShape();
+ rebuildGeometry();
+ updateDistance();
+ }
+}
+
+void MeasurementMapTool::updateDistance()
+{
+ if ( mPoints.isEmpty() || !mapSettings() )
+ {
+ setLengthWithGuideline( 0.0 );
+ return;
+ }
+
+ checkCanCloseShape();
+
+ QgsPoint lastPoint = mPoints.last();
+ QgsPoint transformedCrosshairPoint = mapSettings()->screenToCoordinate( mCrosshairPoint );
+
+ double calculatedLength = mPerimeter + mDistanceArea.measureLine( transformedCrosshairPoint, lastPoint );
+ setLengthWithGuideline( calculatedLength );
+}
+
+void MeasurementMapTool::checkCanCloseShape()
+{
+ if ( !mRecordedGeometry.isEmpty() && mapSettings() && mPoints.count() < 3 )
+ {
+ setCanCloseShape( false );
+ return;
+ }
+
+ QgsPoint firstPoint = mPoints.first();
+ QPointF firstPointScreen = mapSettings()->coordinateToScreen( firstPoint );
+ double distanceToFirstPoint = InputUtils::pixelDistanceBetween( mCrosshairPoint, firstPointScreen );
+ setCanCloseShape( distanceToFirstPoint <= CLOSE_THRESHOLD );
+}
+
+void MeasurementMapTool::finalizeMeasurement( bool closeShapeClicked )
+{
+ if ( mPoints.count() < 2 || !mapSettings() )
+ return;
+
+ QList pointList;
+ for ( const QgsPoint &point : mPoints )
+ pointList.append( QgsPointXY( point.x(), point.y() ) );
+
+ QgsGeometry geometry;
+ double perimeter = 0.0;
+
+ if ( closeShapeClicked && mCanCloseShape )
+ {
+ geometry = QgsGeometry::fromPolygonXY( QList>() << pointList );
+ perimeter = mDistanceArea.measurePerimeter( geometry );
+ setArea( mDistanceArea.measureArea( geometry ) );
+ setCanCloseShape( false );
+ }
+ else
+ {
+ geometry = QgsGeometry::fromPolylineXY( pointList );
+ perimeter = mDistanceArea.measureLength( geometry );
+ }
+
+ setRecordedGeometry( geometry );
+ setPerimeter( perimeter );
+ setMeasurementFinalized( true );
+}
+
+void MeasurementMapTool::resetMeasurement()
+{
+ mPoints.clear();
+
+ setPerimeter( 0.0 );
+ setArea( 0.0 );
+ setLengthWithGuideline( 0.0 );
+ setCanCloseShape( false );
+ setMeasurementFinalized( false );
+
+ rebuildGeometry();
+}
+
+void MeasurementMapTool::rebuildGeometry()
+{
+ if ( !mapSettings() )
+ return;
+
+ QgsGeometry geometry;
+
+ QgsMultiPoint *existingVertices = new QgsMultiPoint();
+ mExistingVertices.set( existingVertices );
+
+ if ( mPoints.count() > 0 )
+ {
+ geometry = QgsGeometry::fromPolyline( mPoints );
+
+ for ( const QgsPoint &point : mPoints )
+ {
+ existingVertices->addGeometry( point.clone() );
+ }
+
+ double perimeter = mDistanceArea.measureLength( geometry );
+ setPerimeter( perimeter );
+ setCanUndo( true );
+ }
+ else
+ {
+ setCanUndo( false );
+ }
+
+ // If we have more two or more points, "Done" button will be enabled
+ bool hasValidGeometry = !mRecordedGeometry.isEmpty() && mPoints.count() >= 2;
+ setIsValidGeometry( hasValidGeometry );
+
+ emit existingVerticesChanged( mExistingVertices );
+ setRecordedGeometry( geometry );
+}
+
+void MeasurementMapTool::resetMapSettings()
+{
+ InputMapSettings *currentMapSettings = mapSettings();
+
+ if ( currentMapSettings )
+ {
+ disconnect( currentMapSettings );
+ }
+}
+
+void MeasurementMapTool::updateMapSettings( InputMapSettings *newMapSettings )
+{
+ AbstractMapTool::setMapSettings( newMapSettings );
+
+ InputMapSettings *updatedMapSettings = mapSettings();
+
+ if ( updatedMapSettings )
+ {
+ connect( updatedMapSettings, &InputMapSettings::extentChanged, this, &MeasurementMapTool::updateDistance );
+
+ mDistanceArea.setEllipsoid( updatedMapSettings->project()->ellipsoid() );
+ mDistanceArea.setSourceCrs( updatedMapSettings->destinationCrs(), updatedMapSettings->transformContext() );
+ }
+}
+
+const QgsGeometry &MeasurementMapTool::recordedGeometry() const
+{
+ return mRecordedGeometry;
+}
+
+QgsGeometry MeasurementMapTool::existingVertices() const
+{
+ return mExistingVertices;
+}
+
+void MeasurementMapTool::setExistingVertices( const QgsGeometry &vertices )
+{
+ if ( mExistingVertices.equals( vertices ) )
+ return;
+
+ mExistingVertices = vertices;
+ emit existingVerticesChanged( mExistingVertices );
+}
+
+double MeasurementMapTool::area() const
+{
+ return mArea;
+}
+
+double MeasurementMapTool::perimeter() const
+{
+ return mPerimeter;
+}
+
+QPointF MeasurementMapTool::crosshairPoint() const
+{
+ return mCrosshairPoint;
+}
+
+double MeasurementMapTool::lengthWithGuideline() const
+{
+ return mLengthWithGuideline;
+}
+
+bool MeasurementMapTool::canUndo() const
+{
+ return mCanUndo;
+}
+
+void MeasurementMapTool::setCanUndo( bool newCanUndo )
+{
+ if ( mCanUndo == newCanUndo )
+ return;
+
+ mCanUndo = newCanUndo;
+ emit canUndoChanged( mCanUndo );
+}
+
+bool MeasurementMapTool::canCloseShape() const
+{
+ return mCanCloseShape;
+}
+
+void MeasurementMapTool::setCanCloseShape( bool newCanCloseShape )
+{
+ if ( mCanCloseShape == newCanCloseShape )
+ return;
+
+ mCanCloseShape = newCanCloseShape;
+ emit canCloseShapeChanged( mCanCloseShape );
+}
+
+bool MeasurementMapTool::isValidGeometry() const
+{
+ return mIsValidGeometry;
+}
+
+void MeasurementMapTool::setIsValidGeometry( bool hasValidGeometry )
+{
+ if ( mIsValidGeometry != hasValidGeometry )
+ {
+ mIsValidGeometry = hasValidGeometry;
+ emit isValidGeometryChanged( hasValidGeometry );
+ }
+}
+
+bool MeasurementMapTool::measurementFinalized() const
+{
+ return mMeasurementFinalized;
+}
+
+void MeasurementMapTool::setMeasurementFinalized( bool newMeasurementFinalized )
+{
+ if ( mMeasurementFinalized == newMeasurementFinalized )
+ return;
+
+ mMeasurementFinalized = newMeasurementFinalized;
+ emit measurementFinalizedChanged( mMeasurementFinalized );
+}
+
+void MeasurementMapTool::setRecordedGeometry( const QgsGeometry &newRecordedGeometry )
+{
+ if ( mRecordedGeometry.equals( newRecordedGeometry ) )
+ return;
+
+ mRecordedGeometry = newRecordedGeometry;
+ emit recordedGeometryChanged( mRecordedGeometry );
+}
+
+void MeasurementMapTool::setLengthWithGuideline( const double &lengthWithGuideline )
+{
+ if ( mLengthWithGuideline == lengthWithGuideline )
+ return;
+
+ mLengthWithGuideline = lengthWithGuideline;
+ emit lengthWithGuidelineChanged( lengthWithGuideline );
+}
+
+void MeasurementMapTool::setArea( const double &area )
+{
+ if ( mArea == area )
+ return;
+
+ mArea = area;
+ emit areaChanged( area );
+}
+
+void MeasurementMapTool::setPerimeter( const double &perimeter )
+{
+ if ( mPerimeter == perimeter )
+ return;
+
+ mPerimeter = perimeter;
+ emit perimeterChanged( perimeter );
+}
+
+void MeasurementMapTool::setCrosshairPoint( const QPointF &point )
+{
+ if ( mCrosshairPoint == point )
+ return;
+
+ mCrosshairPoint = point;
+ emit crosshairPointChanged( mCrosshairPoint );
+}
diff --git a/app/maptools/measurementmaptool.h b/app/maptools/measurementmaptool.h
new file mode 100644
index 000000000..1d041b203
--- /dev/null
+++ b/app/maptools/measurementmaptool.h
@@ -0,0 +1,139 @@
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ ***************************************************************************/
+
+#ifndef MEASUREMENTMAPTOOL_H
+#define MEASUREMENTMAPTOOL_H
+
+#include "abstractmaptool.h"
+#include
+#include "qgsdistancearea.h"
+#include "qgsgeometry.h"
+#include "inpututils.h"
+#include "qgspolygon.h"
+#include "qgsgeometry.h"
+#include "qgsvectorlayer.h"
+#include "qgsmultipoint.h"
+
+const double CLOSE_THRESHOLD = 10.0; // in pixels
+
+class MeasurementMapTool : public AbstractMapTool
+{
+ Q_OBJECT
+
+ Q_PROPERTY( QgsGeometry recordedGeometry READ recordedGeometry WRITE setRecordedGeometry NOTIFY recordedGeometryChanged )
+ Q_PROPERTY( QgsGeometry existingVertices READ existingVertices WRITE setExistingVertices NOTIFY existingVerticesChanged )
+ Q_PROPERTY( QPointF crosshairPoint READ crosshairPoint WRITE setCrosshairPoint NOTIFY crosshairPointChanged )
+
+ Q_PROPERTY( double lengthWithGuideline READ lengthWithGuideline WRITE setLengthWithGuideline NOTIFY lengthWithGuidelineChanged )
+ Q_PROPERTY( double perimeter READ perimeter WRITE setPerimeter NOTIFY perimeterChanged )
+ Q_PROPERTY( double area READ area WRITE setArea NOTIFY areaChanged )
+
+ Q_PROPERTY( bool canUndo READ canUndo WRITE setCanUndo NOTIFY canUndoChanged )
+ Q_PROPERTY( bool canCloseShape READ canCloseShape WRITE setCanCloseShape NOTIFY canCloseShapeChanged )
+ Q_PROPERTY( bool isValidGeometry READ isValidGeometry WRITE setIsValidGeometry NOTIFY isValidGeometryChanged )
+ Q_PROPERTY( bool measurementFinalized READ measurementFinalized WRITE setMeasurementFinalized NOTIFY measurementFinalizedChanged )
+
+ public:
+ explicit MeasurementMapTool( QObject *parent = nullptr );
+ virtual ~MeasurementMapTool() override;
+
+ /**
+ * Adds point to the end of the recorded geometry; updates recordedGeometry afterwards
+ * Passed point needs to be in map CRS
+ */
+ Q_INVOKABLE void addPoint();
+
+ /**
+ * Removes last point from recorded geometry if there is at least one point
+ * Updates recordedGeometry afterwards
+ */
+ Q_INVOKABLE void removePoint();
+
+ /**
+ * Finalizes measurement by forming a polygon if "Close shape" button was clicked
+ * and there are at least 3 points; otherwise, if "Done" button was clicked, forms a polyline.
+ * Updates recorded geometry, calculates perimeter, and calculates the area if it's a polygon.
+ */
+ Q_INVOKABLE void finalizeMeasurement( bool closeShapeClicked );
+
+ /**
+ * Repeats measurement process.
+ * Clears all recorded points and rebuilds the geometry.
+ */
+ Q_INVOKABLE void resetMeasurement();
+
+ // Getter and Setters
+ double lengthWithGuideline() const;
+ void setLengthWithGuideline( const double &length );
+
+ double perimeter() const;
+ void setPerimeter( const double &perimeter );
+
+ double area() const;
+ void setArea( const double &area );
+
+ QPointF crosshairPoint() const;
+ void setCrosshairPoint( const QPointF &point );
+
+ bool canUndo() const;
+ void setCanUndo( bool newCanUndo );
+
+ bool canCloseShape() const;
+ void setCanCloseShape( bool newCanCloseShape );
+
+ bool isValidGeometry() const;
+ void setIsValidGeometry( bool hasValidGeometry );
+
+ bool measurementFinalized() const;
+ void setMeasurementFinalized( bool newMeasurementFinalized );
+
+ const QgsGeometry &recordedGeometry() const;
+ void setRecordedGeometry( const QgsGeometry &newRecordedGeometry );
+
+ QgsGeometry existingVertices() const;
+ void setExistingVertices( const QgsGeometry &vertices );
+
+ void resetMapSettings();
+ void updateMapSettings( InputMapSettings *newMapSettings );
+
+ signals:
+ void lengthWithGuidelineChanged( const double &lengthWithGuideline );
+ void perimeterChanged( const double &perimeter );
+ void areaChanged( const double &area );
+ void canUndoChanged( bool canUndo );
+ void canCloseShapeChanged( bool canUndo );
+ void measurementFinalizedChanged( bool measurementFinalized );
+ void recordedGeometryChanged( const QgsGeometry &recordedGeometry );
+ void existingVerticesChanged( const QgsGeometry &vertices );
+ void crosshairPointChanged( const QPointF &crosshairPoint );
+ void isValidGeometryChanged( bool canFinalize );
+
+ protected:
+ void rebuildGeometry();
+ void checkCanCloseShape();
+
+ public slots:
+ void updateDistance();
+
+ private:
+ QVector mPoints;
+ QgsGeometry mRecordedGeometry;
+ QgsGeometry mExistingVertices;
+ QgsDistanceArea mDistanceArea;
+ QPointF mCrosshairPoint;
+ double mLengthWithGuideline = 0;
+ double mPerimeter = 0;
+ double mArea = 0;
+ bool mCanUndo = false;
+ bool mCanCloseShape = false;
+ bool mIsValidGeometry = false;
+ bool mMeasurementFinalized = false;
+};
+
+#endif // MEASUREMENTMAPTOOL_H
diff --git a/app/mmstyle.h b/app/mmstyle.h
index 7d65b0e91..16587bb81 100644
--- a/app/mmstyle.h
+++ b/app/mmstyle.h
@@ -168,6 +168,8 @@ class MMStyle: public QObject
Q_PROPERTY( QUrl streamingIcon READ streamingIcon CONSTANT )
Q_PROPERTY( QUrl redrawGeometryIcon READ redrawGeometryIcon CONSTANT )
Q_PROPERTY( QUrl cloudIcon READ cloudIcon CONSTANT )
+ Q_PROPERTY( QUrl measurementToolIcon READ measurementToolIcon CONSTANT )
+ Q_PROPERTY( QUrl closeShapeIcon READ closeShapeIcon CONSTANT )
// Filled Icons - for visualizing of selected item in toolbar
Q_PROPERTY( QUrl projectsFilledIcon READ projectsFilledIcon CONSTANT )
@@ -215,6 +217,7 @@ class MMStyle: public QObject
Q_PROPERTY( QUrl externalGpsRedImage READ externalGpsRedImage CONSTANT )
Q_PROPERTY( QUrl negativeMMSymbolImage READ negativeMMSymbolImage CONSTANT )
Q_PROPERTY( QUrl positiveMMSymbolImage READ positiveMMSymbolImage CONSTANT )
+ Q_PROPERTY( QUrl neutralMMSymbolImage READ neutralMMSymbolImage CONSTANT )
Q_PROPERTY( QUrl closeAccountImage READ closeAccountImage CONSTANT )
Q_PROPERTY( QUrl attentionImage READ attentionImage CONSTANT )
Q_PROPERTY( QUrl blueInfoImage READ blueInfoImage CONSTANT )
@@ -276,7 +279,9 @@ class MMStyle: public QObject
// Page
Q_PROPERTY( double pageMargins READ number20 CONSTANT ) // distance between screen edge and components
+ Q_PROPERTY( double spacing2 READ number2 CONSTANT )
Q_PROPERTY( double spacing5 READ number5 CONSTANT )
+ Q_PROPERTY( double spacing10 READ number10 CONSTANT )
Q_PROPERTY( double spacing12 READ number12 CONSTANT ) // distance between page header, page content and page footer
Q_PROPERTY( double spacing20 READ number20 CONSTANT )
Q_PROPERTY( double spacing30 READ number30 CONSTANT )
@@ -422,6 +427,8 @@ class MMStyle: public QObject
QUrl moreVerticalIcon() {return QUrl( "qrc:/MoreVertical.svg" );}
QUrl morePhotosIcon() {return QUrl( "qrc:/MorePhotos.svg" );}
QUrl mouthIcon() {return QUrl( "qrc:/Mouth.svg" );}
+ QUrl measurementToolIcon() {return QUrl( "qrc:/Measure.svg" );}
+ QUrl closeShapeIcon() {return QUrl( "qrc:/CloseShape.svg" );}
QUrl naturalResourcesIcon() {return QUrl( "qrc:/NaturalResources.svg" );}
QUrl nextIcon() {return QUrl( "qrc:/Next.svg" );}
QUrl otherIcon() {return QUrl( "qrc:/Other.svg" );}
@@ -498,6 +505,7 @@ class MMStyle: public QObject
QUrl externalGpsRedImage() {return QUrl( "qrc:/images/ExternalGpsRed.svg" );}
QUrl negativeMMSymbolImage() {return QUrl( "qrc:/images/NegativeMMSymbol.svg" );}
QUrl positiveMMSymbolImage() {return QUrl( "qrc:/images/PositiveMMSymbol.svg" );}
+ QUrl neutralMMSymbolImage() {return QUrl( "qrc:/images/NeutralMMSymbol.svg" );}
QUrl closeAccountImage() {return QUrl( "qrc:/images/CloseAccount.svg" );}
QUrl attentionImage() {return QUrl( "qrc:/images/Attention.svg" );}
QUrl blueInfoImage() {return QUrl( "qrc:/images/BlueInfo.svg" );}
diff --git a/app/qml/CMakeLists.txt b/app/qml/CMakeLists.txt
index bf848bd61..ccf99a8d5 100644
--- a/app/qml/CMakeLists.txt
+++ b/app/qml/CMakeLists.txt
@@ -116,6 +116,7 @@ set(MM_QML
gps/MMGpsDataDrawer.qml
gps/MMPositionProviderPage.qml
gps/MMStakeoutDrawer.qml
+ gps/MMMeasureDrawer.qml
gps/components/MMGpsDataText.qml
inputs/MMComboboxInput.qml
inputs/MMPasswordInput.qml
@@ -135,8 +136,10 @@ set(MM_QML
map/MMSplittingTools.qml
map/MMStakeoutTools.qml
map/MMRecordingTools.qml
+ map/MMMeasurementTools.qml
map/components/MMHidingBox.qml
map/components/MMCrosshair.qml
+ map/components/MMMeasureCrosshair.qml
map/components/MMMapHidingLabel.qml
map/components/MMMapButton.qml
map/components/MMMapLabel.qml
diff --git a/app/qml/components/MMButton.qml b/app/qml/components/MMButton.qml
index 631a26b3e..3cce97fc9 100644
--- a/app/qml/components/MMButton.qml
+++ b/app/qml/components/MMButton.qml
@@ -15,8 +15,10 @@ Button {
id: root
enum Types { Primary, Secondary, Tertiary }
+ enum Sizes { Small, Regular }
property int type: MMButton.Types.Primary
+ property int size: MMButton.Sizes.Regular
property color fontColor: {
if ( type === MMButton.Types.Primary ) return __style.forestColor
@@ -161,10 +163,10 @@ Button {
state: "default"
implicitHeight: root.type === MMButton.Types.Tertiary ? buttonContent.height : buttonContent.height + topPadding + bottomPadding
- implicitWidth: row.paintedChildrenWidth + 2 * __style.margin20
+ implicitWidth: row.paintedChildrenWidth + 2 * ( root.size === MMButton.Sizes.Small ? __style.margin16 : __style.margin20 )
- topPadding: root.type === MMButton.Types.Tertiary ? 0 : 11 * __dp
- bottomPadding: root.type === MMButton.Types.Tertiary ? 0 : 11 * __dp
+ topPadding: ( root.type === MMButton.Types.Tertiary ) ? 0 : 11 * __dp
+ bottomPadding: ( root.type === MMButton.Types.Tertiary ) ? 0 : 11 * __dp
rightPadding: 0
leftPadding: 0
@@ -177,14 +179,21 @@ Button {
id: row
property real paintedChildrenWidth: buttonIconLeft.paintedWidth + buttonContent.implicitWidth + buttonIconRight.paintedWidth + spacing
- property real maxWidth: parent.width - 2 * __style.margin20
+ property real maxWidth: parent.width - 2 * ( root.size === MMButton.Sizes.Small ? __style.margin16 : __style.margin20 )
x: ( parent.width - width ) / 2
width: Math.min( paintedChildrenWidth, maxWidth )
height: Math.max( buttonContent.paintedHeight, buttonIconRight.height )
- spacing: buttonIconRight.visible || buttonIconLeft.visible ? __style.spacing12 : 0
+ spacing: {
+ if ( ( root.size === MMButton.Sizes.Small ) )
+ return __style.spacing2;
+ else if ( ( buttonIconRight.visible || buttonIconLeft.visible ) )
+ return __style.spacing12;
+ else
+ return 0;
+ }
MMIcon {
id: buttonIconLeft
diff --git a/app/qml/components/MMDrawerHeader.qml b/app/qml/components/MMDrawerHeader.qml
index 8d5a5cfc2..b40c2ce1e 100644
--- a/app/qml/components/MMDrawerHeader.qml
+++ b/app/qml/components/MMDrawerHeader.qml
@@ -22,7 +22,9 @@ Rectangle {
property font titleFont: __style.t3
property bool hasCloseButton: true
+
property alias closeButton: closeBtn
+ property alias topLeftItemContent: topLeftButtonGroup.children
color: __style.transparentColor
@@ -31,14 +33,26 @@ Rectangle {
implicitHeight: 60 * __dp
implicitWidth: ApplicationWindow.window?.width ?? 0
+ Item {
+ id: topLeftButtonGroup
+
+ width: childrenRect.width
+ height: parent.height
+ }
+
Text {
- // If the close button is visible, we need to properly center the text
- property real margin: internal.closeBtnRealWidth + internal.headerSpacing + __style.pageMargins
+ property real leftMarginShift: {
+ return Math.max( internal.closeBtnRealWidth, topLeftButtonGroup.width ) + internal.headerSpacing + __style.pageMargins
+ }
+
+ property real rightMarginShift: {
+ return Math.max( internal.closeBtnRealWidth, topLeftButtonGroup.width ) + internal.headerSpacing + __style.pageMargins
+ }
anchors {
fill: parent
- leftMargin: margin
- rightMargin: margin
+ leftMargin: leftMarginShift
+ rightMargin: rightMarginShift
}
text: root.title
diff --git a/app/qml/gps/MMMeasureDrawer.qml b/app/qml/gps/MMMeasureDrawer.qml
new file mode 100644
index 000000000..75910e175
--- /dev/null
+++ b/app/qml/gps/MMMeasureDrawer.qml
@@ -0,0 +1,119 @@
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ ***************************************************************************/
+
+import QtQuick
+import QtQuick.Layouts
+import QtQuick.Controls
+import Qt5Compat.GraphicalEffects
+import QtQuick.Shapes
+
+import mm 1.0 as MM
+
+import "../components"
+import "../map/components"
+import "./components" as MMGpsComponents
+
+MMDrawer {
+ id: root
+
+ property var mapTool
+
+ readonly property alias panelHeight: root.height
+
+ property bool canCloseShape: mapTool?.canCloseShape ?? false
+ property bool canUndo: mapTool?.canUndo ?? false
+ property bool isValidGeometry: mapTool?.isValidGeometry ?? false
+ property bool measurementFinalized: mapTool?.measurementFinalized ?? false
+
+ property string perimeter: mapTool?.perimeter ?? 0
+ property string area: mapTool?.area ?? 0
+ property bool isPolygon: area > 0
+
+ signal measureFinished()
+
+ Component.onCompleted: root.open()
+
+ modal: false
+ interactive: false
+ closePolicy: Popup.CloseOnEscape
+
+ dropShadow: true
+
+ onClosed: root.measureFinished()
+
+ Behavior on implicitHeight {
+ PropertyAnimation { properties: "implicitHeight"; easing.type: Easing.InOutQuad }
+ }
+
+ drawerHeader.title: qsTr( "Measure" )
+
+ drawerHeader.topLeftItemContent: MMButton {
+ type: MMButton.Types.Primary
+ text: measurementFinalized ? qsTr( "Repeat" ) : qsTr( "Undo" )
+ iconSourceLeft: measurementFinalized ? __style.syncIcon : __style.undoIcon
+ bgndColor: __style.lightGreenColor
+ size: MMButton.Sizes.Small
+ enabled: measurementFinalized || canUndo
+
+ anchors {
+ left: parent.left
+ leftMargin: __style.pageMargins + __style.safeAreaLeft
+ verticalCenter: parent.verticalCenter
+ }
+
+ onClicked: measurementFinalized ? root.mapTool.resetMeasurement() : root.mapTool.removePoint()
+ }
+
+ drawerContent: Column {
+ id: mainColumn
+
+ width: parent.width
+ spacing: __style.margin10
+
+ Row {
+ width: parent.width
+
+ MMGpsComponents.MMGpsDataText{
+ width: ( parent.width + parent.spacing ) / 2
+
+ title: measurementFinalized && root.isPolygon ? qsTr( "Perimeter" ) : qsTr( "Length" ) //Perimeter only if its a polygon
+ value: __inputUtils.formatDistanceInProjectUnit( root.perimeter, 1, __activeProject.qgsProject )
+ }
+
+ MMGpsComponents.MMGpsDataText{
+ width: ( parent.width + parent.spacing ) / 2
+
+ title: qsTr( "Area" )
+ value: __inputUtils.formatAreaInProjectUnit( root.area, 1, __activeProject.qgsProject )
+ alignmentRight: true
+ visible: measurementFinalized && root.isPolygon
+ }
+ }
+
+ Row {
+ width: parent.width
+ spacing: __style.margin12
+ visible: !root.measurementFinalized
+
+ MMButton {
+ text: root.canCloseShape ? qsTr( "Close shape" ) : qsTr( "Add point" )
+ iconSourceLeft: canCloseShape ? __style.closeShapeIcon : __style.plusIcon
+ onClicked: canCloseShape ? root.mapTool.finalizeMeasurement( true ) : root.mapTool.addPoint()
+ }
+
+ MMButton {
+ type: MMButton.Types.Secondary
+ text: qsTr( "Done" )
+ iconSourceLeft: __style.doneCircleIcon
+ enabled: root.isValidGeometry
+ onClicked: root.mapTool.finalizeMeasurement( false )
+ }
+ }
+ }
+}
diff --git a/app/qml/gps/MMStakeoutDrawer.qml b/app/qml/gps/MMStakeoutDrawer.qml
index 918436976..61f6ca354 100644
--- a/app/qml/gps/MMStakeoutDrawer.qml
+++ b/app/qml/gps/MMStakeoutDrawer.qml
@@ -97,7 +97,6 @@ MMDrawer {
Row {
width: parent.width
- spacing: __style.margi8
MMGpsComponents.MMGpsDataText{
width: ( parent.width + parent.spacing ) / 2
@@ -110,7 +109,7 @@ MMDrawer {
width: ( parent.width + parent.spacing ) / 2
title: qsTr( "Distance" )
- value: remainingDistance >= 0 ?__inputUtils.formatDistanceInProjectUnit( remainingDistance, 2 ) : qsTr( "N/A" )
+ value: remainingDistance >= 0 ?__inputUtils.formatDistanceInProjectUnit( remainingDistance, 2, __activeProject.qgsProject ) : qsTr( "N/A" )
alignmentRight: true
}
}
diff --git a/app/qml/main.qml b/app/qml/main.qml
index 822e7bd41..d6b7ea116 100644
--- a/app/qml/main.qml
+++ b/app/qml/main.qml
@@ -158,6 +158,10 @@ ApplicationWindow {
// if stakeout panel is opened
return stakeoutPanelLoader.item.panelHeight - mapToolbar.height
}
+ else if ( measurePanelLoader.active )
+ {
+ return measurePanelLoader.item.panelHeight - mapToolbar.height
+ }
else if ( formsStackManager.takenVerticalSpace > 0 )
{
// if feature preview panel is opened
@@ -219,6 +223,11 @@ ApplicationWindow {
stakeoutPanelLoader.item.targetPair = pair
}
+ onMeasureStarted: function( pair ) {
+ measurePanelLoader.active = true
+ measurePanelLoader.focus = true
+ }
+
onLocalChangesPanelRequested: {
stateManager.state = "projects"
projectController.openChangesPanel( __activeProject.projectFullName(), true )
@@ -326,6 +335,12 @@ ApplicationWindow {
}
}
+ MMToolbarButton {
+ text: qsTr("Measure")
+ iconSource: __style.measurementToolIcon
+ onClicked: map.measure()
+ }
+
MMToolbarButton {
text: qsTr("Local changes")
iconSource: __style.localChangesIcon
@@ -596,6 +611,32 @@ ApplicationWindow {
}
}
+ Loader {
+ id: measurePanelLoader
+
+ focus: true
+ active: false
+ asynchronous: true
+
+ sourceComponent: measurePanelComponent
+ }
+
+ Component {
+ id: measurePanelComponent
+
+ MMMeasureDrawer {
+ id: measurePanel
+
+ width: window.width
+ mapTool: map.mapToolComponent
+
+ onMeasureFinished: {
+ measurePanelLoader.active = false
+ map.finishMeasure()
+ }
+ }
+ }
+
MMFormStackController {
id: formsStackManager
diff --git a/app/qml/map/MMMapController.qml b/app/qml/map/MMMapController.qml
index a1c8c7fb4..43f76d8af 100644
--- a/app/qml/map/MMMapController.qml
+++ b/app/qml/map/MMMapController.qml
@@ -35,6 +35,10 @@ Item {
property bool isStreaming: recordingToolsLoader.active ? recordingToolsLoader.item.recordingMapTool.recordingType === MM.RecordingMapTool.StreamMode : false
property bool centeredToGPS: false
+ property var mapToolComponent: {
+ measurementToolsLoader.active ? measurementToolsLoader.item.mapTool : null
+ }
+
property MM.PositionTrackingManager trackingManager: tracking.item?.manager ?? null
signal featureIdentified( var pair )
@@ -60,6 +64,8 @@ Item {
signal stakeoutStarted( var pair )
signal accuracyButtonClicked()
+ signal measureStarted()
+
signal localChangesPanelRequested()
signal openTrackingPanel()
@@ -86,6 +92,9 @@ Item {
State {
name: "stakeout"
},
+ State {
+ name: "measure"
+ },
State {
name: "inactive" // ignores touch input
}
@@ -143,6 +152,13 @@ Item {
break
}
+ case "measure": {
+ root.showInfoTextMessage( qsTr( "Add points to measure distance, close the shape to measure area" ) )
+ root.hideHighlight()
+ root.measureStarted()
+ break
+ }
+
case "inactive": {
break
}
@@ -381,6 +397,17 @@ Item {
sourceComponent: splittingToolsComponent
}
+ Loader {
+ id: measurementToolsLoader
+
+ anchors.fill: mapCanvas
+
+ asynchronous: true
+ active: root.state === "measure"
+
+ sourceComponent: measurementToolsComponent
+ }
+
// map available content within safe area
Item {
anchors {
@@ -497,10 +524,10 @@ Item {
anchors.bottom: parent.bottom
- anchors.bottomMargin: root.state === "stakeout" ? root.mapExtentOffset : 0
+ anchors.bottomMargin: root.state === "stakeout" || root.state === "measure" ? root.mapExtentOffset : 0
visible: {
- if ( root.state === "stakeout" )
+ if ( root.state === "stakeout" || root.state === "measure" )
return true
else
return root.mapExtentOffset > 0 ? false : true
@@ -962,6 +989,18 @@ Item {
}
}
+ Component {
+ id: measurementToolsComponent
+
+ MMMeasurementTools {
+ anchors.fill: parent
+
+ map: mapCanvas
+ positionMarkerComponent: positionMarker
+ onFinishMeasurement: root.finishMeasure()
+ }
+ }
+
Component {
id: splittingToolsComponent
@@ -1111,6 +1150,10 @@ Item {
state = "stakeout"
}
+ function measure() {
+ state = "measure"
+ }
+
function toggleStreaming() {
// start/stop the streaming mode
if ( recordingToolsLoader.active ) {
@@ -1127,6 +1170,10 @@ Item {
root.centeredToGPS = internal.centeredToGPSBeforeStakeout
}
+ function finishMeasure() {
+ state = "view"
+ }
+
function centerToPair( pair ) {
__inputUtils.setExtentToFeature( pair, mapCanvas.mapSettings )
}
diff --git a/app/qml/map/MMMeasurementTools.qml b/app/qml/map/MMMeasurementTools.qml
new file mode 100644
index 000000000..e4a785961
--- /dev/null
+++ b/app/qml/map/MMMeasurementTools.qml
@@ -0,0 +1,101 @@
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ ***************************************************************************/
+
+import QtQuick
+import QtQuick.Shapes
+
+import mm 1.0 as MM
+
+import "../components"
+import "./components"
+import "../gps"
+import "../dialogs"
+
+Item {
+ id: root
+
+ required property MMMapCanvas map
+ required property MMPositionMarker positionMarkerComponent
+
+ property var mapTool: mapTool
+
+ signal finishMeasurement()
+
+ MM.MeasurementMapTool {
+ id: mapTool
+
+ mapSettings: root.map.mapSettings
+ crosshairPoint: crosshair.screenPoint
+ }
+
+ MM.GuidelineController {
+ id: guidelineController
+
+ allowed: !mapTool.measurementFinalized
+ mapSettings: root.map.mapSettings
+ crosshairPosition: crosshair.screenPoint
+ realGeometry: mapTool.recordedGeometry
+ }
+
+ MMHighlight {
+ id: guideline
+
+ height: root.map.height
+ width: root.map.width
+
+ markerColor: __style.deepOceanColor
+ lineColor: __style.deepOceanColor
+ lineStrokeStyle: ShapePath.DashLine
+ lineWidth: MMHighlight.LineWidths.Narrow
+
+ mapSettings: root.map.mapSettings
+ geometry: guidelineController.guidelineGeometry
+ }
+
+ MMHighlight {
+ id: highlight
+
+ height: map.height
+ width: map.width
+
+ markerColor: __style.deepOceanColor
+ lineColor: __style.deepOceanColor
+ lineWidth: MMHighlight.LineWidths.Narrow
+
+ mapSettings: root.map.mapSettings
+ geometry: mapTool.recordedGeometry
+ }
+
+ MMHighlight {
+ id: existingVerticesHighlight
+
+ height: root.map.height
+ width: root.map.width
+
+ mapSettings: root.map.mapSettings
+ geometry: mapTool.existingVertices
+
+ markerType: MMHighlight.MarkerTypes.Circle
+ markerSize: MMHighlight.MarkerSizes.Bigger
+ }
+
+ MMMeasureCrosshair {
+ id: crosshair
+
+ anchors.fill: parent
+ qgsProject: __activeProject.qgsProject
+ mapSettings: root.map.mapSettings
+ visible: !mapTool.measurementFinalized
+
+ text: __inputUtils.formatDistanceInProjectUnit( mapTool.lengthWithGuideline, 1, __activeProject.qgsProject )
+ canCloseShape: mapTool.canCloseShape
+
+ onCloseShapeClicked: root.mapTool.finalizeMeasurement( true )
+ }
+}
diff --git a/app/qml/map/components/MMCrosshair.qml b/app/qml/map/components/MMCrosshair.qml
index a9c7ec465..82892ff25 100644
--- a/app/qml/map/components/MMCrosshair.qml
+++ b/app/qml/map/components/MMCrosshair.qml
@@ -28,6 +28,9 @@ Item {
property real outerSize: 60 * __dp
property real innerDotSize: 10 * __dp
+ property alias crosshairForeground: crosshairForeground
+ property alias snapUtils: snapUtils
+
MM.SnapUtils {
id: snapUtils
diff --git a/app/qml/map/components/MMMapHidingLabel.qml b/app/qml/map/components/MMMapHidingLabel.qml
index 7a0ab3720..63941982d 100644
--- a/app/qml/map/components/MMMapHidingLabel.qml
+++ b/app/qml/map/components/MMMapHidingLabel.qml
@@ -24,12 +24,14 @@ MMHidingBox {
root.visible = false
}
- height: __style.row40
+ height: text.lineCount * __style.row40
timerInterval: 10000
fadeOutDuration: 1000
// Text
Text {
+ id: text
+
height: parent.height
width: parent.width - 2 * __style.pageMargins
anchors.verticalCenter: parent.verticalCenter
@@ -40,6 +42,8 @@ MMHidingBox {
font: __style.t3
horizontalAlignment: Text.AlignHCenter
verticalAlignment: Text.AlignVCenter
+ maximumLineCount: 3
+ wrapMode: Text.WordWrap
elide: Text.ElideRight
}
}
diff --git a/app/qml/map/components/MMMeasureCrosshair.qml b/app/qml/map/components/MMMeasureCrosshair.qml
new file mode 100644
index 000000000..3102def00
--- /dev/null
+++ b/app/qml/map/components/MMMeasureCrosshair.qml
@@ -0,0 +1,106 @@
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ ***************************************************************************/
+
+import QtQuick
+import Qt5Compat.GraphicalEffects
+
+import mm 1.0 as MM
+import "../../components"
+
+Item {
+ id: root
+
+ required property string text
+ /*required*/ property var qgsProject
+ /*required*/ property var mapSettings
+
+ property bool canCloseShape: false
+ property bool shouldUseSnapping: false
+
+ property point center: Qt.point( root.width / 2, root.height / 2 )
+
+ property var recordPoint: crosshair.recordPoint
+
+ property point screenPoint: crosshair.snapUtils.snapped && __activeLayer.vectorLayer ? __inputUtils.transformPointToScreenCoordinates(__activeLayer.vectorLayer.crs, mapSettings, recordPoint) : center
+
+ property real outerSize: 60 * __dp
+ property real innerDotSize: 10 * __dp
+
+ implicitWidth: row.width
+ implicitHeight: __style.mapItemHeight
+
+ signal closeShapeClicked
+
+ MMCrosshair {
+ id: crosshair
+
+ anchors.fill: parent
+ qgsProject: __activeProject.qgsProject
+ mapSettings: root.mapSettings
+ }
+
+ Rectangle {
+ y: crosshair.crosshairForeground.y + crosshair.crosshairForeground.height + __style.spacing2
+ x: crosshair.crosshairForeground.x - ( ( width - crosshair.crosshairForeground.width ) / 2 )
+
+ width: Math.max( root.outerSize - __style.spacing10 , row.width )
+ height: root.outerSize * 0.6
+ radius: root.height / 2
+ color: textBg.color
+
+ layer.enabled: true
+ layer.effect: MMShadow {}
+
+ Row {
+ id: row
+
+ anchors.centerIn: parent
+ leftPadding: 8 * __dp
+ rightPadding: leftPadding
+ spacing: 4 * __dp
+ height: parent.height
+
+ MMIcon {
+ id: icon
+ anchors.verticalCenter: parent.verticalCenter
+ source: root.canCloseShape ? __style.closeShapeIcon : ""
+ size: root.canCloseShape ? __style.icon24 : 0
+ }
+
+ Rectangle {
+ id: textBg
+ property real spacing: __style.spacing5
+ anchors.verticalCenter: parent.verticalCenter
+ color: root.canCloseShape ? __style.grassColor : __style.forestColor
+ height: text.height + spacing
+ width: text.width + 3 * spacing
+ radius: height / 2
+
+ MMText {
+ id: text
+
+ property real textSurroundingItemsWidth: textBg.spacing + icon.width + row.spacing + 2 * row.leftPadding
+
+ width: ( implicitWidth + textSurroundingItemsWidth ) > root.maxWidth ? root.maxWidth - textSurroundingItemsWidth : implicitWidth
+ anchors.centerIn: parent
+ color: root.canCloseShape ? __style.forestColor: __style.polarColor
+ text: root.canCloseShape ? qsTr( "Close shape" ) : root.text
+ font: __style.t3
+ elide: Text.ElideRight
+ }
+ }
+ }
+
+ MouseArea {
+ anchors.fill: parent
+ enabled: root.canCloseShape
+ onClicked: root.closeShapeClicked()
+ }
+ }
+}
diff --git a/app/test/testmaptools.cpp b/app/test/testmaptools.cpp
index 3b359a399..c90fb4de2 100644
--- a/app/test/testmaptools.cpp
+++ b/app/test/testmaptools.cpp
@@ -29,6 +29,7 @@
#include "snaputils.h"
#include "maptools/splittingmaptool.h"
#include "maptools/recordingmaptool.h"
+#include "maptools/measurementmaptool.h"
#include "featurelayerpair.h"
#include "streamingintervaltype.h"
@@ -276,6 +277,87 @@ void TestMapTools::testRecording()
delete recordTool;
}
+void TestMapTools::testMeasuring()
+{
+ MeasurementMapTool *measurementTool = new MeasurementMapTool();
+
+ InputMapCanvasMap canvas;
+ InputMapSettings *ms = canvas.mapSettings();
+
+ QgsProject *project = TestUtils::loadPlanesTestProject();
+ QVERIFY( project && !project->homePath().isEmpty() );
+
+ setupMapSettings( ms, project, QgsRectangle( -10, -10, 10, 10 ), QSize( 600, 600 ) );
+
+ measurementTool->setMapSettings( ms );
+
+ QgsDistanceArea distanceArea;
+ distanceArea.setEllipsoid( ms->project()->ellipsoid() );
+ distanceArea.setSourceCrs( ms->destinationCrs(), ms->transformContext() );
+
+ QPointF crosshairPoint1 = ms->coordinateToScreen( QgsPoint( 0, 0 ) );
+ measurementTool->setCrosshairPoint( crosshairPoint1 );
+ measurementTool->addPoint();
+
+ measurementTool->updateDistance();
+ QCOMPARE( measurementTool->lengthWithGuideline(), 0.0 );
+
+ QPointF crosshairPoint2 = ms->coordinateToScreen( QgsPoint( 0, 1 ) );
+ measurementTool->setCrosshairPoint( crosshairPoint2 );
+ measurementTool->addPoint();
+
+ measurementTool->updateDistance();
+
+ QList points;
+ points.append( QgsPointXY( 0, 0 ) );
+ points.append( QgsPointXY( 0, 1 ) );
+
+ QgsGeometry lineGeometry = QgsGeometry::fromPolylineXY( points );
+ double expectedPerimeter = distanceArea.measureLength( lineGeometry );
+ QCOMPARE( measurementTool->perimeter(), expectedPerimeter );
+
+ QPointF crosshairPoint3 = ms->coordinateToScreen( QgsPoint( 1, 1 ) );
+ measurementTool->setCrosshairPoint( crosshairPoint3 );
+ measurementTool->addPoint();
+
+ measurementTool->updateDistance();
+ points.append( QgsPointXY( 1, 1 ) );
+ lineGeometry = QgsGeometry::fromPolylineXY( points );
+ expectedPerimeter = distanceArea.measureLength( lineGeometry );
+ QCOMPARE( measurementTool->perimeter(), expectedPerimeter );
+
+ measurementTool->finalizeMeasurement( false );
+
+ QVERIFY( measurementTool->recordedGeometry().wkbType() == Qgis::WkbType::LineString );
+
+ measurementTool->resetMeasurement();
+
+ measurementTool->setCrosshairPoint( crosshairPoint1 );
+ measurementTool->addPoint();
+
+ measurementTool->setCrosshairPoint( crosshairPoint2 );
+ measurementTool->addPoint();
+
+ measurementTool->setCrosshairPoint( crosshairPoint3 );
+ measurementTool->addPoint();
+
+ measurementTool->setCrosshairPoint( crosshairPoint1 );
+ measurementTool->updateDistance();
+
+ QVERIFY( measurementTool->canCloseShape() );
+
+ measurementTool->finalizeMeasurement( true );
+
+ QVERIFY( measurementTool->recordedGeometry().wkbType() == Qgis::WkbType::Polygon );
+
+ QgsGeometry polygonGeometry = QgsGeometry::fromPolygonXY( QList>() << points );
+ double expectedArea = distanceArea.measureArea( polygonGeometry );
+ QCOMPARE( measurementTool->area(), expectedArea );
+
+ delete project;
+ delete measurementTool;
+}
+
void TestMapTools::testExistingVertices()
{
RecordingMapTool mapTool;
diff --git a/app/test/testmaptools.h b/app/test/testmaptools.h
index deb24e0c4..e06c748aa 100644
--- a/app/test/testmaptools.h
+++ b/app/test/testmaptools.h
@@ -29,6 +29,7 @@ class TestMapTools : public QObject
void testSnapping();
void testSplitting();
void testRecording();
+ void testMeasuring();
void testExistingVertices();
void testMidSegmentVertices();
diff --git a/app/test/testutilsfunctions.cpp b/app/test/testutilsfunctions.cpp
index 603d8e319..564b8458b 100644
--- a/app/test/testutilsfunctions.cpp
+++ b/app/test/testutilsfunctions.cpp
@@ -856,35 +856,93 @@ void TestUtilsFunctions::testParsePositionUpdates()
}
}
-void TestUtilsFunctions::testFormatDistanceInDistanceUnit()
+void TestUtilsFunctions::testFormatDistanceInProjectUnit()
{
- QString dist2str = mUtils->formatDistanceInProjectUnit( 1222.234, 2, Qgis::DistanceUnit::Meters );
+ QgsProject *project = QgsProject::instance();
+ QVERIFY( project != nullptr );
+
+ // Set the project distance units to meters
+ project->setDistanceUnits( Qgis::DistanceUnit::Meters );
+
+ QString dist2str = mUtils->formatDistanceInProjectUnit( 1222.234, 2, project );
QVERIFY( dist2str == "1222.23 m" );
- dist2str = mUtils->formatDistanceInProjectUnit( 1222.234, 1, Qgis::DistanceUnit::Meters );
+ dist2str = mUtils->formatDistanceInProjectUnit( 1222.234, 1, project );
QVERIFY( dist2str == "1222.2 m" );
- dist2str = mUtils->formatDistanceInProjectUnit( 1222.234, 0, Qgis::DistanceUnit::Meters );
+ dist2str = mUtils->formatDistanceInProjectUnit( 1222.234, 0, project );
QVERIFY( dist2str == "1222 m" );
- dist2str = mUtils->formatDistanceInProjectUnit( 700.22, 1, Qgis::DistanceUnit::Meters );
+ dist2str = mUtils->formatDistanceInProjectUnit( 700.22, 1, project );
QVERIFY( dist2str == "700.2 m" );
- dist2str = mUtils->formatDistanceInProjectUnit( 0.22, 0, Qgis::DistanceUnit::Meters );
+ dist2str = mUtils->formatDistanceInProjectUnit( 0.22, 0, project );
QVERIFY( dist2str == "0 m" );
- dist2str = mUtils->formatDistanceInProjectUnit( -0.22, 0, Qgis::DistanceUnit::Meters );
+ dist2str = mUtils->formatDistanceInProjectUnit( -0.22, 0, project );
QVERIFY( dist2str == "-0 m" );
- dist2str = mUtils->formatDistanceInProjectUnit( 1.222234, 2, Qgis::DistanceUnit::Kilometers );
+ // Change project distance units to kilometers
+ project->setDistanceUnits( Qgis::DistanceUnit::Kilometers );
+
+ dist2str = mUtils->formatDistanceInProjectUnit( 1.222234, 2, project );
QVERIFY( dist2str == "0.00 km" );
- dist2str = mUtils->formatDistanceInProjectUnit( 6000, 1, Qgis::DistanceUnit::Feet );
+ // Change project distance units to feet
+ project->setDistanceUnits( Qgis::DistanceUnit::Feet );
+
+ dist2str = mUtils->formatDistanceInProjectUnit( 6000, 1, project );
QVERIFY( dist2str == "19685.0 ft" );
- dist2str = mUtils->formatDistanceInProjectUnit( 5, 1, Qgis::DistanceUnit::Feet );
+ dist2str = mUtils->formatDistanceInProjectUnit( 5, 1, project );
QVERIFY( dist2str == "16.4 ft" );
- dist2str = mUtils->formatDistanceInProjectUnit( 7000, 1, Qgis::DistanceUnit::Feet );
+ dist2str = mUtils->formatDistanceInProjectUnit( 7000, 1, project );
QVERIFY( dist2str == "22965.9 ft" );
}
+
+
+void TestUtilsFunctions::testFormatAreaInProjectUnit()
+{
+ QgsProject *project = QgsProject::instance();
+ QVERIFY( project != nullptr );
+
+ // Set project area units to square meters
+ project->setAreaUnits( Qgis::AreaUnit::SquareMeters );
+
+ QString area2str = mUtils->formatAreaInProjectUnit( 1500.234, 2, project );
+ QVERIFY( area2str == "1500.23 m²" );
+
+ area2str = mUtils->formatAreaInProjectUnit( 1500.234, 1, project );
+ QVERIFY( area2str == "1500.2 m²" );
+
+ area2str = mUtils->formatAreaInProjectUnit( 1500.234, 0, project );
+ QVERIFY( area2str == "1500 m²" );
+
+ area2str = mUtils->formatAreaInProjectUnit( 500.22, 1, project );
+ QVERIFY( area2str == "500.2 m²" );
+
+ area2str = mUtils->formatAreaInProjectUnit( 0.22, 0, project );
+ QVERIFY( area2str == "0 m²" );
+
+ area2str = mUtils->formatAreaInProjectUnit( -0.22, 0, project );
+ QVERIFY( area2str == "-0 m²" );
+
+ // Change project area units to square kilometers
+ project->setAreaUnits( Qgis::AreaUnit::SquareKilometers );
+
+ area2str = mUtils->formatAreaInProjectUnit( 1.222234, 2, project );
+ QVERIFY( area2str == "0.00 km²" );
+
+ // Change project area units to acres
+ project->setAreaUnits( Qgis::AreaUnit::Acres );
+
+ area2str = mUtils->formatAreaInProjectUnit( 6000, 1, project );
+ QVERIFY( area2str == "1.5 ac" );
+
+ area2str = mUtils->formatAreaInProjectUnit( 5, 1, project );
+ QVERIFY( area2str == "0.0 ac" );
+
+ area2str = mUtils->formatAreaInProjectUnit( 7000, 1, project );
+ QVERIFY( area2str == "1.7 ac" );
+}
diff --git a/app/test/testutilsfunctions.h b/app/test/testutilsfunctions.h
index f74cf140f..75b497c78 100644
--- a/app/test/testutilsfunctions.h
+++ b/app/test/testutilsfunctions.h
@@ -48,7 +48,8 @@ class TestUtilsFunctions: public QObject
void testInvalidGeometryWarning();
void testAttribution();
void testParsePositionUpdates();
- void testFormatDistanceInDistanceUnit();
+ void testFormatDistanceInProjectUnit();
+ void testFormatAreaInProjectUnit();
private:
void testFormatDuration( const QDateTime &t0, qint64 diffSecs, const QString &expectedResult );
diff --git a/gallery/qml/pages/ButtonsPage.qml b/gallery/qml/pages/ButtonsPage.qml
index 97fabbb3e..4e0bc636e 100644
--- a/gallery/qml/pages/ButtonsPage.qml
+++ b/gallery/qml/pages/ButtonsPage.qml
@@ -87,8 +87,24 @@ ScrollView {
iconSourceLeft: __style.uploadIcon
}
- MMButton {
- text: "Primary flex width (no witdth set)"
+ Row {
+ width: parent.width
+ spacing: 20
+
+ MMButton {
+ text: "Primary flex width (no witdth set)"
+ }
+
+ MMButton {
+ text: "Small Primary"
+ size: MMButton.Sizes.Small
+ }
+
+ MMButton {
+ text: "Small Primary with Icon"
+ iconSourceLeft: __style.syncIcon
+ size: MMButton.Sizes.Small
+ }
}
MMListSpacer { height: __style.margin20 }
@@ -142,11 +158,29 @@ ScrollView {
iconSourceRight: __style.arrowLinkRightIcon
}
- MMButton {
- type: MMButton.Types.Secondary
- text: "Secondary flex width (no witdth set)"
- iconSourceLeft: __style.uploadIcon
- iconSourceRight: __style.uploadIcon
+ Row {
+ width: parent.width
+ spacing: 20
+
+ MMButton {
+ type: MMButton.Types.Secondary
+ text: "Secondary flex width (no witdth set)"
+ iconSourceLeft: __style.uploadIcon
+ iconSourceRight: __style.uploadIcon
+ }
+
+ MMButton {
+ text: "Small Secondary"
+ type: MMButton.Types.Secondary
+ size: MMButton.Sizes.Small
+ }
+
+ MMButton {
+ text: "Small Secondary with Icon"
+ type: MMButton.Types.Secondary
+ iconSourceLeft: __style.syncIcon
+ size: MMButton.Sizes.Small
+ }
}
MMListSpacer { height: __style.margin20 }
@@ -200,11 +234,29 @@ ScrollView {
iconSourceRight: __style.arrowLinkRightIcon
}
- MMButton {
- type: MMButton.Types.Tertiary
- text: "Tertiary flex width (no witdth set)"
- fontColor: __style.nightColor
- iconSourceLeft: __style.globeIcon
+ Row {
+ width: parent.width
+ spacing: 20
+
+ MMButton {
+ type: MMButton.Types.Tertiary
+ text: "Tertiary flex width (no witdth set)"
+ fontColor: __style.nightColor
+ iconSourceLeft: __style.globeIcon
+ }
+
+ MMButton {
+ text: "Small Tertiary"
+ type: MMButton.Types.Tertiary
+ size: MMButton.Sizes.Small
+ }
+
+ MMButton {
+ text: "Small Tertiary with Icon"
+ type: MMButton.Types.Tertiary
+ iconSourceLeft: __style.syncIcon
+ size: MMButton.Sizes.Small
+ }
}
}
}
diff --git a/gallery/qml/pages/IconsPage.qml b/gallery/qml/pages/IconsPage.qml
index a9d56b6dd..999d34c26 100644
--- a/gallery/qml/pages/IconsPage.qml
+++ b/gallery/qml/pages/IconsPage.qml
@@ -76,6 +76,8 @@ ScrollView {
GalleryComponents.IconLine { name: "morePhotosIcon"; source: __style.morePhotosIcon; showRect: checkboxBorder.checked; invertColors: checkboxColor.checked }
GalleryComponents.IconLine { name: "plusIcon"; source: __style.plusIcon; showRect: checkboxBorder.checked; invertColors: checkboxColor.checked }
GalleryComponents.IconLine { name: "positionTrackingIcon"; source: __style.positionTrackingIcon; showRect: checkboxBorder.checked; invertColors: checkboxColor.checked }
+ GalleryComponents.IconLine { name: "measurementToolIcon"; source: __style.measurementToolIcon; showRect: checkboxBorder.checked; invertColors: checkboxColor.checked }
+ GalleryComponents.IconLine { name: "closeShapeIcon"; source: __style.closeShapeIcon; showRect: checkboxBorder.checked; invertColors: checkboxColor.checked }
GalleryComponents.IconLine { name: "qrCodeIcon"; source: __style.qrCodeIcon; showRect: checkboxBorder.checked; invertColors: checkboxColor.checked }
GalleryComponents.IconLine { name: "satelliteIcon"; source: __style.satelliteIcon; showRect: checkboxBorder.checked; invertColors: checkboxColor.checked }
GalleryComponents.IconLine { name: "searchIcon"; source: __style.searchIcon; showRect: checkboxBorder.checked; invertColors: checkboxColor.checked }