wms-layer-tree.diff

show nested layers in trees and allow sorting - Jürgen Fischer, 2008-12-08 09:52 AM

Download (20.7 KB)

View differences:

src/app/qgsserversourceselect.h (working copy)
21 21
#include "ui_qgsserversourceselectbase.h"
22 22
#include "qgisgui.h"
23 23

  
24
#include <vector>
25
#include <map>
26
#include <set>
24
#include <QStringList>
27 25

  
28 26
class QgisApp;
29 27
class QgsWmsProvider;
30 28
class QButtonGroup;
29
class QgsNumericSortTreeWidgetItem;
30

  
31 31
/*!
32 32
 * \brief   Dialog to create connections and add layers from WMS, etc.
33 33
 *
......
140 140
    //! Populate the image encoding button group - private for now.
141 141
    void populateImageEncodingGroup( QgsWmsProvider* wmsProvider );
142 142

  
143
    //! create an item including possible parents
144
    QgsNumericSortTreeWidgetItem *createItem(int id, const QStringList &names, QMap<int, QgsNumericSortTreeWidgetItem *> &items, int &layerAndStyleCount, const QMap<int,int> &layerParents, const QMap<int, QStringList> &layerParentNames );
145

  
143 146
    //! Returns a textual description for the EpsgCrsId number
144 147
    QString descriptionForEpsg( long epsg );
145 148

  
......
165 168
    QStringList m_selectedStylesForSelectedLayers;
166 169
    long m_Epsg;
167 170

  
168
    std::map<QString, QString> m_selectedStyleIdForLayer;
171
    QMap<QString, QString> m_selectedStyleIdForLayer;
169 172

  
170 173
    //! The mime type, the text to use in the button and a unique number
171 174
    QMap<QString, QPair<QString, int> > m_PotentialFormats;
src/app/qgsserversourceselect.cpp (working copy)
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

  
190 193
{
191
  std::vector<QgsWmsLayerProperty> layers;
194
  if( items.contains(id) )
195
    return items[id];
192 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 )
217
{
218
  QVector<QgsWmsLayerProperty> layers;
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++;
241
    lItem->setData( 0, Qt::UserRole, layer->name );
242
    lItem->setData( 0, Qt::UserRole+1, "" );
209 243

  
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() );
215

  
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
  {
......
360 392
{
361 393
  if ( m_selectedLayers.empty() == TRUE )
362 394
  {
363
    QMessageBox::information( this, tr( "Select Layer" ), tr( "You must select at least one layer first." ) );
395
    QMessageBox::information( this, tr( "Select Layer" ), tr( "You must select at least one leaf layer first." ) );
364 396
  }
365 397
  else if ( mWmsProvider->supportedCrsForLayers( m_selectedLayers ).size() == 0 )
366 398
  {
......
425 457
  QStringList newSelectedLayers;
426 458
  QStringList newSelectedStylesForSelectedLayers;
427 459

  
428
  std::map<QString, QString> newSelectedStyleIdForLayer;
460
  QMap<QString, QString> newSelectedStyleIdForLayer;
429 461

  
430 462
  // Iterate through the layers
431 463
  QList<QTreeWidgetItem *> selected( lstLayers->selectedItems() );
......
433 465
  for ( it = selected.begin(); it != selected.end(); ++it )
434 466
  {
435 467
    QTreeWidgetItem *item = *it;
436
    QString layerName;
437 468

  
438
    if ( item->parent() != 0 )
439
    {
440
      layerName = item->parent()->text( 1 );
441
      newSelectedStylesForSelectedLayers += item->text( 1 );
442
    }
443
    else
444
    {
445
      layerName = item->text( 1 );
446
      newSelectedStylesForSelectedLayers += "";
447
    }
469
    QString layerName = item->data(0, Qt::UserRole).toString();
470
    if( layerName.isEmpty() )
471
      continue;
448 472

  
449
    newSelectedLayers += layerName;
473
    newSelectedLayers << layerName;
474
    newSelectedStylesForSelectedLayers << item->data( 0, Qt::UserRole+1 ).toString();
475

  
450 476
    newSelectedStyleIdForLayer[layerName] = item->text( 0 );
451 477

  
452 478
    // Check if multiple styles have now been selected
src/providers/wms/qgswmsprovider.h (working copy)
21 21
#ifndef QGSWMSPROVIDER_H
22 22
#define QGSWMSPROVIDER_H
23 23

  
24
#include <map>
25
#include <vector>
26

  
27 24
#include "qgsrasterdataprovider.h"
28 25
#include "qgsrectangle.h"
29 26

  
30 27
#include <QString>
31 28
#include <QStringList>
32 29
#include <QDomElement>
30
#include <QMap>
31
#include <QVector>
33 32

  
34 33
class QgsCoordinateTransform;
35 34

  
......
78 77
// TODO: Fill to WMS specifications
79 78
struct QgsWmsOperationType
80 79
{
81
  QStringList                          format;
82
  std::vector<QgsWmsDcpTypeProperty>   dcpType;
80
  QStringList                      format;
81
  QVector<QgsWmsDcpTypeProperty>   dcpType;
83 82
};
84 83

  
85 84
/** Request Property structure */
......
220 219
// TODO: Fill to WMS specifications
221 220
struct QgsWmsStyleProperty
222 221
{
223
  QString                               name;
224
  QString                               title;
225
  QString                               abstract;
226
  std::vector<QgsWmsLegendUrlProperty>  legendUrl;
227
  QgsWmsStyleSheetUrlProperty           styleSheetUrl;
228
  QgsWmsStyleUrlProperty                styleUrl;
222
  QString                           name;
223
  QString                           title;
224
  QString                           abstract;
225
  QVector<QgsWmsLegendUrlProperty>  legendUrl;
226
  QgsWmsStyleSheetUrlProperty       styleSheetUrl;
227
  QgsWmsStyleUrlProperty            styleUrl;
229 228
};
230 229

  
231 230
/** Authority URL Property structure */
......
273 272
struct QgsWmsLayerProperty
274 273
{
275 274
  // WMS layer properties
276
  QString                                     name;
277
  QString                                     title;
278
  QString                                     abstract;
279
  QStringList                                 keywordList;
280
  std::vector<QString>                        crs;        // coord ref sys
281
  QgsRectangle                                     ex_GeographicBoundingBox;
282
  std::vector<QgsWmsBoundingBoxProperty>      boundingBox;
283
  std::vector<QgsWmsDimensionProperty>        dimension;
284
  QgsWmsAttributionProperty                   attribution;
285
  std::vector<QgsWmsAuthorityUrlProperty>     authorityUrl;
286
  std::vector<QgsWmsIdentifierProperty>       identifier;
287
  std::vector<QgsWmsMetadataUrlProperty>      metadataUrl;
288
  std::vector<QgsWmsDataListUrlProperty>      dataListUrl;
289
  std::vector<QgsWmsFeatureListUrlProperty>   featureListUrl;
290
  std::vector<QgsWmsStyleProperty>            style;
291
  double                                      minimumScaleDenominator;
292
  double                                      maximumScaleDenominator;
293
  std::vector<QgsWmsLayerProperty>            layer;      // nested layers
275
  int					  orderId;
276
  QString                                 name;
277
  QString                                 title;
278
  QString                                 abstract;
279
  QStringList                             keywordList;
280
  QVector<QString>                        crs;        // coord ref sys
281
  QgsRectangle                            ex_GeographicBoundingBox;
282
  QVector<QgsWmsBoundingBoxProperty>      boundingBox;
283
  QVector<QgsWmsDimensionProperty>        dimension;
284
  QgsWmsAttributionProperty               attribution;
285
  QVector<QgsWmsAuthorityUrlProperty>     authorityUrl;
286
  QVector<QgsWmsIdentifierProperty>       identifier;
287
  QVector<QgsWmsMetadataUrlProperty>      metadataUrl;
288
  QVector<QgsWmsDataListUrlProperty>      dataListUrl;
289
  QVector<QgsWmsFeatureListUrlProperty>   featureListUrl;
290
  QVector<QgsWmsStyleProperty>            style;
291
  double                                  minimumScaleDenominator;
292
  double                                  maximumScaleDenominator;
293
  QVector<QgsWmsLayerProperty>            layer;      // nested layers
294 294

  
295 295
  // WMS layer attributes
296 296
  bool               queryable;
......
331 331
*/
332 332
class QgsWmsProvider : public QgsRasterDataProvider
333 333
{
334

  
335 334
    Q_OBJECT
336 335

  
337 336
  public:
338

  
339

  
340 337
    /**
341 338
    * Constructor for the provider.
342 339
    *
......
359 356
     *
360 357
     * \todo Document this better, make static
361 358
     */
362
    virtual bool supportedLayers( std::vector<QgsWmsLayerProperty> & layers );
359
    virtual bool supportedLayers( QVector<QgsWmsLayerProperty> & layers );
363 360

  
361
    /**
362
     * \brief   Returns a map for the hierachy of layers 
363
     */
364
    virtual void layerParents( QMap<int, int> &parents, QMap<int, QStringList> &parentNames ) const;
365

  
364 366
    // TODO: Document this better
365 367
    /** \brief   Returns a list of the supported CRSs of the given layers
366 368
     *  \note    Since WMS can specify CRSs per layer, this may change depending
......
735 737
    /**
736 738
     * layers hosted by the WMS Server
737 739
     */
738
    std::vector<QgsWmsLayerProperty> layersSupported;
740
    QVector<QgsWmsLayerProperty> layersSupported;
739 741

  
740 742
    /**
741 743
     * extents per layer (in WMS CRS:84 datum)
742 744
     */
743
    std::map<QString, QgsRectangle> extentForLayer;
745
    QMap<QString, QgsRectangle> extentForLayer;
744 746

  
745 747
    /**
746 748
     * available CRSs per layer
747 749
     */
748
    std::map<QString, std::vector<QString> > crsForLayer;
750
    QMap<QString, QVector<QString> > crsForLayer;
749 751

  
750 752
    /**
751 753
     * WMS "queryable" per layer
752 754
     * Used in determining if the Identify map tool can be useful on the rendered WMS map layer.
753 755
     */
754
    std::map<QString, bool> mQueryableForLayer;
756
    QMap<QString, bool> mQueryableForLayer;
755 757

  
756 758
    /**
757 759
     * Active sublayers managed by this provider in a draw function, in order from bottom to top
......
764 766
    /**
765 767
     * Visibility status of the given active sublayer
766 768
     */
767
    std::map<QString, bool> activeSubLayerVisibility;
769
    QMap<QString, bool> activeSubLayerVisibility;
768 770

  
769 771
    /**
770 772
     * MIME type of the image encoding used from the WMS server
......
816 818

  
817 819
    //! Base URL for WMS GetFeatureInfo requests
818 820
    QString mGetFeatureInfoUrlBase;
821

  
822
    int mLayerCount;
823
    QMap<int, int> mLayerParents;
824
    QMap<int, QStringList> mLayerParentNames;
825

  
819 826
};
820 827

  
821 828
#endif
src/providers/wms/qgswmsprovider.cpp (working copy)
59 59
    cachedPixelHeight( 0 ),
60 60
    mCoordinateTransform( 0 ),
61 61
    extentDirty( TRUE ),
62
    mGetFeatureInfoUrlBase( 0 )
62
    mGetFeatureInfoUrlBase( 0 ),
63
    mLayerCount( -1 )
63 64
{
64 65
  QgsDebugMsg( "QgsWmsProvider: constructing with uri '" + uri + "'." );
65 66

  
......
134 135

  
135 136

  
136 137

  
137
bool QgsWmsProvider::supportedLayers( std::vector<QgsWmsLayerProperty> & layers )
138
bool QgsWmsProvider::supportedLayers( QVector<QgsWmsLayerProperty> &layers )
138 139
{
139 140
  QgsDebugMsg( "Entering." );
140 141

  
......
159 160
  QStringList::const_iterator i;
160 161
  for ( i = layers.constBegin(); i != layers.constEnd(); ++i )
161 162
  {
162
    std::vector<QString> crsVector = crsForLayer[*i];
163
    QVector<QString> crsVector = crsForLayer[*i];
163 164
    QSet<QString>    crsSet;
164 165

  
165 166
    // convert std::vector to std::set for set comparisons
166
    for ( uint j = 0; j < crsVector.size(); j++ )
167
    for ( int j = 0; j < crsVector.size(); j++ )
167 168
    {
168 169
      crsSet.insert( crsVector[j] );
169 170
    }
......
192 193
} // QgsWmsProvider::layerCount()
193 194

  
194 195

  
195
void QgsWmsProvider::addLayers( QStringList const &  layers,
196
                                QStringList const &  styles )
196
void QgsWmsProvider::addLayers( QStringList const &layers,
197
                                QStringList const &styles )
197 198
{
198 199
  QgsDebugMsg( "Entering with layer list of " + layers.join( ", " )
199 200
               + " and style list of " + styles.join( ", " ) );
......
220 221
}
221 222

  
222 223

  
223
void QgsWmsProvider::setLayerOrder( QStringList const &  layers )
224
void QgsWmsProvider::setLayerOrder( QStringList const &layers )
224 225
{
225 226
  QgsDebugMsg( "Entering." );
226 227

  
......
356 357
        it != activeSubLayers.end();
357 358
        ++it )
358 359
  {
359
    if ( TRUE == activeSubLayerVisibility.find( *it )->second )
360
    if ( activeSubLayerVisibility.find( *it ).value() )
360 361
    {
361 362
      visibleLayers += *it;
362 363
      visibleStyles += *it2;
......
379 380
    crsKey = "CRS";
380 381
  }
381 382

  
382
  std::vector<QgsWmsDcpTypeProperty> dcpType = mCapabilities.capability.request.getMap.dcpType;
383
  QVector<QgsWmsDcpTypeProperty> dcpType = mCapabilities.capability.request.getMap.dcpType;
383 384
  if(dcpType.size() < 1)
384 385
  {
385 386
    mError = tr("Could not determine URL for GetMap from the WMS capabilities response");
......
849 850
    QDomElement e1 = n1.toElement(); // try to convert the node to an element.
850 851
    if ( !e1.isNull() )
851 852
    {
852
      //QgsDebugMsg("  "  + e1.tagName() ); // the node really is an element.
853
      QgsDebugMsg("  "  + e1.tagName() ); // the node really is an element.
853 854

  
854 855
      if ( e1.tagName() == "Title" )
855 856
      {
......
1308 1309
//  layerProperty.title =       QString::null;
1309 1310
//  layerProperty.abstract =    QString::null;
1310 1311
//  layerProperty.keywordList.clear();
1311

  
1312
  // assume true until we find a child layer
1313
  bool atleaf = TRUE;
1314

  
1312
  layerProperty.orderId     = ++mLayerCount;
1315 1313
  layerProperty.queryable   = e.attribute( "queryable" ).toUInt();
1316 1314
  layerProperty.cascaded    = e.attribute( "cascaded" ).toUInt();
1317 1315
  layerProperty.opaque      = e.attribute( "opaque" ).toUInt();
......
1325 1323
    QDomElement e1 = n1.toElement(); // try to convert the node to an element.
1326 1324
    if ( !e1.isNull() )
1327 1325
    {
1328
      //QgsDebugMsg("    "  + e1.tagName() ); // the node really is an element.
1326
      QgsDebugMsg("    "  + e1.tagName() ); // the node really is an element.
1329 1327

  
1330 1328
      if ( e1.tagName() == "Layer" )
1331 1329
      {
1332
//            QgsDebugMsg("      Nested layer.");
1330
        QgsDebugMsg("      Nested layer.");
1333 1331

  
1334 1332
        QgsWmsLayerProperty subLayerProperty;
1335 1333

  
......
1344 1342
        parseLayer( e1, subLayerProperty, &layerProperty );
1345 1343

  
1346 1344
        layerProperty.layer.push_back( subLayerProperty );
1347

  
1348
        atleaf = FALSE;
1349 1345
      }
1350 1346
      else if ( e1.tagName() == "Name" )
1351 1347
      {
......
1474 1470
    n1 = n1.nextSibling();
1475 1471
  }
1476 1472

  
1477
  if ( atleaf )
1473
  if(parentProperty)
1478 1474
  {
1475
    mLayerParents[ layerProperty.orderId ] = parentProperty->orderId;
1476
  }
1477

  
1478
  if ( layerProperty.layer.empty() )
1479
  {
1479 1480
    // We have all the information we need to properly evaluate a layer definition
1480 1481
    // TODO: Save this somewhere
1481 1482

  
......
1493 1494
    extentForLayer[ layerProperty.name ] = layerProperty.ex_GeographicBoundingBox;
1494 1495

  
1495 1496
    // see if we can refine the bounding box with the CRS-specific bounding boxes
1496
    for ( uint i = 0; i < layerProperty.boundingBox.size(); i++ )
1497
    for ( int i = 0; i < layerProperty.boundingBox.size(); i++ )
1497 1498
    {
1498 1499
      QgsDebugMsg( "testing bounding box CRS which is "
1499 1500
                   + layerProperty.boundingBox[i].crs + "." );
......
1513 1514
    layersSupported.push_back( layerProperty );
1514 1515

  
1515 1516
    //if there are several <Layer> elements without a parent layer, the style list needs to be cleared
1516
    if ( atleaf )
1517
    if ( layerProperty.layer.empty() )
1517 1518
    {
1518 1519
      layerProperty.style.clear();
1519 1520
    }
1520 1521
  }
1522
  else
1523
  {
1524
    mLayerParentNames[ layerProperty.orderId ] = QStringList() << layerProperty.name << layerProperty.title << layerProperty.abstract;
1525
  }
1521 1526

  
1522 1527
//  QgsDebugMsg("exiting.");
1523 1528
}
1524 1529

  
1530
void QgsWmsProvider::layerParents( QMap<int, int> &parents, QMap<int, QStringList> &parentNames ) const
1531
{
1532
  parents = mLayerParents;
1533
  parentNames = mLayerParentNames;
1534
}
1525 1535

  
1526 1536
bool QgsWmsProvider::parseServiceExceptionReportDom( QByteArray const & xml )
1527 1537
{
......
1749 1759
  {
1750 1760
    QgsDebugMsg( "Sublayer Iterator: " + *it );
1751 1761
    // This is the extent for the layer name in *it
1752
    QgsRectangle extent = extentForLayer.find( *it )->second;
1762
    QgsRectangle extent = extentForLayer.find( *it ).value();
1753 1763

  
1754 1764
    // Convert to the user's CRS as required
1755 1765
    try
......
1805 1815
        ++it )
1806 1816
  {
1807 1817
    // Is sublayer visible?
1808
    if ( TRUE == activeSubLayerVisibility.find( *it )->second )
1818
    if ( activeSubLayerVisibility.find( *it ).value() )
1809 1819
    {
1810 1820
      // Is sublayer queryable?
1811
      if ( TRUE == mQueryableForLayer.find( *it )->second )
1821
      if ( mQueryableForLayer.find( *it ).value() )
1812 1822
      {
1813 1823
        QgsDebugMsg( "'"  + ( *it )  + "' is queryable." );
1814 1824
        canIdentify = TRUE;
......
1948 1958

  
1949 1959
  // Iterate through layers
1950 1960

  
1951
  for ( uint i = 0; i < layersSupported.size(); i++ )
1961
  for ( int i = 0; i < layersSupported.size(); i++ )
1952 1962
  {
1953 1963

  
1954 1964
    // TODO: Handle nested layers
......
1988 1998
    myMetadataQString += "<td bgcolor=\"gray\">";
1989 1999
    myMetadataQString += ( activeSubLayers.indexOf( layerName ) >= 0 ) ?
1990 2000
                         (
1991
                           ( activeSubLayerVisibility.find( layerName )->second ) ?
2001
                           ( activeSubLayerVisibility.find( layerName ).value() ) ?
1992 2002
                           tr( "Visible" ) : tr( "Hidden" )
1993 2003
                         ) :
1994 2004
                             tr( "n/a" );
......
2067 2077
    myMetadataQString += "</td></tr>";
2068 2078

  
2069 2079
    // Layer Coordinate Reference Systems
2070
    for ( uint j = 0; j < layersSupported[i].crs.size(); j++ )
2080
    for ( int j = 0; j < layersSupported[i].crs.size(); j++ )
2071 2081
{
2072 2082
      myMetadataQString += "<tr><td bgcolor=\"gray\">";
2073 2083
      myMetadataQString += tr( "Available in CRS" );
......
2078 2088
    }
2079 2089

  
2080 2090
    // Layer Styles
2081
    for ( uint j = 0; j < layersSupported[i].style.size(); j++ )
2091
    for ( int j = 0; j < layersSupported[i].style.size(); j++ )
2082 2092
    {
2083 2093
      myMetadataQString += "<tr><td bgcolor=\"gray\">";
2084 2094
      myMetadataQString += tr( "Available in style" );
......
2145 2155
        ++it )
2146 2156
  {
2147 2157
    // Is sublayer visible?
2148
    if ( TRUE == activeSubLayerVisibility.find( *it )->second )
2158
    if ( activeSubLayerVisibility.find( *it ).value() )
2149 2159
    {
2150 2160
      // Is sublayer queryable?
2151
      if ( TRUE == mQueryableForLayer.find( *it )->second )
2161
      if ( mQueryableForLayer.find( *it ).value() )
2152 2162
      {
2153 2163
        QgsDebugMsg( "Layer '" + *it + "' is queryable." );
2154 2164
        // Compose request to WMS server