Skip to content

Commit

Permalink
[feature] vector tile connections import/export
Browse files Browse the repository at this point in the history
  • Loading branch information
alexbruy committed Apr 16, 2020
1 parent 498ca22 commit b1ed51a
Show file tree
Hide file tree
Showing 5 changed files with 137 additions and 7 deletions.
3 changes: 2 additions & 1 deletion python/gui/auto_generated/qgsmanageconnectionsdialog.sip.in
Expand Up @@ -34,7 +34,8 @@ class QgsManageConnectionsDialog : QDialog
GeoNode,
XyzTiles,
ArcgisMapServer,
ArcgisFeatureServer
ArcgisFeatureServer,
VectorTile
};

QgsManageConnectionsDialog( QWidget *parent /TransferThis/ = 0, Mode mode = Export, Type type = WMS, const QString &fileName = QString() );
Expand Down
116 changes: 116 additions & 0 deletions src/gui/qgsmanageconnectionsdialog.cpp
Expand Up @@ -142,6 +142,9 @@ void QgsManageConnectionsDialog::doExportImport()
case ArcgisFeatureServer:
doc = saveArcgisConnections( items, QStringLiteral( "ARCGISFEATURESERVER" ) );
break;
case VectorTile:
doc = saveVectorTileConnections( items );
break;
}

QFile file( mFileName );
Expand Down Expand Up @@ -219,6 +222,9 @@ void QgsManageConnectionsDialog::doExportImport()
case ArcgisFeatureServer:
loadArcgisConnections( doc, items, QStringLiteral( "ARCGISFEATURESERVER" ) );
break;
case VectorTile:
loadVectorTileConnections( doc, items );
break;
}
// clear connections list and close window
listConnections->clear();
Expand Down Expand Up @@ -269,6 +275,9 @@ bool QgsManageConnectionsDialog::populateConnections()
case ArcgisFeatureServer:
settings.beginGroup( QStringLiteral( "/qgis/connections-arcgisfeatureserver" ) );
break;
case VectorTile:
settings.beginGroup( QStringLiteral( "/qgis/connections-vector-tile" ) );
break;
}
QStringList keys = settings.childGroups();
QStringList::Iterator it = keys.begin();
Expand Down Expand Up @@ -404,6 +413,14 @@ bool QgsManageConnectionsDialog::populateConnections()
return false;
}
break;
case VectorTile:
if ( root.tagName() != QLatin1String( "qgsVectorTileConnections" ) )
{
QMessageBox::information( this, tr( "Loading Connections" ),
tr( "The file is not a Vector Tile connections exchange file." ) );
return false;
}
break;
}

QDomElement child = root.firstChildElement();
Expand Down Expand Up @@ -730,6 +747,31 @@ QDomDocument QgsManageConnectionsDialog::saveArcgisConnections( const QStringLis
return doc;
}

QDomDocument QgsManageConnectionsDialog::saveVectorTileConnections( const QStringList &connections )
{
QDomDocument doc( QStringLiteral( "connections" ) );
QDomElement root = doc.createElement( QStringLiteral( "qgsVectorTileConnections" ) );
root.setAttribute( QStringLiteral( "version" ), QStringLiteral( "1.0" ) );
doc.appendChild( root );

QgsSettings settings;
QString path;
for ( int i = 0; i < connections.count(); ++i )
{
path = "qgis/connections-vector-tile/" + connections[ i ];
QDomElement el = doc.createElement( QStringLiteral( "vectortile" ) );

el.setAttribute( QStringLiteral( "name" ), connections[ i ] );
el.setAttribute( QStringLiteral( "url" ), settings.value( path + "/url", "" ).toString() );
el.setAttribute( QStringLiteral( "zmin" ), settings.value( path + "/zmin", -1 ).toInt() );
el.setAttribute( QStringLiteral( "zmax" ), settings.value( path + "/zmax", -1 ).toInt() );

root.appendChild( el );
}

return doc;
}

void QgsManageConnectionsDialog::loadOWSConnections( const QDomDocument &doc, const QStringList &items, const QString &service )
{
QDomElement root = doc.documentElement();
Expand Down Expand Up @@ -1492,6 +1534,80 @@ void QgsManageConnectionsDialog::loadArcgisConnections( const QDomDocument &doc,
}
}

void QgsManageConnectionsDialog::loadVectorTileConnections( const QDomDocument &doc, const QStringList &items )
{
QDomElement root = doc.documentElement();
if ( root.tagName() != QLatin1String( "qgsVectorTileConnections" ) )
{
QMessageBox::information( this, tr( "Loading Connections" ),
tr( "The file is not a Vector Tile connections exchange file." ) );
return;
}

QString connectionName;
QgsSettings settings;
settings.beginGroup( QStringLiteral( "/qgis/connections-vector-tile" ) );
QStringList keys = settings.childGroups();
settings.endGroup();
QDomElement child = root.firstChildElement();
bool prompt = true;
bool overwrite = true;

while ( !child.isNull() )
{
connectionName = child.attribute( QStringLiteral( "name" ) );
if ( !items.contains( connectionName ) )
{
child = child.nextSiblingElement();
continue;
}

// check for duplicates
if ( keys.contains( connectionName ) && prompt )
{
int res = QMessageBox::warning( this,
tr( "Loading Connections" ),
tr( "Connection with name '%1' already exists. Overwrite?" )
.arg( connectionName ),
QMessageBox::Yes | QMessageBox::YesToAll | QMessageBox::No | QMessageBox::NoToAll | QMessageBox::Cancel );

switch ( res )
{
case QMessageBox::Cancel:
return;
case QMessageBox::No:
child = child.nextSiblingElement();
continue;
case QMessageBox::Yes:
overwrite = true;
break;
case QMessageBox::YesToAll:
prompt = false;
overwrite = true;
break;
case QMessageBox::NoToAll:
prompt = false;
overwrite = false;
break;
}
}

if ( keys.contains( connectionName ) && !overwrite )
{
child = child.nextSiblingElement();
continue;
}

settings.beginGroup( "qgis/connections-vector-tile/" + connectionName );
settings.setValue( QStringLiteral( "url" ), child.attribute( QStringLiteral( "url" ) ) );
settings.setValue( QStringLiteral( "zmin" ), child.attribute( QStringLiteral( "zmin" ) ) );
settings.setValue( QStringLiteral( "zmax" ), child.attribute( QStringLiteral( "zmax" ) ) );
settings.endGroup();

child = child.nextSiblingElement();
}
}

