17#include "moc_qgsvectortiledataitemguiprovider.cpp"
32void QgsVectorTileDataItemGuiProvider::populateContextMenu(
QgsDataItem *item, QMenu *menu,
const QList<QgsDataItem *> &selection,
QgsDataItemGuiContext context )
34 if ( QgsVectorTileLayerItem *layerItem = qobject_cast<QgsVectorTileLayerItem *>( item ) )
36 const QList<QgsVectorTileLayerItem *> vtConnectionItems = QgsDataItem::filteredItems<QgsVectorTileLayerItem>( selection );
38 if ( vtConnectionItems.size() == 1 )
40 QAction *actionEdit =
new QAction( tr(
"Edit Connection…" ), menu );
41 connect( actionEdit, &QAction::triggered,
this, [layerItem] { editConnection( layerItem ); } );
42 menu->addAction( actionEdit );
44 QAction *actionDuplicate =
new QAction( tr(
"Duplicate Connection" ), menu );
45 connect( actionDuplicate, &QAction::triggered,
this, [layerItem] { duplicateConnection( layerItem ); } );
46 menu->addAction( actionDuplicate );
49 QAction *actionDelete =
new QAction( vtConnectionItems.size() > 1 ? tr(
"Remove Connections…" ) : tr(
"Remove Connection…" ), menu );
50 connect( actionDelete, &QAction::triggered,
this, [vtConnectionItems, context] {
53 menu->addAction( actionDelete );
56 if ( QgsVectorTileRootItem *rootItem = qobject_cast<QgsVectorTileRootItem *>( item ) )
58 QAction *actionNew =
new QAction( tr(
"New Generic Connection…" ), menu );
59 connect( actionNew, &QAction::triggered,
this, [rootItem] { newConnection( rootItem ); } );
60 menu->addAction( actionNew );
62 QAction *actionNewArcGISConnection =
new QAction( tr(
"New ArcGIS Vector Tile Service Connection…" ), menu );
63 connect( actionNewArcGISConnection, &QAction::triggered,
this, [rootItem] { newArcGISConnection( rootItem ); } );
64 menu->addAction( actionNewArcGISConnection );
68 QAction *actionSaveXyzTilesServers =
new QAction( tr(
"Save Connections…" ), menu );
69 connect( actionSaveXyzTilesServers, &QAction::triggered,
this, [] { saveXyzTilesServers(); } );
70 menu->addAction( actionSaveXyzTilesServers );
72 QAction *actionLoadXyzTilesServers =
new QAction( tr(
"Load Connections…" ), menu );
73 connect( actionLoadXyzTilesServers, &QAction::triggered,
this, [rootItem] { loadXyzTilesServers( rootItem ); } );
74 menu->addAction( actionLoadXyzTilesServers );
78void QgsVectorTileDataItemGuiProvider::editConnection(
QgsDataItem *item )
80 const QgsVectorTileProviderConnection::Data connection = QgsVectorTileProviderConnection::connection( item->
name() );
81 const QString uri = QgsVectorTileProviderConnection::encodedUri( connection );
83 switch ( connection.serviceType )
85 case QgsVectorTileProviderConnection::Generic:
87 QgsVectorTileConnectionDialog dlg;
89 dlg.setConnection( item->
name(), uri );
93 QgsVectorTileProviderConnection::deleteConnection( item->
name() );
94 const QgsVectorTileProviderConnection::Data conn = QgsVectorTileProviderConnection::decodedUri( dlg.connectionUri() );
95 QgsVectorTileProviderConnection::addConnection( dlg.connectionName(), conn );
99 case QgsVectorTileProviderConnection::ArcgisVectorTileService:
101 QgsArcgisVectorTileConnectionDialog dlg;
103 dlg.setConnection( item->
name(), uri );
107 QgsVectorTileProviderConnection::deleteConnection( item->
name() );
108 const QgsVectorTileProviderConnection::Data conn = QgsVectorTileProviderConnection::decodedUri( dlg.connectionUri() );
109 QgsVectorTileProviderConnection::addConnection( dlg.connectionName(), conn );
117void QgsVectorTileDataItemGuiProvider::duplicateConnection(
QgsDataItem *item )
119 const QString connectionName = item->
name();
120 const QgsVectorTileProviderConnection::Data connection = QgsVectorTileProviderConnection::connection( connectionName );
121 const QStringList connections = QgsVectorTileProviderConnection::sTreeConnectionVectorTile->items();
125 QgsVectorTileProviderConnection::addConnection( newConnectionName, connection );
129void QgsVectorTileDataItemGuiProvider::newConnection(
QgsDataItem *item )
135 const QgsVectorTileProviderConnection::Data conn = QgsVectorTileProviderConnection::decodedUri( dlg.connectionUri() );
136 QgsVectorTileProviderConnection::addConnection( dlg.connectionName(), conn );
141void QgsVectorTileDataItemGuiProvider::newArcGISConnection(
QgsDataItem *item )
143 QgsArcgisVectorTileConnectionDialog dlg;
147 const QgsVectorTileProviderConnection::Data conn = QgsVectorTileProviderConnection::decodedUri( dlg.connectionUri() );
148 QgsVectorTileProviderConnection::addConnection( dlg.connectionName(), conn );
153void QgsVectorTileDataItemGuiProvider::saveXyzTilesServers()
159void QgsVectorTileDataItemGuiProvider::loadXyzTilesServers(
QgsDataItem *item )
161 const QString fileName = QFileDialog::getOpenFileName(
nullptr, tr(
"Load Connections" ), QDir::homePath(), tr(
"XML files (*.xml *.XML)" ) );
162 if ( fileName.isEmpty() )
168 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.
A dialog for importing or exporting stored connections.