Skip to content

Commit 71c7ce1

Browse files
committedAug 20, 2018
[Server][Feature][needs-docs] Update WMTS service UI: manage output format
The user can choose the image format for WMTS tiles.
1 parent 912effa commit 71c7ce1

File tree

3 files changed

+117
-26
lines changed

3 files changed

+117
-26
lines changed
 

‎src/app/qgsprojectproperties.cpp

Lines changed: 101 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -663,20 +663,47 @@ QgsProjectProperties::QgsProjectProperties( QgsMapCanvas *mapCanvas, QWidget *pa
663663
}
664664

665665
bool wmtsProject = QgsProject::instance()->readBoolEntry( QStringLiteral( "WMTSLayers" ), QStringLiteral( "Project" ) );
666+
bool wmtsPngProject = QgsProject::instance()->readBoolEntry( QStringLiteral( "WMTSPngLayers" ), QStringLiteral( "Project" ) );
667+
bool wmtsJpegProject = QgsProject::instance()->readBoolEntry( QStringLiteral( "WMTSJpegLayers" ), QStringLiteral( "Project" ) );
666668
QStringList wmtsGroupNameList = QgsProject::instance()->readListEntry( QStringLiteral( "WMTSLayers" ), QStringLiteral( "Group" ) );
669+
QStringList wmtsPngGroupNameList = QgsProject::instance()->readListEntry( QStringLiteral( "WMTSPngLayers" ), QStringLiteral( "Group" ) );
670+
QStringList wmtsJpegGroupNameList = QgsProject::instance()->readListEntry( QStringLiteral( "WMTSJpegLayers" ), QStringLiteral( "Group" ) );
667671
QStringList wmtsLayerIdList = QgsProject::instance()->readListEntry( QStringLiteral( "WMTSLayers" ), QStringLiteral( "Layer" ) );
672+
QStringList wmtsPngLayerIdList = QgsProject::instance()->readListEntry( QStringLiteral( "WMTSPngLayers" ), QStringLiteral( "Layer" ) );
673+
QStringList wmtsJpegLayerIdList = QgsProject::instance()->readListEntry( QStringLiteral( "WMTSJpegLayers" ), QStringLiteral( "Layer" ) );
668674

669675
QgsTreeWidgetItem *projItem = new QgsTreeWidgetItem( QStringList() << QStringLiteral( "Project" ) << QLatin1String( "" ) );
670676
projItem->setFlags( projItem->flags() | Qt::ItemIsUserCheckable | Qt::ItemIsSelectable );
671-
if ( wmtsProject )
672-
projItem->setCheckState( 1, Qt::Checked );
673-
else
674-
projItem->setCheckState( 1, Qt::Unchecked );
677+
projItem->setCheckState( 1, wmtsProject ? Qt::Checked : Qt::Unchecked );
678+
projItem->setCheckState( 2, wmtsPngProject ? Qt::Checked : Qt::Unchecked );
679+
projItem->setCheckState( 3, wmtsJpegProject ? Qt::Checked : Qt::Unchecked );
675680
projItem->setData( 0, Qt::UserRole, "project" );
676681
twWmtsLayers->addTopLevelItem( projItem );
677-
popupulateWmtsTree( QgsProject::instance()->layerTreeRoot(), projItem, wmtsGroupNameList, wmtsLayerIdList );
682+
populateWmtsTree( QgsProject::instance()->layerTreeRoot(), projItem );
678683
projItem->setExpanded( true );
679684
twWmtsLayers->header()->resizeSections( QHeaderView::ResizeToContents );
685+
Q_FOREACH ( QTreeWidgetItem *item, twWmtsLayers->findItems( "", Qt::MatchContains | Qt::MatchRecursive, 1 ) )
686+
{
687+
/*if ( !item->checkState( 1 ) )
688+
continue;*/
689+
690+
QString t = item->data( 0, Qt::UserRole ).toString();
691+
if ( t == "group" )
692+
{
693+
QString gName = item->data( 0, Qt::UserRole + 1 ).toString();
694+
item->setCheckState( 1, wmtsGroupNameList.contains( gName ) ? Qt::Checked : Qt::Unchecked );
695+
item->setCheckState( 2, wmtsPngGroupNameList.contains( gName ) ? Qt::Checked : Qt::Unchecked );
696+
item->setCheckState( 3, wmtsJpegGroupNameList.contains( gName ) ? Qt::Checked : Qt::Unchecked );
697+
}
698+
else if ( t == "layer" )
699+
{
700+
QString lId = item->data( 0, Qt::UserRole + 1 ).toString();
701+
item->setCheckState( 1, wmtsLayerIdList.contains( lId ) ? Qt::Checked : Qt::Unchecked );
702+
item->setCheckState( 2, wmtsPngLayerIdList.contains( lId ) ? Qt::Checked : Qt::Unchecked );
703+
item->setCheckState( 3, wmtsJpegLayerIdList.contains( lId ) ? Qt::Checked : Qt::Unchecked );
704+
}
705+
}
706+
connect( twWmtsLayers, &QTreeWidget::itemChanged, this, &QgsProjectProperties::twWmtsItemChanged );
680707

