Skip to content

Commit 9a25d67

Browse files
authoredMar 20, 2018
Merge pull request #6592 from slarosa/save_load_xyz
[FEATURE][needs-docs] Save/Load connections for XYZ Tiles
2 parents a132c2e + 281a3ed commit 9a25d67

File tree

5 files changed

+167
-3
lines changed

5 files changed

+167
-3
lines changed
 

‎python/gui/qgsmanageconnectionsdialog.sip.in

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,8 @@ class QgsManageConnectionsDialog : QDialog
3131
DB2,
3232
WCS,
3333
Oracle,
34-
GeoNode
34+
GeoNode,
35+
XyzTiles
3536
};
3637

3738
QgsManageConnectionsDialog( QWidget *parent /TransferThis/ = 0, Mode mode = Export, Type type = WMS, const QString &fileName = QString() );

‎src/gui/qgsmanageconnectionsdialog.cpp

Lines changed: 125 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,9 @@ void QgsManageConnectionsDialog::doExportImport()
133133
case GeoNode:
134134
doc = saveGeonodeConnections( items );
135135
break;
136+
case XyzTiles:
137+
doc = saveXyzTilesConnections( items );
138+
break;
136139
}
137140

138141
QFile file( mFileName );
@@ -201,6 +204,9 @@ void QgsManageConnectionsDialog::doExportImport()
201204
case GeoNode:
202205
loadGeonodeConnections( doc, items );
203206
break;
207+
case XyzTiles:
208+
loadXyzTilesConnections( doc, items );
209+
break;
204210
}
205211
// clear connections list and close window
206212
listConnections->clear();
@@ -242,6 +248,9 @@ bool QgsManageConnectionsDialog::populateConnections()
242248
case GeoNode:
243249
settings.beginGroup( QStringLiteral( "/qgis/connections-geonode" ) );
244250
break;
251+
case XyzTiles:
252+
settings.beginGroup( QStringLiteral( "/qgis/connections-xyz" ) );
253+
break;
245254
}
246255
QStringList keys = settings.childGroups();
247256
QStringList::Iterator it = keys.begin();
@@ -353,6 +362,14 @@ bool QgsManageConnectionsDialog::populateConnections()
353362
return false;
354363
}
355364
break;
365+
case XyzTiles:
366+
if ( root.tagName() != QLatin1String( "qgsXYZTilesConnections" ) )
367+
{
368+
QMessageBox::information( this, tr( "Loading Connections" ),
369+
tr( "The file is not a XYZ Tiles connections exchange file." ) );
370+
return false;
371+
}
372+
break;
356373
}
357374

358375
QDomElement child = root.firstChildElement();
@@ -622,6 +639,35 @@ QDomDocument QgsManageConnectionsDialog::saveGeonodeConnections( const QStringLi
622639
return doc;
623640
}
624641

642+
QDomDocument QgsManageConnectionsDialog::saveXyzTilesConnections( const QStringList &connections )
643+
{
644+
QDomDocument doc( QStringLiteral( "connections" ) );
645+
QDomElement root = doc.createElement( QStringLiteral( "qgsXYZTilesConnections" ) );
646+
root.setAttribute( QStringLiteral( "version" ), QStringLiteral( "1.0" ) );
647+
doc.appendChild( root );
648+
649+
QgsSettings settings;
650+
QString path;
651+
for ( int i = 0; i < connections.count(); ++i )
652+
{
653+
path = "qgis/connections-xyz/" + connections[ i ];
654+
QDomElement el = doc.createElement( QStringLiteral( "xyztiles" ) );
655+
656+
el.setAttribute( QStringLiteral( "name" ), connections[ i ] );
657+
el.setAttribute( QStringLiteral( "url" ), settings.value( path + "/url", "" ).toString() );
658+
el.setAttribute( QStringLiteral( "zmin" ), settings.value( path + "/zmin", -1 ).toInt() );
659+
el.setAttribute( QStringLiteral( "zmax" ), settings.value( path + "/zmax", -1 ).toInt() );
660+
el.setAttribute( QStringLiteral( "authcfg" ), settings.value( path + "/authcfg", "" ).toString() );
661+
el.setAttribute( QStringLiteral( "username" ), settings.value( path + "/username", "" ).toString() );
662+
el.setAttribute( QStringLiteral( "password" ), settings.value( path + "/password", "" ).toString() );
663+
el.setAttribute( QStringLiteral( "referer" ), settings.value( path + "/referer", "" ).toString() );
664+
665+
root.appendChild( el );
666+
}
667+
668+
return doc;
669+
}
670+
625671
void QgsManageConnectionsDialog::loadOWSConnections( const QDomDocument &doc, const QStringList &items, const QString &service )
626672
{
627673
QDomElement root = doc.documentElement();
@@ -1226,6 +1272,85 @@ void QgsManageConnectionsDialog::loadGeonodeConnections( const QDomDocument &doc
12261272
}
12271273
}
12281274

