36#include "moc_qgsvectortilesourceselect.cpp"
38using namespace Qt::StringLiterals;
49 setWindowTitle( tr(
"Add Vector Tile Layer" ) );
51 mRadioSourceService->setChecked(
true );
52 mStackedWidget->setCurrentIndex( 1 );
54 connect( mRadioSourceFile, &QRadioButton::toggled,
this, [
this] {
55 mStackedWidget->setCurrentIndex( 0 );
57 emit enableButtons( !mFileWidget->filePath().isEmpty() );
59 connect( mRadioSourceService, &QRadioButton::toggled,
this, [
this] {
60 mStackedWidget->setCurrentIndex( 1 );
62 emit enableButtons( !cmbConnections->currentText().isEmpty() );
65 btnNew->setPopupMode( QToolButton::InstantPopup );
66 QMenu *newMenu =
new QMenu( btnNew );
68 QAction *actionNew =
new QAction( tr(
"New Generic Connection…" ),
this );
69 connect( actionNew, &QAction::triggered,
this, &QgsVectorTileSourceSelect::btnNew_clicked );
70 newMenu->addAction( actionNew );
72 QAction *actionNewArcGISConnection =
new QAction( tr(
"New ArcGIS Vector Tile Service Connection…" ),
this );
73 connect( actionNewArcGISConnection, &QAction::triggered,
this, &QgsVectorTileSourceSelect::newArcgisVectorTileServerConnection );
74 newMenu->addAction( actionNewArcGISConnection );
76 btnNew->setMenu( newMenu );
78 connect( btnEdit, &QToolButton::clicked,
this, &QgsVectorTileSourceSelect::btnEdit_clicked );
79 connect( btnDelete, &QToolButton::clicked,
this, &QgsVectorTileSourceSelect::btnDelete_clicked );
80 connect( btnSave, &QToolButton::clicked,
this, &QgsVectorTileSourceSelect::btnSave_clicked );
81 connect( btnLoad, &QToolButton::clicked,
this, &QgsVectorTileSourceSelect::btnLoad_clicked );
82 connect( cmbConnections, &QComboBox::currentTextChanged,
this, &QgsVectorTileSourceSelect::cmbConnections_currentTextChanged );
83 connect( buttonBox, &QDialogButtonBox::helpRequested,
this, &QgsVectorTileSourceSelect::showHelp );
84 setupButtons( buttonBox );
86 populateConnectionList();
88 mFileWidget->setDialogTitle( tr(
"Open Vector Tile Dataset" ) );
91 mFileWidget->setOptions( QFileDialog::HideNameFilterDetails );
93 emit enableButtons( !path.isEmpty() );
97void QgsVectorTileSourceSelect::btnNew_clicked()
99 QgsVectorTileConnectionDialog nc(
this );
102 QgsVectorTileProviderConnection::addConnection( nc.connectionName(), QgsVectorTileProviderConnection::decodedUri( nc.connectionUri() ) );
103 populateConnectionList();
104 QgsVectorTileProviderConnection::setSelectedConnection( nc.connectionName() );
105 setConnectionListPosition();
106 emit connectionsChanged();
110void QgsVectorTileSourceSelect::newArcgisVectorTileServerConnection()
112 QgsArcgisVectorTileConnectionDialog nc(
this );
115 QgsVectorTileProviderConnection::addConnection( nc.connectionName(), QgsVectorTileProviderConnection::decodedUri( nc.connectionUri() ) );
116 populateConnectionList();
117 emit connectionsChanged();
121void QgsVectorTileSourceSelect::btnEdit_clicked()
123 const QgsVectorTileProviderConnection::Data connection = QgsVectorTileProviderConnection::connection( cmbConnections->currentText() );
124 const QString uri = QgsVectorTileProviderConnection::encodedUri( connection );
126 switch ( connection.serviceType )
128 case QgsVectorTileProviderConnection::Generic:
130 QgsVectorTileConnectionDialog nc(
this );
131 nc.setConnection( cmbConnections->currentText(), uri );
134 QgsVectorTileProviderConnection::addConnection( nc.connectionName(), QgsVectorTileProviderConnection::decodedUri( nc.connectionUri() ) );
135 populateConnectionList();
136 emit connectionsChanged();
141 case QgsVectorTileProviderConnection::ArcgisVectorTileService:
143 QgsArcgisVectorTileConnectionDialog nc(
this );
145 nc.setConnection( cmbConnections->currentText(), uri );
148 QgsVectorTileProviderConnection::addConnection( nc.connectionName(), QgsVectorTileProviderConnection::decodedUri( nc.connectionUri() ) );
149 populateConnectionList();
150 emit connectionsChanged();
157void QgsVectorTileSourceSelect::btnDelete_clicked()
159 const QString msg = tr(
"Are you sure you want to remove the %1 connection and all associated settings?" )
160 .arg( cmbConnections->currentText() );
161 if ( QMessageBox::Yes != QMessageBox::question(
this, tr(
"Confirm Delete" ), msg, QMessageBox::Yes | QMessageBox::No ) )
164 QgsVectorTileProviderConnection::deleteConnection( cmbConnections->currentText() );
166 populateConnectionList();
167 emit connectionsChanged();
170void QgsVectorTileSourceSelect::btnSave_clicked()
176void QgsVectorTileSourceSelect::btnLoad_clicked()
178 const QString fileName = QFileDialog::getOpenFileName(
this, tr(
"Load Connections" ), QDir::homePath(), tr(
"XML files (*.xml *.XML)" ) );
179 if ( fileName.isEmpty() )
186 populateConnectionList();
189void QgsVectorTileSourceSelect::addButtonClicked()
191 if ( mRadioSourceService->isChecked() )
193 const QString uri = QgsVectorTileProviderConnection::encodedUri( QgsVectorTileProviderConnection::connection( cmbConnections->currentText() ) );
195 emit addVectorTileLayer( uri, cmbConnections->currentText() );
199 else if ( mRadioSourceFile->isChecked() )
201 const QString filePath = mFileWidget->filePath();
208 providerKey = details.metadata()->key();
213 parts.insert( u
"path"_s, filePath );
223void QgsVectorTileSourceSelect::populateConnectionList()
225 cmbConnections->blockSignals(
true );
226 cmbConnections->clear();
227 cmbConnections->addItems( QgsVectorTileProviderConnection::connectionList() );
228 cmbConnections->blockSignals(
false );
230 btnEdit->setDisabled( cmbConnections->count() == 0 );
231 btnDelete->setDisabled( cmbConnections->count() == 0 );
232 btnSave->setDisabled( cmbConnections->count() == 0 );
233 cmbConnections->setDisabled( cmbConnections->count() == 0 );
235 setConnectionListPosition();
238void QgsVectorTileSourceSelect::setConnectionListPosition()
240 const QString toSelect = QgsVectorTileProviderConnection::selectedConnection();
242 cmbConnections->setCurrentIndex( cmbConnections->findText( toSelect ) );
244 if ( cmbConnections->currentIndex() < 0 )
246 if ( toSelect.isNull() )
247 cmbConnections->setCurrentIndex( 0 );
249 cmbConnections->setCurrentIndex( cmbConnections->count() - 1 );
252 emit enableButtons( !cmbConnections->currentText().isEmpty() );
255void QgsVectorTileSourceSelect::cmbConnections_currentTextChanged(
const QString &text )
257 QgsVectorTileProviderConnection::setSelectedConnection( text );
258 emit enableButtons( !text.isEmpty() );
261void QgsVectorTileSourceSelect::showHelp()
263 QgsHelp::openHelp( u
"managing_data_source/opening_data.html#using-vector-tiles-services"_s );
@ VectorTile
Vector tile layer. Added in QGIS 3.14.
static void enableAutoGeometryRestore(QWidget *widget, const QString &key=QString())
Register the widget to allow its position to be automatically saved and restored when open and closed...
static void openHelp(const QString &key)
Opens help topic for the given help key using default system web browser.
A dialog for importing or exporting stored connections.
Contains information pertaining to a candidate provider.
static QgsProviderRegistry * instance(const QString &pluginPath=QString())
Means of accessing canonical single instance.
WidgetMode
Different ways a source select dialog can be used.
QList< QgsProviderRegistry::ProviderCandidateDetails > preferredProvidersForUri(const QString &uri) const
Returns the details for the preferred provider(s) for opening the specified uri.
QString encodeUri(const QString &providerKey, const QVariantMap &parts)
Reassembles a provider data source URI from its component paths (e.g.
static QString suggestLayerNameFromFilePath(const QString &path)
Suggests a suitable layer name given only a file path.
#define Q_NOWARN_DEPRECATED_POP
#define Q_NOWARN_DEPRECATED_PUSH