681708
mWFSUrlLineEdit->setText( QgsProject::instance()->readEntry( QStringLiteral( "WFSUrl" ), QStringLiteral( "/" ), QLatin1String( "" ) ) );
682709
QStringList wfsLayerIdList = QgsProject::instance()->readListEntry( QStringLiteral( "WFSLayers" ), QStringLiteral( "/" ) );
@@ -1239,8 +1266,14 @@ void QgsProjectProperties::apply()
12391266
}
12401267

12411268
bool wmtsProject = false;
1269+
bool wmtsPngProject = false;
1270+
bool wmtsJpegProject = false;
12421271
QStringList wmtsGroupList;
1272+
QStringList wmtsPngGroupList;
1273+
QStringList wmtsJpegGroupList;
12431274
QStringList wmtsLayerList;
1275+
QStringList wmtsPngLayerList;
1276+
QStringList wmtsJpegLayerList;
12441277
Q_FOREACH ( const QTreeWidgetItem *item, twWmtsLayers->findItems( "", Qt::MatchContains | Qt::MatchRecursive, 1 ) )
12451278
{
12461279
if ( !item->checkState( 1 ) )
@@ -1250,19 +1283,37 @@ void QgsProjectProperties::apply()
12501283
if ( t == "project" )
12511284
{
12521285
wmtsProject = true;
1286+
wmtsPngProject = item->checkState( 2 );
1287+
wmtsJpegProject = item->checkState( 3 );
12531288
}
12541289
else if ( t == "group" )
12551290
{
1256-
wmtsGroupList << item->data( 0, Qt::UserRole + 1 ).toString();
1291+
QString gName = item->data( 0, Qt::UserRole + 1 ).toString();
1292+
wmtsGroupList << gName;
1293+
if ( item->checkState( 2 ) )
1294+
wmtsPngGroupList << gName;
1295+
if ( item->checkState( 3 ) )
1296+
wmtsJpegGroupList << gName;
12571297
}
12581298
else if ( t == "layer" )
12591299
{
1260-
wmtsLayerList << item->data( 0, Qt::UserRole + 1 ).toString();
1300+
QString lId = item->data( 0, Qt::UserRole + 1 ).toString();
1301+
wmtsLayerList << lId;
1302+
if ( item->checkState( 2 ) )
1303+
wmtsPngLayerList << lId;
1304+
if ( item->checkState( 3 ) )
1305+
wmtsJpegLayerList << lId;
12611306
}
12621307
}
12631308
QgsProject::instance()->writeEntry( QStringLiteral( "WMTSLayers" ), QStringLiteral( "Project" ), wmtsProject );
1309+
QgsProject::instance()->writeEntry( QStringLiteral( "WMTSPngLayers" ), QStringLiteral( "Project" ), wmtsPngProject );
1310+
QgsProject::instance()->writeEntry( QStringLiteral( "WMTSJpegLayers" ), QStringLiteral( "Project" ), wmtsJpegProject );
12641311
QgsProject::instance()->writeEntry( QStringLiteral( "WMTSLayers" ), QStringLiteral( "Group" ), wmtsGroupList );
1312+
QgsProject::instance()->writeEntry( QStringLiteral( "WMTSPngLayers" ), QStringLiteral( "Group" ), wmtsPngGroupList );
1313+
QgsProject::instance()->writeEntry( QStringLiteral( "WMTSJpegLayers" ), QStringLiteral( "Group" ), wmtsJpegGroupList );
12651314
QgsProject::instance()->writeEntry( QStringLiteral( "WMTSLayers" ), QStringLiteral( "Layer" ), wmtsLayerList );
1315+
QgsProject::instance()->writeEntry( QStringLiteral( "WMTSPngLayers" ), QStringLiteral( "Layer" ), wmtsPngLayerList );
1316+
QgsProject::instance()->writeEntry( QStringLiteral( "WMTSJpegLayers" ), QStringLiteral( "Layer" ), wmtsJpegLayerList );
12661317