1275+
void QgsManageConnectionsDialog::loadXyzTilesConnections( const QDomDocument &doc, const QStringList &items )
1276+
{
1277+
QDomElement root = doc.documentElement();
1278+
if ( root.tagName() != QLatin1String( "qgsXYZTilesConnections" ) )
1279+
{
1280+
QMessageBox::information( this, tr( "Loading Connections" ),
1281+
tr( "The file is not a XYZ Tiles connections exchange file." ) );
1282+
return;
1283+
}
1284+
1285+
QString connectionName;
1286+
QgsSettings settings;
1287+
settings.beginGroup( QStringLiteral( "/qgis/connections-xyz" ) );
1288+
QStringList keys = settings.childGroups();
1289+
settings.endGroup();
1290+
QDomElement child = root.firstChildElement();
1291+
bool prompt = true;
1292+
bool overwrite = true;
1293+
1294+
while ( !child.isNull() )
1295+
{
1296+
connectionName = child.attribute( QStringLiteral( "name" ) );
1297+
if ( !items.contains( connectionName ) )
1298+
{
1299+
child = child.nextSiblingElement();
1300+
continue;
1301+
}
1302+
1303+
// check for duplicates
1304+
if ( keys.contains( connectionName ) && prompt )
1305+
{
1306+
int res = QMessageBox::warning( this,
1307+
tr( "Loading Connections" ),
1308+
tr( "Connection with name '%1' already exists. Overwrite?" )
1309+
.arg( connectionName ),
1310+
QMessageBox::Yes | QMessageBox::YesToAll | QMessageBox::No | QMessageBox::NoToAll | QMessageBox::Cancel );
1311+
1312+
switch ( res )
1313+
{
1314+
case QMessageBox::Cancel:
1315+
return;
1316+
case QMessageBox::No:
1317+
child = child.nextSiblingElement();
1318+
continue;
1319+
case QMessageBox::Yes:
1320+
overwrite = true;
1321+
break;
1322+
case QMessageBox::YesToAll:
1323+
prompt = false;
1324+
overwrite = true;
1325+
break;
1326+
case QMessageBox::NoToAll:
1327+
prompt = false;
1328+
overwrite = false;
1329+
break;
1330+
}
1331+
}
1332+
1333+
if ( keys.contains( connectionName ) && !overwrite )
1334+
{
1335+
child = child.nextSiblingElement();
1336+
continue;
1337+
}
1338+
1339+
settings.beginGroup( "qgis/connections-xyz/" + connectionName );
1340+
settings.setValue( QStringLiteral( "url" ), child.attribute( QStringLiteral( "url" ) ) );
1341+
settings.setValue( QStringLiteral( "zmin" ), child.attribute( QStringLiteral( "zmin" ) ) );
1342+
settings.setValue( QStringLiteral( "zmax" ), child.attribute( QStringLiteral( "zmax" ) ) );
1343+
settings.setValue( QStringLiteral( "authcfg" ), child.attribute( QStringLiteral( "authcfg" ) ) );
1344+
settings.setValue( QStringLiteral( "username" ), child.attribute( QStringLiteral( "username" ) ) );
1345+
settings.setValue( QStringLiteral( "password" ), child.attribute( QStringLiteral( "password" ) ) );
1346+
settings.setValue( QStringLiteral( "referer" ), child.attribute( QStringLiteral( "referer" ) ) );
1347+
settings.endGroup();
1348+
1349+
child = child.nextSiblingElement();
1350+
}
1351+
}
1352+
1353+
12291354
void QgsManageConnectionsDialog::selectAll()
12301355
{
12311356
listConnections->selectAll();

‎src/gui/qgsmanageconnectionsdialog.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,8 @@ class GUI_EXPORT QgsManageConnectionsDialog : public QDialog, private Ui::QgsMan
4848
DB2,
4949
WCS,
5050
Oracle,
51-
GeoNode
51+
GeoNode,
52+
XyzTiles
5253
};
5354

