QGIS API Documentation 3.39.0-Master (47f7b3a4989)
Loading...
Searching...
No Matches
qgsvectortiledataitemguiprovider.cpp
Go to the documentation of this file.
1/***************************************************************************
2 qgsvectortiledataitemguiprovider.cpp
3 --------------------------------------
4 Date : March 2020
5 Copyright : (C) 2020 by Martin Dobias
6 Email : wonder dot sk at gmail dot com
7 ***************************************************************************
8 * *
9 * This program is free software; you can redistribute it and/or modify *
10 * it under the terms of the GNU General Public License as published by *
11 * the Free Software Foundation; either version 2 of the License, or *
12 * (at your option) any later version. *
13 * *
14 ***************************************************************************/
15
17
24
25#include <QFileDialog>
26#include <QMessageBox>
27
29
30void QgsVectorTileDataItemGuiProvider::populateContextMenu( QgsDataItem *item, QMenu *menu, const QList<QgsDataItem *> &selection, QgsDataItemGuiContext context )
31{
32 if ( QgsVectorTileLayerItem *layerItem = qobject_cast< QgsVectorTileLayerItem * >( item ) )
33 {
34 QAction *actionEdit = new QAction( tr( "Edit Connection…" ), menu );
35 connect( actionEdit, &QAction::triggered, this, [layerItem] { editConnection( layerItem ); } );
36 menu->addAction( actionEdit );
37
38 const QList< QgsVectorTileLayerItem * > vtConnectionItems = QgsDataItem::filteredItems<QgsVectorTileLayerItem>( selection );
39 QAction *actionDelete = new QAction( vtConnectionItems.size() > 1 ? tr( "Remove Connections…" ) : tr( "Remove Connection…" ), menu );
40 connect( actionDelete, &QAction::triggered, this, [vtConnectionItems, context]
41 {
42 QgsDataItemGuiProviderUtils::deleteConnections( vtConnectionItems, []( const QString & connectionName )
43 {
44 QgsVectorTileProviderConnection::deleteConnection( connectionName );
45 }, context );
46 } );
47 menu->addAction( actionDelete );
48 }
49
50 if ( QgsVectorTileRootItem *rootItem = qobject_cast< QgsVectorTileRootItem * >( item ) )
51 {
52 QAction *actionNew = new QAction( tr( "New Generic Connection…" ), menu );
53 connect( actionNew, &QAction::triggered, this, [rootItem] { newConnection( rootItem ); } );
54 menu->addAction( actionNew );
55
56 QAction *actionNewArcGISConnection = new QAction( tr( "New ArcGIS Vector Tile Service Connection…" ), menu );
57 connect( actionNewArcGISConnection, &QAction::triggered, this, [rootItem] { newArcGISConnection( rootItem ); } );
58 menu->addAction( actionNewArcGISConnection );
59
60 menu->addSeparator();
61
62 QAction *actionSaveXyzTilesServers = new QAction( tr( "Save Connections…" ), menu );
63 connect( actionSaveXyzTilesServers, &QAction::triggered, this, [] { saveXyzTilesServers(); } );
64 menu->addAction( actionSaveXyzTilesServers );
65
66 QAction *actionLoadXyzTilesServers = new QAction( tr( "Load Connections…" ), menu );
67 connect( actionLoadXyzTilesServers, &QAction::triggered, this, [rootItem] { loadXyzTilesServers( rootItem ); } );
68 menu->addAction( actionLoadXyzTilesServers );
69 }
70}
71
72void QgsVectorTileDataItemGuiProvider::editConnection( QgsDataItem *item )
73{
74 const QgsVectorTileProviderConnection::Data connection = QgsVectorTileProviderConnection::connection( item->name() );
75 const QString uri = QgsVectorTileProviderConnection::encodedUri( connection );
76
77 switch ( connection.serviceType )
78 {
79 case QgsVectorTileProviderConnection::Generic:
80 {
81 QgsVectorTileConnectionDialog dlg;
82
83 dlg.setConnection( item->name(), uri );
84 if ( !dlg.exec() )
85 return;
86
87 QgsVectorTileProviderConnection::deleteConnection( item->name() );
88 const QgsVectorTileProviderConnection::Data conn = QgsVectorTileProviderConnection::decodedUri( dlg.connectionUri() );
89 QgsVectorTileProviderConnection::addConnection( dlg.connectionName(), conn );
90 break;
91 }
92
93 case QgsVectorTileProviderConnection::ArcgisVectorTileService:
94 {
95 QgsArcgisVectorTileConnectionDialog dlg;
96
97 dlg.setConnection( item->name(), uri );
98 if ( !dlg.exec() )
99 return;
100
101 QgsVectorTileProviderConnection::deleteConnection( item->name() );
102 const QgsVectorTileProviderConnection::Data conn = QgsVectorTileProviderConnection::decodedUri( dlg.connectionUri() );
103 QgsVectorTileProviderConnection::addConnection( dlg.connectionName(), conn );
104 break;
105 }
106 }
107
108 item->parent()->refreshConnections();
109}
110
111void QgsVectorTileDataItemGuiProvider::newConnection( QgsDataItem *item )
112{
113 QgsVectorTileConnectionDialog dlg;
114 if ( !dlg.exec() )
115 return;
116
117 const QgsVectorTileProviderConnection::Data conn = QgsVectorTileProviderConnection::decodedUri( dlg.connectionUri() );
118 QgsVectorTileProviderConnection::addConnection( dlg.connectionName(), conn );
119
120 item->refreshConnections();
121}
122
123void QgsVectorTileDataItemGuiProvider::newArcGISConnection( QgsDataItem *item )
124{
125 QgsArcgisVectorTileConnectionDialog dlg;
126 if ( !dlg.exec() )
127 return;
128
129 const QgsVectorTileProviderConnection::Data conn = QgsVectorTileProviderConnection::decodedUri( dlg.connectionUri() );
130 QgsVectorTileProviderConnection::addConnection( dlg.connectionName(), conn );
131
132 item->refreshConnections();
133}
134
135void QgsVectorTileDataItemGuiProvider::saveXyzTilesServers()
136{
138 dlg.exec();
139}
140
141void QgsVectorTileDataItemGuiProvider::loadXyzTilesServers( QgsDataItem *item )
142{
143 const QString fileName = QFileDialog::getOpenFileName( nullptr, tr( "Load Connections" ), QDir::homePath(),
144 tr( "XML files (*.xml *.XML)" ) );
145 if ( fileName.isEmpty() )
146 {
147 return;
148 }
149
151 if ( dlg.exec() == QDialog::Accepted )
152 item->refreshConnections();
153}
154
Encapsulates the context in which a QgsDataItem is shown within the application GUI.
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.
Definition qgsdataitem.h:46
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.