6import QGroundControl.Controls
7import QGroundControl.QGCMapEngineManager
9/// Offline map tile set management: list, add, import, export, and progress display.
10/// Self-contained component including all dialogs needed for offline map operations.
13 implicitHeight: mainLayout.implicitHeight
15 property var _mapEngineManager: QGroundControl.mapEngineManager
16 property var _appSettings: QGroundControl.settingsManager.appSettings
17 property bool _currentlyImportOrExporting: _mapEngineManager.importAction === QGCMapEngineManager.ImportAction.ActionExporting ||
18 _mapEngineManager.importAction === QGCMapEngineManager.ImportAction.ActionImporting
20 Component.onCompleted: _mapEngineManager.loadTileSets()
23 target: _mapEngineManager
24 function onErrorMessageChanged() { errorDialogFactory.open() }
32 Layout.fillWidth: true
33 heading: qsTr("Offline Maps")
34 headingDescription: qsTr("Download map tiles for use when offline")
37 model: _mapEngineManager.tileSets
41 enabled: !object.deleting
42 onClicked: offlineMapEditorComponent.createObject(mainWindow.contentItem, { tileSet: object }).showInfo()
47 label: qsTr("Add New Set")
48 buttonText: qsTr("Add")
49 enabled: !_currentlyImportOrExporting
50 onClicked: offlineMapEditorComponent.createObject(mainWindow.contentItem).addNewSet()
54 label: qsTr("Import Map Tiles")
55 buttonText: qsTr("Import")
56 visible: QGroundControl.corePlugin.options.showOfflineMapImport
57 enabled: !_currentlyImportOrExporting
59 _mapEngineManager.importAction = QGCMapEngineManager.ImportAction.ActionNone
60 importDialogFactory.open()
65 label: qsTr("Export Map Tiles")
66 buttonText: qsTr("Export")
67 visible: QGroundControl.corePlugin.options.showOfflineMapExport
68 enabled: !_currentlyImportOrExporting
69 onClicked: exportDialogFactory.open()
73 spacing: ScreenTools.defaultFontPixelWidth
74 visible: _currentlyImportOrExporting
77 Layout.fillWidth: true
78 text: _mapEngineManager.importAction === QGCMapEngineManager.ImportAction.ActionExporting ? qsTr("Exporting") : qsTr("Importing")
82 width: ScreenTools.defaultFontPixelWidth * 25
85 value: _mapEngineManager.actionProgress
93 folder: _appSettings.missionSavePath
94 nameFilters: [ qsTr("Tile Sets (*.%1)").arg(defaultSuffix) ]
95 defaultSuffix: _appSettings.tilesetFileExtension
97 onAcceptedForSave: (file) => {
99 _mapEngineManager.exportSets(file)
102 onAcceptedForLoad: (file) => {
104 _mapEngineManager.importSets(file)
108 QGCPopupDialogFactory {
109 id: exportDialogFactory
110 dialogComponent: exportDialogComponent
114 id: exportDialogComponent
117 title: qsTr("Export Selected Tile Sets")
118 buttons: Dialog.Ok | Dialog.Cancel
122 fileDialog.title = qsTr("Export Tiles")
123 fileDialog.openForSave()
127 spacing: ScreenTools.defaultFontPixelWidth / 2
130 model: _mapEngineManager.tileSets
134 checked: object.selected
135 onClicked: object.selected = checked
142 QGCPopupDialogFactory {
143 id: importDialogFactory
144 dialogComponent: importDialogComponent
148 id: importDialogComponent
151 title: qsTr("Import TileSets")
152 buttons: Dialog.Ok | Dialog.Cancel
156 fileDialog.title = qsTr("Import Tiles")
157 fileDialog.openForLoad()
161 spacing: ScreenTools.defaultFontPixelWidth / 2
164 text: qsTr("Append to existing sets")
165 checked: !_mapEngineManager.importReplace
166 onClicked: _mapEngineManager.importReplace = !checked
169 text: qsTr("Replace existing sets")
170 checked: _mapEngineManager.importReplace
171 onClicked: _mapEngineManager.importReplace = checked
177 QGCPopupDialogFactory {
178 id: errorDialogFactory
179 dialogComponent: errorDialogComponent
183 id: errorDialogComponent
185 QGCSimpleMessageDialog {
186 title: qsTr("Error Message")
187 text: _mapEngineManager.errorMessage
188 buttons: Dialog.Close
193 id: offlineMapEditorComponent
198 z: QGroundControl.zOrderTopMost