5455
/**
@@ -72,6 +73,7 @@ class GUI_EXPORT QgsManageConnectionsDialog : public QDialog, private Ui::QgsMan
7273
QDomDocument saveOracleConnections( const QStringList &connections );
7374
QDomDocument saveDb2Connections( const QStringList &connections );
7475
QDomDocument saveGeonodeConnections( const QStringList &connections );
76+
QDomDocument saveXyzTilesConnections( const QStringList &connections );
7577

7678
void loadOWSConnections( const QDomDocument &doc, const QStringList &items, const QString &service );
7779
void loadWfsConnections( const QDomDocument &doc, const QStringList &items );
@@ -80,6 +82,7 @@ class GUI_EXPORT QgsManageConnectionsDialog : public QDialog, private Ui::QgsMan
8082
void loadOracleConnections( const QDomDocument &doc, const QStringList &items );
8183
void loadDb2Connections( const QDomDocument &doc, const QStringList &items );
8284
void loadGeonodeConnections( const QDomDocument &doc, const QStringList &items );
85+
void loadXyzTilesConnections( const QDomDocument &doc, const QStringList &items );
8386

8487
QString mFileName;
8588
Mode mDialogMode;

‎src/providers/wms/qgswmsdataitems.cpp

Lines changed: 34 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,12 +27,14 @@
2727
#include "qgsnewhttpconnection.h"
2828
#include "qgstilescalewidget.h"
2929
#include "qgsxyzconnectiondialog.h"
30+
#include "qgsmanageconnectionsdialog.h"
3031
#endif
3132
#include "qgsgeonodeconnection.h"
3233
#include "qgsgeonoderequest.h"
3334
#include "qgssettings.h"
3435

3536
#include <QInputDialog>
37+
#include <QFileDialog>
3638

3739
// ---------------------------------------------------------------------------
3840
QgsWMSConnectionItem::QgsWMSConnectionItem( QgsDataItem *parent, QString name, QString path, QString uri )
@@ -474,9 +476,20 @@ QVector<QgsDataItem *> QgsXyzTileRootItem::createChildren()
474476
#ifdef HAVE_GUI
475477
QList<QAction *> QgsXyzTileRootItem::actions( QWidget *parent )
476478
{
479+
QList<QAction *> lst;
480+
477481
QAction *actionNew = new QAction( tr( "New Connection…" ), parent );
478482
connect( actionNew, &QAction::triggered, this, &QgsXyzTileRootItem::newConnection );
479-
return QList<QAction *>() << actionNew;
483+
QAction *saveXyzTilesServers = new QAction( tr( "Save Connections…" ), parent );
484+
connect( saveXyzTilesServers, &QAction::triggered, this, &QgsXyzTileRootItem::saveXyzTilesServers );
485+
QAction *loadXyzTilesServers = new QAction( tr( "Load Connections…" ), parent );
486+
connect( loadXyzTilesServers, &QAction::triggered, this, &QgsXyzTileRootItem::loadXyzTilesServers );
487+
488+
lst.append( actionNew );
489+
lst.append( saveXyzTilesServers );
490+
lst.append( loadXyzTilesServers );
491+
492+
return lst;
480493
}
481494

482495
void QgsXyzTileRootItem::newConnection()
@@ -488,6 +501,26 @@ void QgsXyzTileRootItem::newConnection()
488501
QgsXyzConnectionUtils::addConnection( dlg.connection() );
489502
refreshConnections();
490503
}
504+
505+
void QgsXyzTileRootItem::saveXyzTilesServers()
506+
{
507+
QgsManageConnectionsDialog dlg( nullptr, QgsManageConnectionsDialog::Export, QgsManageConnectionsDialog::XyzTiles );
508+
dlg.exec();
509+
}
510+
511+
void QgsXyzTileRootItem::loadXyzTilesServers()
512+
{
513+
QString fileName = QFileDialog::getOpenFileName( nullptr, tr( "Load Connections" ), QDir::homePath(),
514+
tr( "XML files (*.xml *XML)" ) );
515+
if ( fileName.isEmpty() )
516+
{
517+
return;
518+
}
519+
520+
QgsManageConnectionsDialog dlg( nullptr, QgsManageConnectionsDialog::Import, QgsManageConnectionsDialog::XyzTiles, fileName );
521+
dlg.exec();
522+
refreshConnections();
523+
}
491524
#endif
492525

493526

‎src/providers/wms/qgswmsdataitems.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,8 @@ class QgsXyzTileRootItem : public QgsDataCollectionItem
146146
private slots:
147147
#ifdef HAVE_GUI
148148
void newConnection();
149+
void saveXyzTilesServers();
150+
void loadXyzTilesServers();
149151
#endif
150152
};
151153

0 commit comments

Comments
 (0)
Please sign in to comment.