Skip to content

Commit

Permalink
Support removal of global defined XYZ connections
Browse files Browse the repository at this point in the history
  • Loading branch information
jgrocha committed Aug 22, 2017
1 parent 273243b commit 8486767
Show file tree
Hide file tree
Showing 7 changed files with 73 additions and 24 deletions.
5 changes: 5 additions & 0 deletions python/core/qgssettings.sip
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
9 changes: 9 additions & 0 deletions src/core/qgssettings.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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
{
Expand Down
2 changes: 2 additions & 0 deletions src/core/qgssettings.h
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
1 change: 0 additions & 1 deletion src/providers/wms/qgswmssourceselect.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down
49 changes: 48 additions & 1 deletion src/providers/wms/qgsxyzconnection.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
* *
***************************************************************************/

#include <qgslogger.h>
#include "qgsxyzconnection.h"

#include "qgsdatasourceuri.h"
Expand Down Expand Up @@ -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 )
Expand All @@ -59,18 +79,40 @@ 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;
}

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 );
Expand All @@ -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 );
}

}
5 changes: 3 additions & 2 deletions src/providers/wms/qgsxyzconnection.h
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ struct QgsXyzConnection
QString password;
// Referer
QString referer;
bool hidden;

QString encodedUri() const;
};
Expand All @@ -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
Expand All @@ -54,4 +55,4 @@ class QgsXyzConnectionUtils
};


#endif // QGSXYZCONNECTION_H
#endif // QGSXYZCONNECTION_H
26 changes: 6 additions & 20 deletions tests/src/python/test_qgis_global_settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,22 +28,14 @@

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
class TestQgsGlobalSettings(unittest.TestCase):

def test_global_settings_exist(self):
qDebug('QgsApplication.pkgDataPath(): {0}'.format(QgsApplication.pkgDataPath()))
Expand All @@ -52,18 +44,12 @@ def test_global_settings_exist(self):
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()

0 comments on commit 8486767

Please sign in to comment.