void QgsManageConnectionsDialog::selectAll()
{
listConnections->selectAll();
Expand Down
5 changes: 4 additions & 1 deletion src/gui/qgsmanageconnectionsdialog.h
Expand Up @@ -51,7 +51,8 @@ class GUI_EXPORT QgsManageConnectionsDialog : public QDialog, private Ui::QgsMan
GeoNode,
XyzTiles,
ArcgisMapServer,
ArcgisFeatureServer
ArcgisFeatureServer,
VectorTile
};

/**
Expand All @@ -77,6 +78,7 @@ class GUI_EXPORT QgsManageConnectionsDialog : public QDialog, private Ui::QgsMan
QDomDocument saveGeonodeConnections( const QStringList &connections );
QDomDocument saveXyzTilesConnections( const QStringList &connections );
QDomDocument saveArcgisConnections( const QStringList &connections, const QString &service );
QDomDocument saveVectorTileConnections( const QStringList &connections );

void loadOWSConnections( const QDomDocument &doc, const QStringList &items, const QString &service );
void loadWfsConnections( const QDomDocument &doc, const QStringList &items );
Expand All @@ -87,6 +89,7 @@ class GUI_EXPORT QgsManageConnectionsDialog : public QDialog, private Ui::QgsMan
void loadGeonodeConnections( const QDomDocument &doc, const QStringList &items );
void loadXyzTilesConnections( const QDomDocument &doc, const QStringList &items );
void loadArcgisConnections( const QDomDocument &doc, const QStringList &items, const QString &service );
void loadVectorTileConnections( const QDomDocument &doc, const QStringList &items );

QString mFileName;
Mode mDialogMode;
Expand Down
4 changes: 2 additions & 2 deletions src/gui/vectortile/qgsvectortiledataitemguiprovider.cpp
Expand Up @@ -94,7 +94,7 @@ void QgsVectorTileDataItemGuiProvider::newConnection( QgsDataItem *item )

void QgsVectorTileDataItemGuiProvider::saveXyzTilesServers()
{
QgsManageConnectionsDialog dlg( nullptr, QgsManageConnectionsDialog::Export, QgsManageConnectionsDialog::XyzTiles );
QgsManageConnectionsDialog dlg( nullptr, QgsManageConnectionsDialog::Export, QgsManageConnectionsDialog::VectorTile );
dlg.exec();
}

Expand All @@ -107,7 +107,7 @@ void QgsVectorTileDataItemGuiProvider::loadXyzTilesServers( QgsDataItem *item )
return;
}

QgsManageConnectionsDialog dlg( nullptr, QgsManageConnectionsDialog::Import, QgsManageConnectionsDialog::XyzTiles, fileName );
QgsManageConnectionsDialog dlg( nullptr, QgsManageConnectionsDialog::Import, QgsManageConnectionsDialog::VectorTile, fileName );
dlg.exec();
item->refreshConnections();
}
Expand Down
16 changes: 13 additions & 3 deletions src/gui/vectortile/qgsvectortilesourceselect.cpp
Expand Up @@ -44,9 +44,7 @@ QgsVectorTileSourceSelect::QgsVectorTileSourceSelect( QWidget *parent, Qt::Windo
connect( buttonBox, &QDialogButtonBox::helpRequested, this, &QgsVectorTileSourceSelect::showHelp );
setupButtons( buttonBox );

// hide import/export buttons and disable help button
btnSave->hide();
btnLoad->hide();
// disable help button until we got an entry in the docs
buttonBox->button( QDialogButtonBox::Help )->setEnabled( false );

populateConnectionList();
Expand Down Expand Up @@ -91,10 +89,22 @@ void QgsVectorTileSourceSelect::btnDelete_clicked()

void QgsVectorTileSourceSelect::btnSave_clicked()
{
QgsManageConnectionsDialog dlg( this, QgsManageConnectionsDialog::Export, QgsManageConnectionsDialog::VectorTile );
dlg.exec();
}

void QgsVectorTileSourceSelect::btnLoad_clicked()
{
QString fileName = QFileDialog::getOpenFileName( this, tr( "Load Connections" ), QDir::homePath(),
tr( "XML files (*.xml *.XML)" ) );
if ( fileName.isEmpty() )
{
return;
}

QgsManageConnectionsDialog dlg( this, QgsManageConnectionsDialog::Import, QgsManageConnectionsDialog::VectorTile, fileName );
dlg.exec();
populateConnectionList();
}

void QgsVectorTileSourceSelect::addButtonClicked()
Expand Down

0 comments on commit b1ed51a

Please sign in to comment.