@@ -186,55 +186,87 @@ void QgsServerSourceSelect::on_btnHelp_clicked()
186
186
187
187
}
188
188
189
- bool QgsServerSourceSelect::populateLayerList ( QgsWmsProvider* wmsProvider )
189
+ QgsNumericSortTreeWidgetItem *QgsServerSourceSelect::createItem (
190
+ int id, const QStringList &names, QMap<int , QgsNumericSortTreeWidgetItem *> &items, int &layerAndStyleCount,
191
+ const QMap<int ,int > &layerParents, const QMap<int , QStringList> &layerParentNames )
192
+
193
+ {
194
+ if ( items.contains (id) )
195
+ return items[id];
196
+
197
+ QgsNumericSortTreeWidgetItem *item;
198
+ if ( layerParents.contains ( id ) )
199
+ {
200
+ int parent = layerParents[ id ];
201
+ item = new QgsNumericSortTreeWidgetItem ( createItem ( parent, layerParentNames[ parent ], items, layerAndStyleCount, layerParents, layerParentNames ) );
202
+ }
203
+ else
204
+ item = new QgsNumericSortTreeWidgetItem ( lstLayers );
205
+
206
+ item->setText ( 0 , QString::number ( ++layerAndStyleCount ) );
207
+ item->setText ( 1 , names[0 ].simplified () );
208
+ item->setText ( 2 , names[1 ].simplified () );
209
+ item->setText ( 3 , names[2 ].simplified () );
210
+
211
+ items[ id ] = item;
212
+
213
+ return item;
214
+ }
215
+
216
+ bool QgsServerSourceSelect::populateLayerList ( QgsWmsProvider *wmsProvider )
190
217
{
191
- std::vector <QgsWmsLayerProperty> layers;
218
+ QVector <QgsWmsLayerProperty> layers;
192
219
193
220
if ( !wmsProvider->supportedLayers ( layers ) )
194
221
{
195
222
return FALSE ;
196
223
}
197
224
225
+ QMap<int , QgsNumericSortTreeWidgetItem *> items;
226
+ QMap<int , int > layerParents;
227
+ QMap<int , QStringList> layerParentNames;
228
+ wmsProvider->layerParents ( layerParents, layerParentNames );
229
+
198
230
lstLayers->clear ();
231
+ lstLayers->setSortingEnabled ( true );
199
232
200
- int layerAndStyleCount = 0 ;
233
+ int layerAndStyleCount = - 1 ;
201
234
202
- for ( std::vector <QgsWmsLayerProperty>::iterator layer = layers.begin ();
235
+ for ( QVector <QgsWmsLayerProperty>::iterator layer = layers.begin ();
203
236
layer != layers.end ();
204
237
layer++ )
205
238
{
206
- // QgsDebugMsg(QString("got layer name %1 and title '%2'.").arg( layer->name).arg( layer->title) );
239
+ QgsNumericSortTreeWidgetItem *lItem = createItem ( layer-> orderId , QStringList () << layer->name << layer->title << layer-> abstract , items, layerAndStyleCount, layerParents, layerParentNames );
207
240
208
- layerAndStyleCount++;
209
-
210
- QgsNumericSortTreeWidgetItem *lItem = new QgsNumericSortTreeWidgetItem ( lstLayers );
211
- lItem->setText ( 0 , QString::number ( layerAndStyleCount ) );
212
- lItem->setText ( 1 , layer->name .simplified () );
213
- lItem->setText ( 2 , layer->title .simplified () );
214
- lItem->setText ( 3 , layer->abstract .simplified () );
241
+ lItem->setData ( 0 , Qt::UserRole, layer->name );
242
+ lItem->setData ( 0 , Qt::UserRole+1 , " " );
215
243
216
244
// Also insert the styles
217
245
// Layer Styles
218
- for ( uint j = 0 ; j < layer->style .size (); j++ )
246
+ for ( int j = 0 ; j < layer->style .size (); j++ )
219
247
{
220
248
QgsDebugMsg ( QString ( " got style name %1 and title '%2'." ).arg ( layer->style [j].name ).arg ( layer->style [j].title ) );
221
249
222
- layerAndStyleCount++;
223
-
224
250
QgsNumericSortTreeWidgetItem *lItem2 = new QgsNumericSortTreeWidgetItem ( lItem );
225
- lItem2->setText ( 0 , QString::number ( layerAndStyleCount ) );
251
+ lItem2->setText ( 0 , QString::number ( ++ layerAndStyleCount ) );
226
252
lItem2->setText ( 1 , layer->style [j].name .simplified () );
227
253
lItem2->setText ( 2 , layer->style [j].title .simplified () );
228
254
lItem2->setText ( 3 , layer->style [j].abstract .simplified () );
229
255
256
+ lItem2->setData ( 0 , Qt::UserRole, layer->name );
257
+ lItem2->setData ( 0 , Qt::UserRole+1 , layer->style [j].name );
230
258
}
231
-
232
259
}
233
260
234
261
// If we got some layers, let the user add them to the map
235
262
if ( lstLayers->topLevelItemCount () > 0 )
236
263
{
237
264
btnAdd->setEnabled ( TRUE );
265
+
266
+ if ( lstLayers->topLevelItemCount ()==1 )
267
+ {
268
+ lstLayers->expandItem ( lstLayers->topLevelItem (0 ) );
269
+ }
238
270
}
239
271
else
240
272
{
@@ -361,7 +393,7 @@ void QgsServerSourceSelect::on_btnAdd_clicked()
361
393
{
362
394
if ( m_selectedLayers.empty () == TRUE )
363
395
{
364
- QMessageBox::information ( this , tr ( " Select Layer" ), tr ( " You must select at least one layer first." ) );
396
+ QMessageBox::information ( this , tr ( " Select Layer" ), tr ( " You must select at least one leaf layer first." ) );
365
397
}
366
398
else if ( mWmsProvider ->supportedCrsForLayers ( m_selectedLayers ).size () == 0 )
367
399
{
@@ -426,28 +458,22 @@ void QgsServerSourceSelect::on_lstLayers_itemSelectionChanged()
426
458
QStringList newSelectedLayers;
427
459
QStringList newSelectedStylesForSelectedLayers;
428
460
429
- std::map <QString, QString> newSelectedStyleIdForLayer;
461
+ QMap <QString, QString> newSelectedStyleIdForLayer;
430
462
431
463
// Iterate through the layers
432
464
QList<QTreeWidgetItem *> selected ( lstLayers->selectedItems () );
433
465
QList<QTreeWidgetItem *>::iterator it;
434
466
for ( it = selected.begin (); it != selected.end (); ++it )
435
467
{
436
468
QTreeWidgetItem *item = *it;
437
- QString layerName;
438
469
439
- if ( item->parent () != 0 )
440
- {
441
- layerName = item->parent ()->text ( 1 );
442
- newSelectedStylesForSelectedLayers += item->text ( 1 );
443
- }
444
- else
445
- {
446
- layerName = item->text ( 1 );
447
- newSelectedStylesForSelectedLayers += " " ;
448
- }
470
+ QString layerName = item->data (0 , Qt::UserRole).toString ();
471
+ if ( layerName.isEmpty () )
472
+ continue ;
473
+
474
+ newSelectedLayers << layerName;
475
+ newSelectedStylesForSelectedLayers << item->data ( 0 , Qt::UserRole+1 ).toString ();
449
476
450
- newSelectedLayers += layerName;
451
477
newSelectedStyleIdForLayer[layerName] = item->text ( 0 );
452
478
453
479
// Check if multiple styles have now been selected
0 commit comments