12671318
QgsProject::instance()->writeEntry( QStringLiteral( "WFSUrl" ), QStringLiteral( "/" ), mWFSUrlLineEdit->text() );
12681319
QStringList wfsLayerList;
@@ -1358,6 +1409,31 @@ void QgsProjectProperties::showProjectionsTab()
13581409
mOptionsListWidget->setCurrentRow( 2 );
13591410
}
13601411

1412+
void QgsProjectProperties::twWmtsItemChanged( QTreeWidgetItem *item, int column )
1413+
{
1414+
if ( column == 1 && !item->checkState( 1 ) )
1415+
{
1416+
item->setCheckState( 2, Qt::Unchecked );
1417+
item->setCheckState( 3, Qt::Unchecked );
1418+
}
1419+
else if ( column == 1 && item->checkState( 1 ) &&
1420+
!item->checkState( 2 ) && !item->checkState( 3 ) )
1421+
{
1422+
item->setCheckState( 2, Qt::Checked );
1423+
item->setCheckState( 3, Qt::Checked );
1424+
}
1425+
else if ( ( column == 2 && item->checkState( 2 ) ) ||
1426+
( column == 3 && item->checkState( 3 ) ) )
1427+
{
1428+
item->setCheckState( 1, Qt::Checked );
1429+
}
1430+
else if ( ( column == 2 && !item->checkState( 2 ) && !item->checkState( 3 ) ) ||
1431+
( column == 3 && !item->checkState( 2 ) && !item->checkState( 3 ) ) )
1432+
{
1433+
item->setCheckState( 1, Qt::Unchecked );
1434+
}
1435+
}
1436+
13611437
void QgsProjectProperties::cbxWFSPubliedStateChanged( int aIdx )
13621438
{
13631439
QCheckBox *cb = qobject_cast<QCheckBox *>( twWFSLayers->cellWidget( aIdx, 1 ) );
@@ -1955,39 +2031,39 @@ void QgsProjectProperties::resetPythonMacros()
19552031
"def closeProject():\n pass\n" );
19562032
}
19572033

