29#include "moc_qgsvectortiledataitemguiprovider.cpp"
33void QgsVectorTileDataItemGuiProvider::populateContextMenu(
QgsDataItem *item, QMenu *menu,
const QList<QgsDataItem *> &selection,
QgsDataItemGuiContext context )
35 if ( QgsVectorTileLayerItem *layerItem = qobject_cast<QgsVectorTileLayerItem *>( item ) )
39 if ( vtConnectionItems.size() == 1 )
41 QAction *actionEdit =
new QAction( tr(
"Edit Connection…" ), menu );
42 connect( actionEdit, &QAction::triggered,
this, [layerItem] { editConnection( layerItem ); } );
43 menu->addAction( actionEdit );
45 QAction *actionDuplicate =
new QAction( tr(
"Duplicate Connection" ), menu );
46 connect( actionDuplicate, &QAction::triggered,
this, [layerItem] { duplicateConnection( layerItem ); } );
47 menu->addAction( actionDuplicate );
50 QAction *actionDelete =
new QAction( vtConnectionItems.size() > 1 ? tr(
"Remove Connections…" ) : tr(
"Remove Connection…" ), menu );
51 connect( actionDelete, &QAction::triggered,
this, [vtConnectionItems, context] {
54 menu->addAction( actionDelete );
57 if ( QgsVectorTileRootItem *rootItem = qobject_cast<QgsVectorTileRootItem *>( item ) )
59 QAction *actionNew =
new QAction( tr(
"New Generic Connection…" ), menu );
60 connect( actionNew, &QAction::triggered,
this, [rootItem] { newConnection( rootItem ); } );
61 menu->addAction( actionNew );
63 QAction *actionNewArcGISConnection =
new QAction( tr(
"New ArcGIS Vector Tile Service Connection…" ), menu );
64 connect( actionNewArcGISConnection, &QAction::triggered,
this, [rootItem] { newArcGISConnection( rootItem ); } );
65 menu->addAction( actionNewArcGISConnection );
69 QAction *actionSaveXyzTilesServers =
new QAction( tr(
"Save Connections…" ), menu );
70 connect( actionSaveXyzTilesServers, &QAction::triggered,
this, [] { saveXyzTilesServers(); } );
71 menu->addAction( actionSaveXyzTilesServers );
73 QAction *actionLoadXyzTilesServers =
new QAction( tr(
"Load Connections…" ), menu );
74 connect( actionLoadXyzTilesServers, &QAction::triggered,
this, [rootItem] { loadXyzTilesServers( rootItem ); } );
75 menu->addAction( actionLoadXyzTilesServers );
79void QgsVectorTileDataItemGuiProvider::editConnection(
QgsDataItem *item )
81 const QgsVectorTileProviderConnection::Data connection = QgsVectorTileProviderConnection::connection( item->
name() );
82 const QString uri = QgsVectorTileProviderConnection::encodedUri( connection );
84 switch ( connection.serviceType )
86 case QgsVectorTileProviderConnection::Generic:
88 QgsVectorTileConnectionDialog dlg;
90 dlg.setConnection( item->
name(), uri );
94 QgsVectorTileProviderConnection::deleteConnection( item->
name() );
95 const QgsVectorTileProviderConnection::Data conn = QgsVectorTileProviderConnection::decodedUri( dlg.connectionUri() );
96 QgsVectorTileProviderConnection::addConnection( dlg.connectionName(), conn );
100 case QgsVectorTileProviderConnection::ArcgisVectorTileService:
102 QgsArcgisVectorTileConnectionDialog dlg;
104 dlg.setConnection( item->
name(), uri );
108 QgsVectorTileProviderConnection::deleteConnection( item->
name() );
109 const QgsVectorTileProviderConnection::Data conn = QgsVectorTileProviderConnection::decodedUri( dlg.connectionUri() );
110 QgsVectorTileProviderConnection::addConnection( dlg.connectionName(), conn );
118void QgsVectorTileDataItemGuiProvider::duplicateConnection(
QgsDataItem *item )
120 const QString connectionName = item->
name();
121 const QgsVectorTileProviderConnection::Data connection = QgsVectorTileProviderConnection::connection( connectionName );
122 const QStringList connections = QgsVectorTileProviderConnection::sTreeConnectionVectorTile->items();
126 QgsVectorTileProviderConnection::addConnection( newConnectionName, connection );
130void QgsVectorTileDataItemGuiProvider::newConnection(
QgsDataItem *item )
136 const QgsVectorTileProviderConnection::Data conn = QgsVectorTileProviderConnection::decodedUri( dlg.connectionUri() );
137 QgsVectorTileProviderConnection::addConnection( dlg.connectionName(), conn );
142void QgsVectorTileDataItemGuiProvider::newArcGISConnection(
QgsDataItem *item )
144 QgsArcgisVectorTileConnectionDialog dlg;
148 const QgsVectorTileProviderConnection::Data conn = QgsVectorTileProviderConnection::decodedUri( dlg.connectionUri() );
149 QgsVectorTileProviderConnection::addConnection( dlg.connectionName(), conn );
154void QgsVectorTileDataItemGuiProvider::saveXyzTilesServers()
160void QgsVectorTileDataItemGuiProvider::loadXyzTilesServers(
QgsDataItem *item )
162 const QString fileName = QFileDialog::getOpenFileName(
nullptr, tr(
"Load Connections" ), QDir::homePath(), tr(
"XML files (*.xml *.XML)" ) );
163 if ( fileName.isEmpty() )
169 if ( dlg.exec() == QDialog::Accepted )
static QgsApplication * instance()
Returns the singleton instance of the QgsApplication.
Encapsulates the context in which a QgsDataItem is shown within the application GUI.
static const QString uniqueName(const QString &name, const QStringList &connectionNames)
Check if connection with name exists in connectionNames list and then try to append a number to it to...
static void deleteConnections(const QList< T * > &items, const std::function< void(const QString &)> &deleteConnection, QgsDataItemGuiContext context)
Handles deletion of a list of connection items.
Base class for all items in the model.
QString name() const
Returns the name of the item (the displayed text for the item).
virtual void refreshConnections(const QString &providerKey=QString())
Causes a data item provider to refresh all registered connections.
QgsDataItem * parent() const
Gets item parent.
static QList< T * > filteredItems(const QList< QgsDataItem * > &items)
Returns a filtered list of data items which match the template type.
A dialog for importing or exporting stored connections.