333 changes: 124 additions & 209 deletions src/providers/wms/qgswmsprovider.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -222,6 +222,11 @@ void QgsWmsProvider::parseUri( QString uri )

QString QgsWmsProvider::prepareUri( QString uri ) const
{
if ( uri.contains( "SERVICE=WMTS" ) || uri.contains( "/WMTSCapabilities.xml" ) )
{
return uri;
}

if ( !uri.contains( "?" ) )
{
uri.append( "?" );
Expand Down Expand Up @@ -539,10 +544,10 @@ QImage *QgsWmsProvider::draw( QgsRectangle const &viewExtent, int pixelWidth, i

// Bounding box in WMS format (Warning: does not work with scientific notation)
QString bbox = QString( changeXY ? "%2,%1,%4,%3" : "%1,%2,%3,%4" )
.arg( viewExtent.xMinimum(), 0, 'f' )
.arg( viewExtent.yMinimum(), 0, 'f' )
.arg( viewExtent.xMaximum(), 0, 'f' )
.arg( viewExtent.yMaximum(), 0, 'f' );
.arg( viewExtent.xMinimum(), 0, 'f', 16 )
.arg( viewExtent.yMinimum(), 0, 'f', 16 )
.arg( viewExtent.xMaximum(), 0, 'f', 16 )
.arg( viewExtent.yMaximum(), 0, 'f', 16 );

mCachedImage = new QImage( pixelWidth, pixelHeight, QImage::Format_ARGB32 );
mCachedImage->fill( 0 );
Expand Down Expand Up @@ -716,7 +721,6 @@ QImage *QgsWmsProvider::draw( QgsRectangle const &viewExtent, int pixelWidth, i
double thMap = tm->tileHeight * tres;
QgsDebugMsg( QString( "tile map size: %1,%2" ).arg( twMap, 0, 'f' ).arg( thMap, 0, 'f' ) );


int minTileCol = 0;
int maxTileCol = tm->matrixWidth - 1;
int minTileRow = 0;
Expand Down Expand Up @@ -773,10 +777,10 @@ QImage *QgsWmsProvider::draw( QgsRectangle const &viewExtent, int pixelWidth, i
QString turl;
turl += url.toString();
turl += QString( changeXY ? "&BBOX=%2,%1,%4,%3" : "&BBOX=%1,%2,%3,%4" )
.arg( tm->topLeft.x() + col * twMap, 0, 'f' )
.arg( tm->topLeft.y() - ( row + 1 ) * thMap, 0, 'f' )
.arg( tm->topLeft.x() + ( col + 1 ) * twMap, 0, 'f' )
.arg( tm->topLeft.y() - row * thMap, 0, 'f' );
.arg( tm->topLeft.x() + col * twMap /* + twMap * 0.001 */, 0, 'f', 16 )
.arg( tm->topLeft.y() - ( row + 1 ) * thMap /* - thMap * 0.001 */, 0, 'f', 16 )
.arg( tm->topLeft.x() + ( col + 1 ) * twMap /* - twMap * 0.001 */, 0, 'f', 16 )
.arg( tm->topLeft.y() - row * thMap /* + thMap * 0.001 */, 0, 'f', 16 );

QNetworkRequest request( turl );
setAuthorization( request );
Expand Down Expand Up @@ -977,17 +981,19 @@ void QgsWmsProvider::tileReplyFinished()
QRectF r = reply->request().attribute( static_cast<QNetworkRequest::Attribute>( QNetworkRequest::User + 2 ) ).toRectF();

#if QT_VERSION >= 0x40500
QgsDebugMsg( QString( "tile reply %1 (%2) tile:%3 rect:%4,%5 %6x%7) fromcache:%8 error:%9" )
QgsDebugMsg( QString( "tile reply %1 (%2) tile:%3 rect:%4,%5 %6x%7) fromcache:%8 error:%9 url:%10" )
.arg( tileReqNo ).arg( mTileReqNo ).arg( tileNo )
.arg( r.left(), 0, 'f' ).arg( r.bottom(), 0, 'f' ).arg( r.width(), 0, 'f' ).arg( r.height(), 0, 'f' )
.arg( fromCache )
.arg( reply->errorString() )
.arg( reply->url().toString() )
);
#else
QgsDebugMsg( QString( "tile reply %1 (%2) tile:%3 rect:%4,%5 %6x%7) error:%8" )
QgsDebugMsg( QString( "tile reply %1 (%2) tile:%3 rect:%4,%5 %6x%7) error:%8 url:%9" )
.arg( tileReqNo ).arg( mTileReqNo ).arg( tileNo )
.arg( r.left(), 0, 'f' ).arg( r.bottom(), 0, 'f' ).arg( r.width(), 0, 'f' ).arg( r.height(), 0, 'f' )
.arg( reply->errorString() )
.arg( reply->url().toString() )
);
#endif

Expand Down Expand Up @@ -1215,7 +1221,12 @@ bool QgsWmsProvider::retrieveServerCapabilities( bool forceRefresh )

if ( mHttpCapabilitiesResponse.isNull() || forceRefresh )
{
QString url = mBaseUrl + "SERVICE=WMS&REQUEST=GetCapabilities";
QString url = mBaseUrl;
if ( !url.contains( "SERVICE=WMTS" ) &&
!url.contains( "/WMTSCapabilities.xml" ) )
{
url += "SERVICE=WMS&REQUEST=GetCapabilities";
}

mError = "";

Expand Down Expand Up @@ -2308,7 +2319,7 @@ void QgsWmsProvider::parseTileSetProfile( QDomElement const &e )
}
else if ( tagName == "Format" )
{
l.format = e1.text();
l.formats << e1.text();
}
else if ( tagName == "BoundingBox" )
{
Expand Down Expand Up @@ -2565,12 +2576,17 @@ void QgsWmsProvider::parseWMTSContents( QDomElement const &e )
l.defaultStyle = s.identifier;
}

l.format = e0.firstChildElement( "Format" ).text();
l.infoFormat = e0.firstChildElement( "InfoFormat" ).text();
for ( QDomElement e1 = e0.firstChildElement( "Format" ); !e1.isNull(); e1 = e1.nextSiblingElement( "Format" ) )
{
l.formats << e1.text();
}

for ( QDomElement e1 = e0.firstChildElement( "Dimension" );
!e1.isNull();
e1 = e1.nextSiblingElement( "Dimension" ) )
for ( QDomElement e1 = e0.firstChildElement( "InfoFormat" ); !e1.isNull(); e1 = e1.nextSiblingElement( "InfoFormat" ) )
{
l.infoFormats << e1.text();
}

for ( QDomElement e1 = e0.firstChildElement( "Dimension" ); !e1.isNull(); e1 = e1.nextSiblingElement( "Dimension" ) )
{
QgsWmtsDimension d;

Expand All @@ -2594,49 +2610,49 @@ void QgsWmsProvider::parseWMTSContents( QDomElement const &e )
l.dimensions.insert( d.identifier, d );
}

for ( QDomElement e1 = e0.firstChildElement( "TileMatrixSetLink" ).firstChildElement( "TileMatrixSet" );
!e1.isNull();
e1 = e1.nextSiblingElement( "TileMatrixSet" ) )
for ( QDomElement e1 = e0.firstChildElement( "TileMatrixSetLink" ); !e1.isNull(); e1 = e1.nextSiblingElement( "TileMatrixSetLink" ) )
{
QgsWmtsTileMatrixSetLink sl;

sl.tileMatrixSet = e1.text();
if ( !mTileMatrixSets.contains( sl.tileMatrixSet ) )
for ( QDomElement e2 = e1.firstChildElement( "TileMatrixSet" ); !e2.isNull(); e2 = e2.nextSiblingElement( "TileMatrixSet" ) )
{
QgsDebugMsg( QString( "tileMatrixSet %1 not found." ).arg( id ) );
continue;
}
QgsWmtsTileMatrixSetLink sl;

for ( QDomElement e2 = e1.firstChildElement( "TileMatrixSetLimits" ).firstChildElement( "TileMatrixLimits" );
!e2.isNull();
e2 = e2.nextSiblingElement( "TileMatrixLimits" ) )
{
QgsWmtsTileMatrixLimits limit;
sl.tileMatrixSet = e2.text();
if ( !mTileMatrixSets.contains( sl.tileMatrixSet ) )
{
QgsDebugMsg( QString( "tileMatrixSet %1 not found." ).arg( id ) );
continue;
}

for ( QDomElement e3 = e2.firstChildElement( "TileMatrixSetLimits" ); !e3.isNull(); e3 = e3.nextSiblingElement( "TileMatrixSetLimits" ) )
{
for ( QDomElement e4 = e3.firstChildElement( "TileMatrixLimits" ); !e4.isNull(); e4 = e4.nextSiblingElement( "TileMatrixLimits" ) )
{
QgsWmtsTileMatrixLimits limit;

QString id = e2.firstChildElement( "TileMatrix" ).text();
QString id = e4.firstChildElement( "TileMatrix" ).text();

limit.minTileRow = e2.firstChildElement( "MinTileRow" ).text().toInt();
limit.maxTileRow = e2.firstChildElement( "MaxTileRow" ).text().toInt();
limit.minTileCol = e2.firstChildElement( "MinTileCol" ).text().toInt();
limit.maxTileCol = e2.firstChildElement( "MaxTileCol" ).text().toInt();
limit.minTileRow = e4.firstChildElement( "MinTileRow" ).text().toInt();
limit.maxTileRow = e4.firstChildElement( "MaxTileRow" ).text().toInt();
limit.minTileCol = e4.firstChildElement( "MinTileCol" ).text().toInt();
limit.maxTileCol = e4.firstChildElement( "MaxTileCol" ).text().toInt();

sl.limits.insert( id, limit );
}
sl.limits.insert( id, limit );
}
}

l.setLinks.insert( id, sl );
l.setLinks.insert( sl.tileMatrixSet, sl );
}
}

for ( QDomElement e1 = e0.firstChildElement( "ResourceURL" );
!e1.isNull();
e1 = e1.nextSiblingElement( "ResourceURL" ) )
for ( QDomElement e1 = e0.firstChildElement( "ResourceURL" ); !e1.isNull(); e1 = e1.nextSiblingElement( "ResourceURL" ) )
{
QString format = e1.attribute( "format" );
QString resourceType = e1.attribute( "resourceType" );
QString tmpl = e1.attribute( "template" );
QString format = nodeAttribute( e1, "format" );
QString resourceType = nodeAttribute( e1, "resourceType" );
QString tmpl = nodeAttribute( e1, "template" );

if ( format.isEmpty() || resourceType.isEmpty() || tmpl.isEmpty() )
{
QgsDebugMsg( QString( "SKIPPING ResourcURL format=%1 resourceType=%2 template=%3" )
QgsDebugMsg( QString( "SKIPPING ResourceURL format=%1 resourceType=%2 template=%3" )
.arg( format )
.arg( resourceType )
.arg( tmpl ) ) ;
Expand Down Expand Up @@ -3231,115 +3247,6 @@ QString QgsWmsProvider::metadata()
metadata += "</td></tr>";

// Server Properties section
<<<<<<< HEAD
myMetadataQString += "<tr><td bgcolor=\"gray\"><a name=\"serverproperties\"></a>";
myMetadataQString += tr( "Server Properties" );
myMetadataQString += "</td></tr>";

// Use a nested table
myMetadataQString += "<tr><td bgcolor=\"white\">";
myMetadataQString += "<table width=\"100%\">";

// Table header
myMetadataQString += "<tr><th bgcolor=\"black\">";
myMetadataQString += "<font color=\"white\">" + tr( "Property" ) + "</font>";
myMetadataQString += "</th>";
myMetadataQString += "<th bgcolor=\"black\">";
myMetadataQString += "<font color=\"white\">" + tr( "Value" ) + "</font>";
myMetadataQString += "</th></tr>";

// WMS Version
myMetadataQString += "<tr><td bgcolor=\"gray\">";
myMetadataQString += tr( "WMS Version" );
myMetadataQString += "</td>";
myMetadataQString += "<td bgcolor=\"gray\">";
myMetadataQString += mCapabilities.version;
myMetadataQString += "</td></tr>";

// Service Title
myMetadataQString += "<tr><td bgcolor=\"gray\">";
myMetadataQString += tr( "Title" );
myMetadataQString += "</td>";
myMetadataQString += "<td bgcolor=\"gray\">";
myMetadataQString += mCapabilities.service.title;
myMetadataQString += "</td></tr>";

// Service Abstract
myMetadataQString += "<tr><td bgcolor=\"gray\">";
myMetadataQString += tr( "Abstract" );
myMetadataQString += "</td>";
myMetadataQString += "<td bgcolor=\"gray\">";
myMetadataQString += mCapabilities.service.abstract;
myMetadataQString += "</td></tr>";

// Service Keywords
myMetadataQString += "<tr><td bgcolor=\"gray\">";
myMetadataQString += tr( "Keywords" );
myMetadataQString += "</td>";
myMetadataQString += "<td bgcolor=\"gray\">";
myMetadataQString += mCapabilities.service.keywordList.join( "<br />" );
myMetadataQString += "</td></tr>";

// Service Online Resource
myMetadataQString += "<tr><td bgcolor=\"gray\">";
myMetadataQString += tr( "Online Resource" );
myMetadataQString += "</td>";
myMetadataQString += "<td bgcolor=\"gray\">";
myMetadataQString += "-";
myMetadataQString += "</td></tr>";

// Service Contact Information
myMetadataQString += "<tr><td bgcolor=\"gray\">";
myMetadataQString += tr( "Contact Person" );
myMetadataQString += "</td>";
myMetadataQString += "<td bgcolor=\"gray\">";
myMetadataQString += mCapabilities.service.contactInformation.contactPersonPrimary.contactPerson;
myMetadataQString += "<br />";
myMetadataQString += mCapabilities.service.contactInformation.contactPosition;
myMetadataQString += "<br />";
myMetadataQString += mCapabilities.service.contactInformation.contactPersonPrimary.contactOrganization;
myMetadataQString += "</td></tr>";

// Service Fees
myMetadataQString += "<tr><td bgcolor=\"gray\">";
myMetadataQString += tr( "Fees" );
myMetadataQString += "</td>";
myMetadataQString += "<td bgcolor=\"gray\">";
myMetadataQString += mCapabilities.service.fees;
myMetadataQString += "</td></tr>";

// Service Access Constraints
myMetadataQString += "<tr><td bgcolor=\"gray\">";
myMetadataQString += tr( "Access Constraints" );
myMetadataQString += "</td>";
myMetadataQString += "<td bgcolor=\"gray\">";
myMetadataQString += mCapabilities.service.accessConstraints;
myMetadataQString += "</td></tr>";

// GetMap Request Formats
myMetadataQString += "<tr><td bgcolor=\"gray\">";
myMetadataQString += tr( "Image Formats" );
myMetadataQString += "</td>";
myMetadataQString += "<td bgcolor=\"gray\">";
myMetadataQString += mCapabilities.capability.request.getMap.format.join( "<br />" );
myMetadataQString += "</td></tr>";

// GetFeatureInfo Request Formats
myMetadataQString += "<tr><td bgcolor=\"gray\">";
myMetadataQString += tr( "Identify Formats" );
myMetadataQString += "</td>";
myMetadataQString += "<td bgcolor=\"gray\">";
myMetadataQString += mCapabilities.capability.request.getFeatureInfo.format.join( "<br />" );
myMetadataQString += "</td></tr>";

// Layer Count (as managed by this provider)
myMetadataQString += "<tr><td bgcolor=\"gray\">";
myMetadataQString += tr( "Layer Count" );
myMetadataQString += "</td>";
myMetadataQString += "<td bgcolor=\"gray\">";
myMetadataQString += QString::number( layersSupported.size() );
myMetadataQString += "</td></tr>";
=======
metadata += "<tr><th class=\"glossy\"><a name=\"serverproperties\"></a>";
metadata += tr( "Server Properties" );
metadata += "</th></tr>";
Expand Down Expand Up @@ -3561,54 +3468,6 @@ QString QgsWmsProvider::metadata()

foreach( const QgsWmtsTileLayer &l, mTileLayersSupported )
{
<<<<<<< HEAD
myMetadataQString += "<tr><td bgcolor=\"white\" colspan=\"2\">";
myMetadataQString += tilesetsSupported[i].layers.join( ", " );
myMetadataQString += "</td></tr>";

// Table header
myMetadataQString += "<tr><th bgcolor=\"black\">";
myMetadataQString += "<font color=\"white\">" + tr( "Property" ) + "</font>";
myMetadataQString += "</th>";
myMetadataQString += "<th bgcolor=\"black\">";
myMetadataQString += "<font color=\"white\">" + tr( "Value" ) + "</font>";
myMetadataQString += "</th></tr>";

myMetadataQString += "<tr><td bgcolor=\"gray\">";
myMetadataQString += tr( "Selected" );
myMetadataQString += "</td>";
myMetadataQString += "<td bgcolor=\"gray\">";
myMetadataQString += mTiled && tilesetsSupported[i].layers.join( "," ) == activeSubLayers.join( "," ) ? tr( "Yes" ) : tr( "No" );
myMetadataQString += "</td></tr>";

if ( tilesetsSupported[i].styles.size() > 0 )
{
myMetadataQString += "<tr><td bgcolor=\"gray\">";
myMetadataQString += tr( "Styles" );
myMetadataQString += "</td>";
myMetadataQString += "<td bgcolor=\"gray\">";
myMetadataQString += tilesetsSupported[i].styles.join( ", " );
myMetadataQString += "</td></tr>";
}

myMetadataQString += "<tr><td bgcolor=\"gray\">";
myMetadataQString += tr( "CRS" );
myMetadataQString += "</td>";
myMetadataQString += "<td bgcolor=\"gray\">";
myMetadataQString += tilesetsSupported[i].boundingBox.crs;
myMetadataQString += "</td></tr>";

myMetadataQString += "<tr><td bgcolor=\"gray\">";
myMetadataQString += tr( "Bounding Box" );
myMetadataQString += "</td>";
myMetadataQString += "<td bgcolor=\"gray\">";
myMetadataQString += tilesetsSupported[i].boundingBox.box.toString();
myMetadataQString += "</td></tr>";

myMetadataQString += "<tr><td bgcolor=\"gray\">";
myMetadataQString += tr( "Available in Resolutions" );
myMetadataQString += "</td><td bgcolor=\"gray\">";
=======
metadata += "<tr><td colspan=\"2\">";
metadata += l.identifier;
metadata += "</td><td class=\"glossy\">";
Expand Down Expand Up @@ -3765,10 +3624,10 @@ QStringList QgsWmsProvider::identifyAs( const QgsPoint& point, QString format )

// Compose request to WMS server
QString bbox = QString( changeXY ? "%2,%1,%4,%3" : "%1,%2,%3,%4" )
.arg( mCachedViewExtent.xMinimum(), 0, 'f' )
.arg( mCachedViewExtent.yMinimum(), 0, 'f' )
.arg( mCachedViewExtent.xMaximum(), 0, 'f' )
.arg( mCachedViewExtent.yMaximum(), 0, 'f' );
.arg( mCachedViewExtent.xMinimum(), 0, 'f', 16 )
.arg( mCachedViewExtent.yMinimum(), 0, 'f', 16 )
.arg( mCachedViewExtent.xMaximum(), 0, 'f', 16 )
.arg( mCachedViewExtent.yMaximum(), 0, 'f', 16 );

// Test for which layers are suitable for querying with
for ( QStringList::const_iterator
Expand Down Expand Up @@ -3964,6 +3823,62 @@ void QgsWmsProvider::setAuthorization( QNetworkRequest &request ) const
}
}

QVector<QgsWmsSupportedFormat> QgsWmsProvider::supportedFormats()
{
QVector<QgsWmsSupportedFormat> formats;
QStringList mFormats, mLabels;

QList<QByteArray> supportedFormats = QImageReader::supportedImageFormats();

if ( supportedFormats.contains( "png" ) )
{
QgsWmsSupportedFormat p1 = { "image/png", "PNG" };
QgsWmsSupportedFormat p2 = { "image/png; mode=24bit", "PNG24" }; // UMN mapserver
QgsWmsSupportedFormat p3 = { "image/png8", "PNG8" }; // used by geoserver
QgsWmsSupportedFormat p4 = { "png", "PNG" }; // used by french IGN geoportail
QgsWmsSupportedFormat p5 = { "pngt", "PNGT" }; // used by french IGN geoportail

formats << p1 << p2 << p3 << p4 << p5;
}

if ( supportedFormats.contains( "jpg" ) )
{
QgsWmsSupportedFormat j1 = { "image/jpeg", "JPEG" };
QgsWmsSupportedFormat j2 = { "jpeg", "JPEG" }; // used by french IGN geoportail
formats << j1 << j2;
}

if ( supportedFormats.contains( "gif" ) )
{
QgsWmsSupportedFormat g1 = { "image/gif", "GIF" };
formats << g1;
}

if ( supportedFormats.contains( "tiff" ) )
{
QgsWmsSupportedFormat t1 = { "image/tiff", "TIFF" };
formats << t1;
}

return formats;
}

QString QgsWmsProvider::nodeAttribute( const QDomElement &e, QString name, QString defValue )
{
if ( e.hasAttribute( name ) )
return e.attribute( name );

QDomNamedNodeMap map( e.attributes() );
for ( int i = 0; i < map.size(); i++ )
{
QDomAttr attr( map.item( i ).toElement().toAttr() );
if ( attr.name().compare( name, Qt::CaseInsensitive ) == 0 )
return attr.value();
}

return defValue;
}

void QgsWmsProvider::showMessageBox( const QString& title, const QString& text )
{
QgsMessageOutput *message = QgsMessageOutput::createMessageOutput();
Expand Down
7 changes: 5 additions & 2 deletions src/providers/wms/qgswmsprovider.h
Original file line number Diff line number Diff line change
Expand Up @@ -393,8 +393,8 @@ struct QgsWmtsTileLayer
QString title, abstract;
QStringList keywords;
QgsWmsBoundingBoxProperty boundingBox;
QString format;
QString infoFormat;
QStringList formats;
QStringList infoFormats;
QString defaultStyle;
QHash<QString, QgsWmtsDimension> dimensions;
QHash<QString, QgsWmtsStyle> styles;
Expand Down Expand Up @@ -764,6 +764,9 @@ class QgsWmsProvider : public QgsRasterDataProvider
private:
void showMessageBox( const QString& title, const QString& text );

// case insensitive attribute value lookup
static QString nodeAttribute( const QDomElement &e, QString name, QString defValue = QString::null );

/**
* \brief Retrieve and parse the (cached) Capabilities document from the server
*
Expand Down
48 changes: 26 additions & 22 deletions src/providers/wms/qgswmssourceselect.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -376,30 +376,34 @@ bool QgsWMSSourceSelect::populateLayerList( QgsWmsProvider *wmsProvider )
{
foreach( const QgsWmtsTileMatrixSetLink &setLink, l.setLinks )
{
QTableWidgetItem *item = new QTableWidgetItem( l.identifier );
item->setData( Qt::UserRole + 0, l.identifier );
item->setData( Qt::UserRole + 1, l.format );
item->setData( Qt::UserRole + 2, style.identifier );
item->setData( Qt::UserRole + 3, setLink.tileMatrixSet );
item->setData( Qt::UserRole + 4, tileMatrixSets[ setLink.tileMatrixSet ].crs );

lstTilesets->setItem( row, 0, item );
lstTilesets->setItem( row, 1, new QTableWidgetItem( l.format ) );
lstTilesets->setItem( row, 2, new QTableWidgetItem( style.identifier ) );
QTableWidgetItem *styleItem = new QTableWidgetItem( l.title );
if ( !l.abstract.isEmpty() )
styleItem->setToolTip( "<p>" + l.abstract + "</p>" );
lstTilesets->setItem( row, 3, styleItem );
lstTilesets->setItem( row, 4, new QTableWidgetItem( setLink.tileMatrixSet ) );
lstTilesets->setItem( row, 5, new QTableWidgetItem( tileMatrixSets[ setLink.tileMatrixSet ].crs ) );

if ( !mMimeMap.contains( l.format ) )
foreach( QString format, l.formats )
{
for ( int i = 0; i < lstTilesets->columnCount(); i++ )
QTableWidgetItem *item = new QTableWidgetItem( l.identifier );
item->setData( Qt::UserRole + 0, l.identifier );

item->setData( Qt::UserRole + 1, format );
item->setData( Qt::UserRole + 2, style.identifier );
item->setData( Qt::UserRole + 3, setLink.tileMatrixSet );
item->setData( Qt::UserRole + 4, tileMatrixSets[ setLink.tileMatrixSet ].crs );

lstTilesets->setItem( row, 0, item );
lstTilesets->setItem( row, 1, new QTableWidgetItem( format ) );
lstTilesets->setItem( row, 2, new QTableWidgetItem( style.identifier ) );
QTableWidgetItem *styleItem = new QTableWidgetItem( l.title );
if ( !l.abstract.isEmpty() )
styleItem->setToolTip( "<p>" + l.abstract + "</p>" );
lstTilesets->setItem( row, 3, styleItem );
lstTilesets->setItem( row, 4, new QTableWidgetItem( setLink.tileMatrixSet ) );
lstTilesets->setItem( row, 5, new QTableWidgetItem( tileMatrixSets[ setLink.tileMatrixSet ].crs ) );

if ( !mMimeMap.contains( format ) )
{
QTableWidgetItem *item = lstTilesets->item( row, i );
item->setFlags( item->flags() & ~Qt::ItemIsEnabled );
item->setToolTip( tr( "encoding %1 not supported." ).arg( l.format ) );
for ( int i = 0; i < lstTilesets->columnCount(); i++ )
{
QTableWidgetItem *item = lstTilesets->item( row, i );
item->setFlags( item->flags() & ~Qt::ItemIsEnabled );
item->setToolTip( tr( "encoding %1 not supported." ).arg( format ) );
}
}
}

Expand Down