1958-
void QgsProjectProperties::popupulateWmtsTree( QgsLayerTreeGroup *treeGroup, QgsTreeWidgetItem *treeItem, const QStringList &groupNames, const QStringList &layerIds )
2034+
void QgsProjectProperties::populateWmtsTree( const QgsLayerTreeGroup *treeGroup, QgsTreeWidgetItem *treeItem )
19592035
{
1960-
QList< QgsLayerTreeNode * > treeGroupChildren = treeGroup->children();
1961-
for ( int i = 0; i < treeGroupChildren.size(); ++i )
2036+
Q_FOREACH ( QgsLayerTreeNode *treeNode, treeGroup->children() )
19622037
{
1963-
QgsTreeWidgetItem *childItem;
1964-
childItem->setFlags( childItem->flags() | Qt::ItemIsUserCheckable | Qt::ItemIsSelectable );
1965-
QgsLayerTreeNode *treeNode = treeGroupChildren.at( i );
2038+
QgsTreeWidgetItem *childItem = nullptr;
19662039
if ( treeNode->nodeType() == QgsLayerTreeNode::NodeGroup )
19672040
{
19682041
QgsLayerTreeGroup *treeGroupChild = static_cast<QgsLayerTreeGroup *>( treeNode );
1969-
childItem = new QgsTreeWidgetItem( QStringList() << treeGroupChild->name() << QLatin1String( "" ) );
1970-
if ( groupNames.contains( treeGroupChild->name() ) )
1971-
childItem->setCheckState( 1, Qt::Checked );
1972-
else
1973-
childItem->setCheckState( 1, Qt::Unchecked );
2042+
QString gName = treeGroupChild->name();
2043+
2044+
childItem = new QgsTreeWidgetItem( QStringList() << gName );
2045+
childItem->setFlags( childItem->flags() | Qt::ItemIsUserCheckable | Qt::ItemIsSelectable );
2046+
19742047
childItem->setData( 0, Qt::UserRole, "group" );
1975-
childItem->setData( 0, Qt::UserRole + 1, treeGroupChild->name() );
2048+
childItem->setData( 0, Qt::UserRole + 1, gName );
2049+
19762050
treeItem->addChild( childItem );
1977-
popupulateWmtsTree( treeGroupChild, childItem, groupNames, layerIds );
2051+
2052+
populateWmtsTree( treeGroupChild, childItem );
2053+
19782054
treeItem->setExpanded( true );
19792055
}
19802056
else
19812057
{
19822058
QgsLayerTreeLayer *treeLayer = static_cast<QgsLayerTreeLayer *>( treeNode );
19832059
QgsMapLayer *l = treeLayer->layer();
1984-
childItem = new QgsTreeWidgetItem( QStringList() << l->name() << QLatin1String( "" ) );
1985-
if ( layerIds.contains( l->id() ) )
1986-
childItem->setCheckState( 1, Qt::Checked );
1987-
else
1988-
childItem->setCheckState( 1, Qt::Unchecked );
2060+
2061+
childItem = new QgsTreeWidgetItem( QStringList() << l->name() );
2062+
childItem->setFlags( childItem->flags() | Qt::ItemIsUserCheckable | Qt::ItemIsSelectable );
2063+
19892064
childItem->setData( 0, Qt::UserRole, "layer" );
19902065
childItem->setData( 0, Qt::UserRole + 1, l->id() );
2066+
19912067
treeItem->addChild( childItem );
19922068
}
19932069
}

‎src/app/qgsprojectproperties.h

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,11 @@ class APP_EXPORT QgsProjectProperties : public QgsOptionsDialogBase, private Ui:
136136
void pbtnStyleFill_clicked();
137137
void pbtnStyleColorRamp_clicked();
138138

139+
/**
140+
* Slot to link WMTS checkboxes in tree widget
141+
*/
142+
void twWmtsItemChanged( QTreeWidgetItem *item, int column );
143+
139144
/**
140145
* Slot to link WFS checkboxes
141146
*/
@@ -215,7 +220,7 @@ class APP_EXPORT QgsProjectProperties : public QgsOptionsDialogBase, private Ui:
215220
int mEllipsoidIndex;
216221

217222
//! populate WMTS tree
218-
void popupulateWmtsTree( QgsLayerTreeGroup *treeGroup, QgsTreeWidgetItem *treeItem, const QStringList &groupNames, const QStringList &layerIds );
223+
void populateWmtsTree( const QgsLayerTreeGroup *treeGroup, QgsTreeWidgetItem *treeItem );
219224
//! Check OWS configuration
220225
void checkOWS( QgsLayerTreeGroup *treeGroup, QStringList &owsNames, QStringList &encodingMessages );
221226

‎src/ui/qgsprojectpropertiesbase.ui

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2490,6 +2490,16 @@
24902490
<string>Published</string>
24912491
</property>
24922492
</column>
2493+
<column>
2494+
<property name="text">
2495+
<string>PNG</string>
2496+
</property>
2497+
</column>
2498+
<column>
2499+
<property name="text">
2500+
<string>JPEG</string>
2501+
</property>
2502+
</column>
24932503
</widget>
24942504
</item>
24952505
</layout>

0 commit comments

Comments
 (0)
Please sign in to comment.