diff --git a/python/core/qgssettings.sip b/python/core/qgssettings.sip index d221f5b08a4..f95a75990c7 100644 --- a/python/core/qgssettings.sip +++ b/python/core/qgssettings.sip @@ -155,6 +155,11 @@ Returns a list of all top-level keys that can be read using the QSettings object %Docstring Returns a list of all key top-level groups that contain keys that can be read using the QSettings object. :rtype: list of str +%End + QStringList globalChildGroups() const; +%Docstring +Returns a list of all key top-level groups (same as childGroups) but only for groups defined in global settings. + :rtype: list of str %End static QString globalSettingsPath(); %Docstring diff --git a/src/core/qgssettings.cpp b/src/core/qgssettings.cpp index 0b3604444d7..2cb5fae85e1 100644 --- a/src/core/qgssettings.cpp +++ b/src/core/qgssettings.cpp @@ -149,6 +149,15 @@ QStringList QgsSettings::childGroups() const } return keys; } +QStringList QgsSettings::globalChildGroups() const +{ + QStringList keys; + if ( mGlobalSettings ) + { + QStringList keys = mGlobalSettings->childGroups(); + } + return keys; +} QVariant QgsSettings::value( const QString &key, const QVariant &defaultValue, const QgsSettings::Section section ) const { diff --git a/src/core/qgssettings.h b/src/core/qgssettings.h index 0ee8f008542..2250aedaee5 100644 --- a/src/core/qgssettings.h +++ b/src/core/qgssettings.h @@ -150,6 +150,8 @@ class CORE_EXPORT QgsSettings : public QObject QStringList childKeys() const; //! Returns a list of all key top-level groups that contain keys that can be read using the QSettings object. QStringList childGroups() const; + //! Returns a list of all key top-level groups (same as childGroups) but only for groups defined in global settings. + QStringList globalChildGroups() const; //! Return the path to the Global Settings QSettings storage file static QString globalSettingsPath() { return sGlobalSettingsPath; } //! Set the Global Settings QSettings storage file diff --git a/src/providers/wms/qgswmssourceselect.cpp b/src/providers/wms/qgswmssourceselect.cpp index b2660c30a2b..f9329557fe8 100644 --- a/src/providers/wms/qgswmssourceselect.cpp +++ b/src/providers/wms/qgswmssourceselect.cpp @@ -20,7 +20,6 @@ #include "qgswmsprovider.h" #include "qgis.h" // GEO_EPSG_CRS_ID -#include "qgscontexthelp.h" #include "qgscoordinatereferencesystem.h" #include "qgsdatasourceuri.h" #include "qgsprojectionselectiondialog.h" diff --git a/src/providers/wms/qgsxyzconnection.cpp b/src/providers/wms/qgsxyzconnection.cpp index 2d623b1e939..fac91076842 100644 --- a/src/providers/wms/qgsxyzconnection.cpp +++ b/src/providers/wms/qgsxyzconnection.cpp @@ -13,6 +13,7 @@ * * ***************************************************************************/ +#include #include "qgsxyzconnection.h" #include "qgsdatasourceuri.h" @@ -41,8 +42,27 @@ QString QgsXyzConnection::encodedUri() const QStringList QgsXyzConnectionUtils::connectionList() { QgsSettings settings; + QStringList connList; + settings.beginGroup( QStringLiteral( "qgis/connections-xyz" ) ); - return settings.childGroups(); + connList = settings.childGroups(); + + QStringList global = settings.globalChildGroups(); + settings.endGroup(); + + for ( auto &s : global ) + { + settings.beginGroup( "qgis/connections-xyz/" + s ); + bool isHidden = settings.value( QStringLiteral( "hidden" ), false ).toBool(); + QString url = settings.value( QStringLiteral( "url" ), "" ).toString(); + settings.endGroup(); + if ( isHidden ) + { + connList.removeOne( s ); + } + } + + return connList; } QgsXyzConnection QgsXyzConnectionUtils::connection( const QString &name ) @@ -59,6 +79,7 @@ QgsXyzConnection QgsXyzConnectionUtils::connection( const QString &name ) conn.username = settings.value( QStringLiteral( "username" ) ).toString(); conn.password = settings.value( QStringLiteral( "password" ) ).toString(); conn.referer = settings.value( QStringLiteral( "referer" ) ).toString(); + conn.hidden = settings.value( QStringLiteral( "hidden" ) ).toBool(); return conn; } @@ -66,11 +87,32 @@ void QgsXyzConnectionUtils::deleteConnection( const QString &name ) { QgsSettings settings; settings.remove( "qgis/connections-xyz/" + name ); + + settings.beginGroup( QStringLiteral( "qgis/connections-xyz" ) ); + QStringList global = settings.globalChildGroups(); + + if ( global.contains( name ) ) + { + QgsSettings settings; + settings.beginGroup( "qgis/connections-xyz/" + name ); + settings.setValue( QStringLiteral( "hidden" ), true ); + } + } void QgsXyzConnectionUtils::addConnection( const QgsXyzConnection &conn ) { QgsSettings settings; + bool addHiddenProperty = false; + + settings.beginGroup( QStringLiteral( "qgis/connections-xyz" ) ); + QStringList global = settings.globalChildGroups(); + if ( global.contains( conn.name ) ) + { + addHiddenProperty = true; + } + settings.endGroup(); + settings.beginGroup( "qgis/connections-xyz/" + conn.name ); settings.setValue( QStringLiteral( "url" ), conn.url ); settings.setValue( QStringLiteral( "zmin" ), conn.zMin ); @@ -79,4 +121,9 @@ void QgsXyzConnectionUtils::addConnection( const QgsXyzConnection &conn ) settings.setValue( QStringLiteral( "username" ), conn.username ); settings.setValue( QStringLiteral( "password" ), conn.password ); settings.setValue( QStringLiteral( "referer" ), conn.referer ); + if ( addHiddenProperty ) + { + settings.setValue( QStringLiteral( "hidden" ), false ); + } + } diff --git a/src/providers/wms/qgsxyzconnection.h b/src/providers/wms/qgsxyzconnection.h index d41548f74b3..0fdb6530ca0 100644 --- a/src/providers/wms/qgsxyzconnection.h +++ b/src/providers/wms/qgsxyzconnection.h @@ -32,6 +32,7 @@ struct QgsXyzConnection QString password; // Referer QString referer; + bool hidden; QString encodedUri() const; }; @@ -40,7 +41,7 @@ struct QgsXyzConnection class QgsXyzConnectionUtils { public: - //! Returns list of existing connections + //! Returns list of existing connections, unless the hidden ones static QStringList connectionList(); //! Returns connection details @@ -54,4 +55,4 @@ class QgsXyzConnectionUtils }; -#endif // QGSXYZCONNECTION_H +#endif // QGSXYZCONNECTION_H \ No newline at end of file diff --git a/tests/src/python/test_qgis_global_settings.py b/tests/src/python/test_qgis_global_settings.py index 6a5a45cceb1..5e218aa5f06 100644 --- a/tests/src/python/test_qgis_global_settings.py +++ b/tests/src/python/test_qgis_global_settings.py @@ -28,23 +28,15 @@ from qgis.core import QgsApplication, QgsRasterLayer, QgsSettings start_app() + def createXYZLayerFromURL(url): typeandurl = "type=xyz&url=" + url osm = QgsRasterLayer(typeandurl, "OpenStreetMap", "wms") return osm + class TestQgsGlobalSettings(unittest.TestCase): - def setUp(self): - """Run before each test.""" - qDebug('setUp') - pass - - def tearDown(self): - """Run after each test.""" - qDebug('tearDown') - pass - def test_global_settings_exist(self): qDebug('QgsApplication.pkgDataPath(): {0}'.format(QgsApplication.pkgDataPath())) # Path after deployment: QgsApplication.pkgDataPath() + '/qgis_global_settings.ini' @@ -52,18 +44,12 @@ class TestQgsGlobalSettings(unittest.TestCase): QgsSettings.setGlobalSettingsPath(QgsApplication.pkgDataPath() + '/qgis_global_settings.ini') self.settings = QgsSettings('testqgissettings', 'testqgissettings') settings = QgsSettings() - qDebug('settings.allKeys(): {0}'.format(settings.allKeys())) + # qDebug('settings.allKeys(): {0}'.format(settings.allKeys())) defaulturl = settings.value('qgis/connections-xyz/OpenStreetMap/url') + self.assertEqual(defaulturl, 'http://a.tile.openstreetmap.org/{z}/{x}/{y}.png') + layer = createXYZLayerFromURL(defaulturl) + self.assertEqual(layer.name(), 'OpenStreetMap') - def testKey(): - self.assertEqual(defaulturl, 'http://a.tile.openstreetmap.org/{z}/{x}/{y}.png') - - def testLayer(): - layer = createXYZLayerFromURL(defaulturl) - self.assertEqual(layer.name(), 'OpenStreetMap') - - testKey() - testLayer() if __name__ == '__main__': unittest.main()