mirror of
https://github.com/qgis/QGIS.git
synced 2025-11-27 00:07:16 -05:00
Add QgsAbstractProviderConnection subclass + provider metadata code
This commit is contained in:
parent
205b8aec30
commit
ba4ceb4aed
@ -21,19 +21,44 @@
|
||||
|
||||
///@cond PRIVATE
|
||||
|
||||
QString QgsVectorTileConnection::encodedUri() const
|
||||
QString QgsVectorTileProviderConnection::encodedUri( const QgsVectorTileProviderConnection::Data &conn )
|
||||
{
|
||||
QgsDataSourceUri uri;
|
||||
uri.setParam( QStringLiteral( "type" ), QStringLiteral( "xyz" ) );
|
||||
uri.setParam( QStringLiteral( "url" ), url );
|
||||
if ( zMin != -1 )
|
||||
uri.setParam( QStringLiteral( "zmin" ), QString::number( zMin ) );
|
||||
if ( zMax != -1 )
|
||||
uri.setParam( QStringLiteral( "zmax" ), QString::number( zMax ) );
|
||||
uri.setParam( QStringLiteral( "url" ), conn.url );
|
||||
if ( conn.zMin != -1 )
|
||||
uri.setParam( QStringLiteral( "zmin" ), QString::number( conn.zMin ) );
|
||||
if ( conn.zMax != -1 )
|
||||
uri.setParam( QStringLiteral( "zmax" ), QString::number( conn.zMax ) );
|
||||
return uri.encodedUri();
|
||||
}
|
||||
|
||||
QStringList QgsVectorTileConnectionUtils::connectionList()
|
||||
QgsVectorTileProviderConnection::Data QgsVectorTileProviderConnection::decodedUri( const QString &uri )
|
||||
{
|
||||
QgsDataSourceUri dsUri;
|
||||
dsUri.setEncodedUri( uri );
|
||||
|
||||
QgsVectorTileProviderConnection::Data conn;
|
||||
conn.url = dsUri.param( QStringLiteral( "url" ) );
|
||||
conn.zMin = dsUri.hasParam( QStringLiteral( "zmin" ) ) ? dsUri.param( QStringLiteral( "zmin" ) ).toInt() : -1;
|
||||
conn.zMax = dsUri.hasParam( QStringLiteral( "zmax" ) ) ? dsUri.param( QStringLiteral( "zmax" ) ).toInt() : -1;
|
||||
return conn;
|
||||
}
|
||||
|
||||
QString QgsVectorTileProviderConnection::encodedLayerUri( const QgsVectorTileProviderConnection::Data &conn )
|
||||
{
|
||||
// compared to encodedUri() this one also adds type=xyz to the URI
|
||||
QgsDataSourceUri uri;
|
||||
uri.setParam( QStringLiteral( "type" ), QStringLiteral( "xyz" ) );
|
||||
uri.setParam( QStringLiteral( "url" ), conn.url );
|
||||
if ( conn.zMin != -1 )
|
||||
uri.setParam( QStringLiteral( "zmin" ), QString::number( conn.zMin ) );
|
||||
if ( conn.zMax != -1 )
|
||||
uri.setParam( QStringLiteral( "zmax" ), QString::number( conn.zMax ) );
|
||||
return uri.encodedUri();
|
||||
}
|
||||
|
||||
QStringList QgsVectorTileProviderConnection::connectionList()
|
||||
{
|
||||
QgsSettings settings;
|
||||
settings.beginGroup( QStringLiteral( "qgis/connections-vector-tile" ) );
|
||||
@ -42,33 +67,58 @@ QStringList QgsVectorTileConnectionUtils::connectionList()
|
||||
return connList;
|
||||
}
|
||||
|
||||
QgsVectorTileConnection QgsVectorTileConnectionUtils::connection( const QString &name )
|
||||
QgsVectorTileProviderConnection::Data QgsVectorTileProviderConnection::connection( const QString &name )
|
||||
{
|
||||
QgsSettings settings;
|
||||
settings.beginGroup( "qgis/connections-vector-tile/" + name );
|
||||
|
||||
QgsVectorTileConnection conn;
|
||||
conn.name = name;
|
||||
if ( settings.value( "url" ).toString().isEmpty() )
|
||||
return QgsVectorTileProviderConnection::Data();
|
||||
|
||||
QgsVectorTileProviderConnection::Data conn;
|
||||
conn.url = settings.value( QStringLiteral( "url" ) ).toString();
|
||||
conn.zMin = settings.value( QStringLiteral( "zmin" ), -1 ).toInt();
|
||||
conn.zMax = settings.value( QStringLiteral( "zmax" ), -1 ).toInt();
|
||||
return conn;
|
||||
}
|
||||
|
||||
void QgsVectorTileConnectionUtils::deleteConnection( const QString &name )
|
||||
void QgsVectorTileProviderConnection::deleteConnection( const QString &name )
|
||||
{
|
||||
QgsSettings settings;
|
||||
settings.remove( "qgis/connections-vector-tile/" + name );
|
||||
}
|
||||
|
||||
void QgsVectorTileConnectionUtils::addConnection( const QgsVectorTileConnection &conn )
|
||||
void QgsVectorTileProviderConnection::addConnection( const QString &name, QgsVectorTileProviderConnection::Data conn )
|
||||
{
|
||||
QgsSettings settings;
|
||||
|
||||
settings.beginGroup( "qgis/connections-vector-tile/" + conn.name );
|
||||
settings.beginGroup( "qgis/connections-vector-tile/" + name );
|
||||
settings.setValue( QStringLiteral( "url" ), conn.url );
|
||||
settings.setValue( QStringLiteral( "zmin" ), conn.zMin );
|
||||
settings.setValue( QStringLiteral( "zmax" ), conn.zMax );
|
||||
}
|
||||
|
||||
//
|
||||
|
||||
QgsVectorTileProviderConnection::QgsVectorTileProviderConnection( const QString &name )
|
||||
: QgsAbstractProviderConnection( name )
|
||||
{
|
||||
setUri( encodedUri( connection( name ) ) );
|
||||
}
|
||||
|
||||
QgsVectorTileProviderConnection::QgsVectorTileProviderConnection( const QString &uri, const QVariantMap &configuration )
|
||||
: QgsAbstractProviderConnection( uri, configuration )
|
||||
{
|
||||
}
|
||||
|
||||
void QgsVectorTileProviderConnection::store( const QString &name ) const
|
||||
{
|
||||
addConnection( name, decodedUri( uri() ) );
|
||||
}
|
||||
|
||||
void QgsVectorTileProviderConnection::remove( const QString &name ) const
|
||||
{
|
||||
deleteConnection( name );
|
||||
}
|
||||
|
||||
///@endcond
|
||||
|
||||
@ -23,31 +23,42 @@
|
||||
|
||||
#include <QStringList>
|
||||
|
||||
struct QgsVectorTileConnection
|
||||
{
|
||||
QString name;
|
||||
QString url;
|
||||
int zMin = -1;
|
||||
int zMax = -1;
|
||||
#include "qgsabstractproviderconnection.h"
|
||||
|
||||
QString encodedUri() const;
|
||||
};
|
||||
|
||||
//! Utility class for handling list of connections to vector tile layers
|
||||
class CORE_EXPORT QgsVectorTileConnectionUtils
|
||||
class CORE_EXPORT QgsVectorTileProviderConnection : public QgsAbstractProviderConnection
|
||||
{
|
||||
|
||||
public:
|
||||
QgsVectorTileProviderConnection( const QString &name );
|
||||
QgsVectorTileProviderConnection( const QString &uri, const QVariantMap &configuration );
|
||||
|
||||
virtual void store( const QString &name ) const override;
|
||||
virtual void remove( const QString &name ) const override;
|
||||
|
||||
//! Represents decoded data of a connection
|
||||
struct Data
|
||||
{
|
||||
QString url;
|
||||
int zMin = -1;
|
||||
int zMax = -1;
|
||||
};
|
||||
|
||||
//! Returns connection data encoded as a string
|
||||
static QString encodedUri( const Data &conn );
|
||||
//! Decodes connection string to a data structure
|
||||
static Data decodedUri( const QString &uri );
|
||||
|
||||
//! Returns connection data encoded as a string containg URI for QgsVectorTileLayer
|
||||
static QString encodedLayerUri( const Data &conn );
|
||||
|
||||
//! Returns list of existing connections, unless the hidden ones
|
||||
static QStringList connectionList();
|
||||
|
||||
//! Returns connection details
|
||||
static QgsVectorTileConnection connection( const QString &name );
|
||||
|
||||
static Data connection( const QString &name );
|
||||
//! Removes a connection from the list
|
||||
static void deleteConnection( const QString &name );
|
||||
|
||||
//! Adds a new connection to the list
|
||||
static void addConnection( const QgsVectorTileConnection &conn );
|
||||
static void addConnection( const QString &name, Data conn );
|
||||
};
|
||||
|
||||
///@endcond
|
||||
|
||||
@ -30,11 +30,11 @@ QgsVectorTileRootItem::QgsVectorTileRootItem( QgsDataItem *parent, QString name,
|
||||
QVector<QgsDataItem *> QgsVectorTileRootItem::createChildren()
|
||||
{
|
||||
QVector<QgsDataItem *> connections;
|
||||
const auto connectionList = QgsVectorTileConnectionUtils::connectionList();
|
||||
const auto connectionList = QgsVectorTileProviderConnection::connectionList();
|
||||
for ( const QString &connName : connectionList )
|
||||
{
|
||||
QgsVectorTileConnection connection( QgsVectorTileConnectionUtils::connection( connName ) );
|
||||
QgsDataItem *conn = new QgsVectorTileLayerItem( this, connName, mPath + '/' + connName, connection.encodedUri() );
|
||||
QString uri = QgsVectorTileProviderConnection::encodedLayerUri( QgsVectorTileProviderConnection::connection( connName ) );
|
||||
QgsDataItem *conn = new QgsVectorTileLayerItem( this, connName, mPath + '/' + connName, uri );
|
||||
connections.append( conn );
|
||||
}
|
||||
return connections;
|
||||
|
||||
@ -15,6 +15,7 @@
|
||||
|
||||
#include "qgsvectortileprovidermetadata.h"
|
||||
|
||||
#include "qgsvectortileconnection.h"
|
||||
#include "qgsvectortiledataitems.h"
|
||||
|
||||
///@cond PRIVATE
|
||||
@ -34,4 +35,24 @@ QList<QgsDataItemProvider *> QgsVectorTileProviderMetadata::dataItemProviders()
|
||||
return providers;
|
||||
}
|
||||
|
||||
QMap<QString, QgsAbstractProviderConnection *> QgsVectorTileProviderMetadata::connections( bool cached )
|
||||
{
|
||||
return connectionsProtected<QgsVectorTileProviderConnection, QgsVectorTileProviderConnection>( cached );
|
||||
}
|
||||
|
||||
QgsAbstractProviderConnection *QgsVectorTileProviderMetadata::createConnection( const QString &name )
|
||||
{
|
||||
return new QgsVectorTileProviderConnection( name );
|
||||
}
|
||||
|
||||
void QgsVectorTileProviderMetadata::deleteConnection( const QString &name )
|
||||
{
|
||||
deleteConnectionProtected<QgsVectorTileProviderConnection>( name );
|
||||
}
|
||||
|
||||
void QgsVectorTileProviderMetadata::saveConnection( const QgsAbstractProviderConnection *connection, const QString &name )
|
||||
{
|
||||
saveConnectionProtected( connection, name );
|
||||
}
|
||||
|
||||
///@endcond
|
||||
|
||||
@ -33,6 +33,13 @@ class QgsVectorTileProviderMetadata : public QgsProviderMetadata
|
||||
QgsVectorTileProviderMetadata();
|
||||
QList< QgsDataItemProvider * > dataItemProviders() const override;
|
||||
|
||||
// handling of stored connections
|
||||
|
||||
QMap<QString, QgsAbstractProviderConnection *> connections( bool cached ) override;
|
||||
QgsAbstractProviderConnection *createConnection( const QString &name ) override;
|
||||
void deleteConnection( const QString &name ) override;
|
||||
void saveConnection( const QgsAbstractProviderConnection *connection, const QString &name ) override;
|
||||
|
||||
};
|
||||
|
||||
///@endcond
|
||||
|
||||
@ -31,9 +31,11 @@ QgsVectorTileConnectionDialog::QgsVectorTileConnectionDialog( QWidget *parent )
|
||||
connect( mCheckBoxZMax, &QCheckBox::toggled, mSpinZMax, &QSpinBox::setEnabled );
|
||||
}
|
||||
|
||||
void QgsVectorTileConnectionDialog::setConnection( const QgsVectorTileConnection &conn )
|
||||
void QgsVectorTileConnectionDialog::setConnection( const QString &name, const QString &uri )
|
||||
{
|
||||
mEditName->setText( conn.name );
|
||||
mEditName->setText( name );
|
||||
|
||||
QgsVectorTileProviderConnection::Data conn = QgsVectorTileProviderConnection::decodedUri( uri );
|
||||
mEditUrl->setText( conn.url );
|
||||
mCheckBoxZMin->setChecked( conn.zMin != -1 );
|
||||
mSpinZMin->setValue( conn.zMin != -1 ? conn.zMin : 0 );
|
||||
@ -41,16 +43,20 @@ void QgsVectorTileConnectionDialog::setConnection( const QgsVectorTileConnection
|
||||
mSpinZMax->setValue( conn.zMax != -1 ? conn.zMax : 14 );
|
||||
}
|
||||
|
||||
QgsVectorTileConnection QgsVectorTileConnectionDialog::connection() const
|
||||
QString QgsVectorTileConnectionDialog::connectionUri() const
|
||||
{
|
||||
QgsVectorTileConnection conn;
|
||||
conn.name = mEditName->text();
|
||||
QgsVectorTileProviderConnection::Data conn;
|
||||
conn.url = mEditUrl->text();
|
||||
if ( mCheckBoxZMin->isChecked() )
|
||||
conn.zMin = mSpinZMin->value();
|
||||
if ( mCheckBoxZMax->isChecked() )
|
||||
conn.zMax = mSpinZMax->value();
|
||||
return conn;
|
||||
return QgsVectorTileProviderConnection::encodedUri( conn );
|
||||
}
|
||||
|
||||
QString QgsVectorTileConnectionDialog::connectionName() const
|
||||
{
|
||||
return mEditName->text();
|
||||
}
|
||||
|
||||
void QgsVectorTileConnectionDialog::accept()
|
||||
|
||||
@ -24,18 +24,16 @@
|
||||
#include "ui_qgsvectortileconnectiondialog.h"
|
||||
|
||||
|
||||
struct QgsVectorTileConnection;
|
||||
|
||||
|
||||
class QgsVectorTileConnectionDialog : public QDialog, public Ui::QgsVectorTileConnectionDialog
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
explicit QgsVectorTileConnectionDialog( QWidget *parent = nullptr );
|
||||
|
||||
void setConnection( const QgsVectorTileConnection &conn );
|
||||
void setConnection( const QString &name, const QString &uri );
|
||||
|
||||
QgsVectorTileConnection connection() const;
|
||||
QString connectionUri() const;
|
||||
QString connectionName() const;
|
||||
|
||||
void accept() override;
|
||||
|
||||
|
||||
@ -57,12 +57,14 @@ void QgsVectorTileDataItemGuiProvider::populateContextMenu( QgsDataItem *item, Q
|
||||
void QgsVectorTileDataItemGuiProvider::editConnection( QgsDataItem *item )
|
||||
{
|
||||
QgsVectorTileConnectionDialog dlg;
|
||||
dlg.setConnection( QgsVectorTileConnectionUtils::connection( item->name() ) );
|
||||
QString uri = QgsVectorTileProviderConnection::encodedUri( QgsVectorTileProviderConnection::connection( item->name() ) );
|
||||
dlg.setConnection( item->name(), uri );
|
||||
if ( !dlg.exec() )
|
||||
return;
|
||||
|
||||
QgsVectorTileConnectionUtils::deleteConnection( item->name() );
|
||||
QgsVectorTileConnectionUtils::addConnection( dlg.connection() );
|
||||
QgsVectorTileProviderConnection::deleteConnection( item->name() );
|
||||
QgsVectorTileProviderConnection::Data conn = QgsVectorTileProviderConnection::decodedUri( dlg.connectionUri() );
|
||||
QgsVectorTileProviderConnection::addConnection( dlg.connectionName(), conn );
|
||||
|
||||
item->parent()->refreshConnections();
|
||||
}
|
||||
@ -73,7 +75,7 @@ void QgsVectorTileDataItemGuiProvider::deleteConnection( QgsDataItem *item )
|
||||
QMessageBox::Yes | QMessageBox::No, QMessageBox::No ) != QMessageBox::Yes )
|
||||
return;
|
||||
|
||||
QgsVectorTileConnectionUtils::deleteConnection( item->name() );
|
||||
QgsVectorTileProviderConnection::deleteConnection( item->name() );
|
||||
|
||||
item->parent()->refreshConnections();
|
||||
}
|
||||
@ -84,7 +86,9 @@ void QgsVectorTileDataItemGuiProvider::newConnection( QgsDataItem *item )
|
||||
if ( !dlg.exec() )
|
||||
return;
|
||||
|
||||
QgsVectorTileConnectionUtils::addConnection( dlg.connection() );
|
||||
QgsVectorTileProviderConnection::Data conn = QgsVectorTileProviderConnection::decodedUri( dlg.connectionUri() );
|
||||
QgsVectorTileProviderConnection::addConnection( dlg.connectionName(), conn );
|
||||
|
||||
item->refreshConnections();
|
||||
}
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user