diff --git a/src/QtLocationPlugin/QGCMapEngineData.h b/src/QtLocationPlugin/QGCMapEngineData.h index eb0ff7974c60acb64155b25b3f66a41572c0fb0e..793356cb101afe705144a2b32f7d1fbfe3d3c5c0 100644 --- a/src/QtLocationPlugin/QGCMapEngineData.h +++ b/src/QtLocationPlugin/QGCMapEngineData.h @@ -118,6 +118,7 @@ public: taskGetTileDownloadList, taskUpdateTileDownloadState, taskDeleteTileSet, + taskRenameTileSet, taskPruneCache, taskReset, taskExport, @@ -325,6 +326,25 @@ private: qulonglong _setID; }; +//----------------------------------------------------------------------------- +class QGCRenameTileSetTask : public QGCMapTask +{ + Q_OBJECT +public: + QGCRenameTileSetTask(qulonglong setID, QString newName) + : QGCMapTask(QGCMapTask::taskRenameTileSet) + , _setID(setID) + , _newName(newName) + {} + + qulonglong setID () { return _setID; } + QString newName () { return _newName; } + +private: + qulonglong _setID; + QString _newName; +}; + //----------------------------------------------------------------------------- class QGCPruneCacheTask : public QGCMapTask { diff --git a/src/QtLocationPlugin/QGCMapTileSet.h b/src/QtLocationPlugin/QGCMapTileSet.h index 36241b7f547de13e749a88fab10820af87c47531..b1b2bb2c4da344357dce1837a6dbad50e6c89489 100644 --- a/src/QtLocationPlugin/QGCMapTileSet.h +++ b/src/QtLocationPlugin/QGCMapTileSet.h @@ -42,7 +42,7 @@ public: QGCCachedTileSet (const QString& name); ~QGCCachedTileSet (); - Q_PROPERTY(QString name READ name CONSTANT) + Q_PROPERTY(QString name READ name NOTIFY nameChanged) Q_PROPERTY(QString mapTypeStr READ mapTypeStr CONSTANT) Q_PROPERTY(double topleftLon READ topleftLon CONSTANT) Q_PROPERTY(double topleftLat READ topleftLat CONSTANT) @@ -147,6 +147,7 @@ signals: void completeChanged (); void errorCountChanged (); void selectedChanged (); + void nameChanged (); private slots: void _tileListFetched (QList tiles); diff --git a/src/QtLocationPlugin/QGCTileCacheWorker.cpp b/src/QtLocationPlugin/QGCTileCacheWorker.cpp index c188025bf3f5db15968b778e7f72fb5239184d08..df5118bac192b68bafd650a05c398a786addbd86 100644 --- a/src/QtLocationPlugin/QGCTileCacheWorker.cpp +++ b/src/QtLocationPlugin/QGCTileCacheWorker.cpp @@ -148,6 +148,9 @@ QGCCacheWorker::run() case QGCMapTask::taskDeleteTileSet: _deleteTileSet(task); break; + case QGCMapTask::taskRenameTileSet: + _renameTileSet(task); + break; case QGCMapTask::taskPruneCache: _pruneCache(task); break; @@ -615,6 +618,22 @@ QGCCacheWorker::_deleteTileSet(QGCMapTask* mtask) task->setTileSetDeleted(); } +//----------------------------------------------------------------------------- +void +QGCCacheWorker::_renameTileSet(QGCMapTask* mtask) +{ + if(!_testTask(mtask)) { + return; + } + QGCRenameTileSetTask* task = static_cast(mtask); + QSqlQuery query(*_db); + QString s; + s = QString("UPDATE TileSets SET name = \"%1\" WHERE setID = %2").arg(task->newName()).arg(task->setID()); + if(!query.exec(s)) { + task->setError("Error renaming tile set"); + } +} + //----------------------------------------------------------------------------- void QGCCacheWorker::_resetCacheDatabase(QGCMapTask* mtask) diff --git a/src/QtLocationPlugin/QGCTileCacheWorker.h b/src/QtLocationPlugin/QGCTileCacheWorker.h index 72fe8ea634cf8dfee8d393d757fc163b7c1ce712..d53f5ba977caf8e0228e8b7e58a7a79248d6d34d 100644 --- a/src/QtLocationPlugin/QGCTileCacheWorker.h +++ b/src/QtLocationPlugin/QGCTileCacheWorker.h @@ -57,6 +57,7 @@ private: void _getTileDownloadList (QGCMapTask* mtask); void _updateTileDownloadState(QGCMapTask* mtask); void _deleteTileSet (QGCMapTask* mtask); + void _renameTileSet (QGCMapTask* mtask); void _resetCacheDatabase (QGCMapTask* mtask); void _pruneCache (QGCMapTask* mtask); void _exportSets (QGCMapTask* mtask); diff --git a/src/QtLocationPlugin/QMLControl/OfflineMap.qml b/src/QtLocationPlugin/QMLControl/OfflineMap.qml index 0981d1f0228ea153aa3c75daa67f705b3d46def8..e816d0b2aaccddba317cf534194a79605ef1fce4 100644 --- a/src/QtLocationPlugin/QMLControl/OfflineMap.qml +++ b/src/QtLocationPlugin/QMLControl/OfflineMap.qml @@ -405,6 +405,14 @@ QGCView { text: offlineMapView._currentSelection ? offlineMapView._currentSelection.name : "" font.pointSize: _saveRealEstate ? ScreenTools.defaultFontPointSize : ScreenTools.mediumFontPointSize horizontalAlignment: Text.AlignHCenter + visible: _defaultSet + } + QGCTextField { + id: editSetName + anchors.left: parent.left + anchors.right: parent.right + visible: !_defaultSet + text: offlineMapView._currentSelection ? offlineMapView._currentSelection.name : "" } QGCLabel { anchors.left: parent.left @@ -500,7 +508,20 @@ QGCView { onClicked: showDialog(deleteConfirmationDialogComponent, qsTr("Confirm Delete"), qgcView.showDialogDefaultWidth, StandardButton.Yes | StandardButton.No) } QGCButton { - text: qsTr("Close") + text: qsTr("Ok") + width: ScreenTools.defaultFontPixelWidth * (infoView._extraButton ? 6 : 10) + visible: !_defaultSet + enabled: editSetName.text !== "" + onClicked: { + if(editSetName.text !== _currentSelection.name) { + QGroundControl.mapEngineManager.renameTileSet(_currentSelection, editSetName.text) + } + leaveInfoView() + showList() + } + } + QGCButton { + text: _defaultSet ? qsTr("Close") : qsTr("Cancel") width: ScreenTools.defaultFontPixelWidth * (infoView._extraButton ? 6 : 10) onClicked: { leaveInfoView() diff --git a/src/QtLocationPlugin/QMLControl/QGCMapEngineManager.cc b/src/QtLocationPlugin/QMLControl/QGCMapEngineManager.cc index 88dfd48905ac57a4a87f55546ce846a4f0d022f3..52037ae32bfb22819f4460022623e403cc8e35ce 100644 --- a/src/QtLocationPlugin/QMLControl/QGCMapEngineManager.cc +++ b/src/QtLocationPlugin/QMLControl/QGCMapEngineManager.cc @@ -249,6 +249,24 @@ QGCMapEngineManager::deleteTileSet(QGCCachedTileSet* tileSet) } } +//----------------------------------------------------------------------------- +void +QGCMapEngineManager::renameTileSet(QGCCachedTileSet* tileSet, QString newName) +{ + //-- Name must be unique + int idx = 1; + QString name = newName; + while(findName(name)) { + name = QString("%1 (%2)").arg(newName).arg(idx++); + } + qCDebug(QGCMapEngineManagerLog) << "Renaming tile set " << tileSet->name() << "to" << name; + tileSet->setName(name); + QGCRenameTileSetTask* task = new QGCRenameTileSetTask(tileSet->setID(), name); + connect(task, &QGCMapTask::error, this, &QGCMapEngineManager::taskError); + getQGCMapEngine()->addTask(task); + emit tileSet->nameChanged(); +} + //----------------------------------------------------------------------------- void QGCMapEngineManager::_resetCompleted() diff --git a/src/QtLocationPlugin/QMLControl/QGCMapEngineManager.h b/src/QtLocationPlugin/QMLControl/QGCMapEngineManager.h index 003f745367f49fe2ea2234035c6e1e5b5ab0a998..0d1b4199f5719f6ee5fc6446af652aae1c8f0d60 100644 --- a/src/QtLocationPlugin/QMLControl/QGCMapEngineManager.h +++ b/src/QtLocationPlugin/QMLControl/QGCMapEngineManager.h @@ -66,6 +66,7 @@ public: Q_INVOKABLE void saveSetting (const QString& key, const QString& value); Q_INVOKABLE QString loadSetting (const QString& key, const QString& defaultValue); Q_INVOKABLE void deleteTileSet (QGCCachedTileSet* tileSet); + Q_INVOKABLE void renameTileSet (QGCCachedTileSet* tileSet, QString newName); Q_INVOKABLE QString getUniqueName (); Q_INVOKABLE bool findName (const QString& name); Q_INVOKABLE void selectAll ();