43  setWindowTitle( tr( 
"Add Vector Tile Layer" ) );
 
   45  mRadioSourceService->setChecked( 
true );
 
   46  mStackedWidget->setCurrentIndex( 1 );
 
   48  connect( mRadioSourceFile, &QRadioButton::toggled, 
this, [
this]
 
   50    mStackedWidget->setCurrentIndex( 0 );
 
   52    emit enableButtons( !mFileWidget->filePath().isEmpty() );
 
   54  connect( mRadioSourceService, &QRadioButton::toggled, 
this, [
this]
 
   56    mStackedWidget->setCurrentIndex( 1 );
 
   58    emit enableButtons( !cmbConnections->currentText().isEmpty() );
 
   61  btnNew->setPopupMode( QToolButton::InstantPopup );
 
   62  QMenu *newMenu = 
new QMenu( btnNew );
 
   64  QAction *actionNew = 
new QAction( tr( 
"New Generic Connection…" ), 
this );
 
   65  connect( actionNew, &QAction::triggered, 
this, &QgsVectorTileSourceSelect::btnNew_clicked );
 
   66  newMenu->addAction( actionNew );
 
   68  QAction *actionNewArcGISConnection = 
new QAction( tr( 
"New ArcGIS Vector Tile Service Connection…" ), 
this );
 
   69  connect( actionNewArcGISConnection, &QAction::triggered, 
this, &QgsVectorTileSourceSelect::newArcgisVectorTileServerConnection );
 
   70  newMenu->addAction( actionNewArcGISConnection );
 
   72  btnNew->setMenu( newMenu );
 
   74  connect( btnEdit, &QToolButton::clicked, 
this, &QgsVectorTileSourceSelect::btnEdit_clicked );
 
   75  connect( btnDelete, &QToolButton::clicked, 
this, &QgsVectorTileSourceSelect::btnDelete_clicked );
 
   76  connect( btnSave, &QToolButton::clicked, 
this, &QgsVectorTileSourceSelect::btnSave_clicked );
 
   77  connect( btnLoad, &QToolButton::clicked, 
this, &QgsVectorTileSourceSelect::btnLoad_clicked );
 
   78  connect( cmbConnections, &QComboBox::currentTextChanged, 
this, &QgsVectorTileSourceSelect::cmbConnections_currentTextChanged );
 
   79  connect( buttonBox, &QDialogButtonBox::helpRequested, 
this, &QgsVectorTileSourceSelect::showHelp );
 
   80  setupButtons( buttonBox );
 
   82  populateConnectionList();
 
   84  mFileWidget->setDialogTitle( tr( 
"Open Vector Tile Dataset" ) );
 
   87  mFileWidget->setOptions( QFileDialog::HideNameFilterDetails );
 
   90    emit enableButtons( !path.isEmpty() );
 
   94void QgsVectorTileSourceSelect::btnNew_clicked()
 
   96  QgsVectorTileConnectionDialog nc( 
this );
 
   99    QgsVectorTileProviderConnection::addConnection( nc.connectionName(), QgsVectorTileProviderConnection::decodedUri( nc.connectionUri() ) );
 
  100    populateConnectionList();
 
  101    emit connectionsChanged();
 
  105void QgsVectorTileSourceSelect::newArcgisVectorTileServerConnection()
 
  107  QgsArcgisVectorTileConnectionDialog nc( 
this );
 
  110    QgsVectorTileProviderConnection::addConnection( nc.connectionName(), QgsVectorTileProviderConnection::decodedUri( nc.connectionUri() ) );
 
  111    populateConnectionList();
 
  112    emit connectionsChanged();
 
  116void QgsVectorTileSourceSelect::btnEdit_clicked()
 
  118  const QgsVectorTileProviderConnection::Data connection = QgsVectorTileProviderConnection::connection( cmbConnections->currentText() );
 
  119  const QString uri = QgsVectorTileProviderConnection::encodedUri( connection );
 
  121  switch ( connection.serviceType )
 
  123    case QgsVectorTileProviderConnection::Generic:
 
  125      QgsVectorTileConnectionDialog nc( 
this );
 
  126      nc.setConnection( cmbConnections->currentText(), uri );
 
  129        QgsVectorTileProviderConnection::addConnection( nc.connectionName(), QgsVectorTileProviderConnection::decodedUri( nc.connectionUri() ) );
 
  130        populateConnectionList();
 
  131        emit connectionsChanged();
 
  136    case QgsVectorTileProviderConnection::ArcgisVectorTileService:
 
  138      QgsArcgisVectorTileConnectionDialog nc( 
this );
 
  140      nc.setConnection( cmbConnections->currentText(), uri );
 
  143        QgsVectorTileProviderConnection::addConnection( nc.connectionName(), QgsVectorTileProviderConnection::decodedUri( nc.connectionUri() ) );
 
  144        populateConnectionList();
 
  145        emit connectionsChanged();
 
  152void QgsVectorTileSourceSelect::btnDelete_clicked()
 
  154  const QString msg = tr( 
"Are you sure you want to remove the %1 connection and all associated settings?" )
 
  155                      .arg( cmbConnections->currentText() );
 
  156  if ( QMessageBox::Yes != QMessageBox::question( 
this, tr( 
"Confirm Delete" ), msg, QMessageBox::Yes | QMessageBox::No ) )
 
  159  QgsVectorTileProviderConnection::deleteConnection( cmbConnections->currentText() );
 
  161  populateConnectionList();
 
  162  emit connectionsChanged();
 
  165void QgsVectorTileSourceSelect::btnSave_clicked()
 
  171void QgsVectorTileSourceSelect::btnLoad_clicked()
 
  173  const QString fileName = QFileDialog::getOpenFileName( 
this, tr( 
"Load Connections" ), QDir::homePath(),
 
  174                           tr( 
"XML files (*.xml *.XML)" ) );
 
  175  if ( fileName.isEmpty() )
 
  182  populateConnectionList();
 
  185void QgsVectorTileSourceSelect::addButtonClicked()
 
  187  if ( mRadioSourceService->isChecked() )
 
  190    const QString uri = QgsVectorTileProviderConnection::encodedUri( QgsVectorTileProviderConnection::connection( cmbConnections->currentText() ) );
 
  191    emit addVectorTileLayer( uri, cmbConnections->currentText() );
 
  193  else if ( mRadioSourceFile->isChecked() )
 
  195    const QString filePath = mFileWidget->filePath();
 
  200      if ( details.layerTypes().contains( Qgis::LayerType::VectorTile ) )
 
  202        providerKey = details.metadata()->key();
 
  207    parts.insert( QStringLiteral( 
"path" ), filePath );
 
  214void QgsVectorTileSourceSelect::populateConnectionList()
 
  216  cmbConnections->blockSignals( 
true );
 
  217  cmbConnections->clear();
 
  218  cmbConnections->addItems( QgsVectorTileProviderConnection::connectionList() );
 
  219  cmbConnections->blockSignals( 
false );
 
  221  btnEdit->setDisabled( cmbConnections->count() == 0 );
 
  222  btnDelete->setDisabled( cmbConnections->count() == 0 );
 
  223  btnSave->setDisabled( cmbConnections->count() == 0 );
 
  224  cmbConnections->setDisabled( cmbConnections->count() == 0 );
 
  226  setConnectionListPosition();
 
  229void QgsVectorTileSourceSelect::setConnectionListPosition()
 
  231  const QString toSelect = QgsVectorTileProviderConnection::selectedConnection();
 
  233  cmbConnections->setCurrentIndex( cmbConnections->findText( toSelect ) );
 
  235  if ( cmbConnections->currentIndex() < 0 )
 
  237    if ( toSelect.isNull() )
 
  238      cmbConnections->setCurrentIndex( 0 );
 
  240      cmbConnections->setCurrentIndex( cmbConnections->count() - 1 );
 
  243  emit enableButtons( !cmbConnections->currentText().isEmpty() );
 
  246void QgsVectorTileSourceSelect::cmbConnections_currentTextChanged( 
const QString &text )
 
  248  QgsVectorTileProviderConnection::setSelectedConnection( text );
 
  249  emit enableButtons( !text.isEmpty() );
 
  252void QgsVectorTileSourceSelect::showHelp()
 
  254  QgsHelp::openHelp( QStringLiteral( 
"managing_data_source/opening_data.html#using-vector-tiles-services" ) );
 
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.
 
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.