Skip to content

Commit

Permalink
Allow storing layer WKB type in QgsMimeDataUtils::Uri
Browse files Browse the repository at this point in the history
  • Loading branch information
nyalldawson committed Jun 17, 2019
1 parent 83759f1 commit de672e3
Show file tree
Hide file tree
Showing 5 changed files with 44 additions and 2 deletions.
2 changes: 2 additions & 0 deletions python/core/auto_generated/qgsmimedatautils.sip.in
Expand Up @@ -95,6 +95,8 @@ to create a new layer corresponding to the URI.

QString pId;

QgsWkbTypes::Type wkbType;

SIP_PYOBJECT __repr__();
%MethodCode
QString str = QStringLiteral( "<QgsMimeDataUtils::Uri (%1): %2>" ).arg( sipCpp->providerKey, sipCpp->uri );
Expand Down
24 changes: 24 additions & 0 deletions src/core/qgsdataitem.cpp
Expand Up @@ -739,6 +739,30 @@ QgsMimeDataUtils::Uri QgsLayerItem::mimeUri() const
{
case QgsMapLayerType::VectorLayer:
u.layerType = QStringLiteral( "vector" );
switch ( mLayerType )
{
case Point:
u.wkbType = QgsWkbTypes::Point;
break;
case Line:
u.wkbType = QgsWkbTypes::LineString;
break;
case Polygon:
u.wkbType = QgsWkbTypes::Polygon;
break;
case TableLayer:
u.wkbType = QgsWkbTypes::NoGeometry;
break;

case Database:
case Table:
case NoType:
case Vector:
case Raster:
case Plugin:
case Mesh:
break;
}
break;
case QgsMapLayerType::RasterLayer:
u.layerType = QStringLiteral( "raster" );
Expand Down
5 changes: 4 additions & 1 deletion src/core/qgsmimedatautils.cpp
Expand Up @@ -55,6 +55,8 @@ QgsMimeDataUtils::Uri::Uri( QString &encData )
layerId = decoded.at( 6 );
if ( decoded.size() > 7 )
pId = decoded.at( 7 );
if ( decoded.size() > 8 )
wkbType = QgsWkbTypes::parseType( decoded.at( 8 ) );

QgsDebugMsgLevel( QStringLiteral( "type:%1 key:%2 name:%3 uri:%4 supportedCRS:%5 supportedFormats:%6" )
.arg( layerType, providerKey, name, uri,
Expand All @@ -74,6 +76,7 @@ QgsMimeDataUtils::Uri::Uri( QgsMapLayer *layer )
case QgsMapLayerType::VectorLayer:
{
layerType = QStringLiteral( "vector" );
wkbType = qobject_cast< QgsVectorLayer *>( layer )->wkbType();
break;
}
case QgsMapLayerType::RasterLayer:
Expand All @@ -98,7 +101,7 @@ QgsMimeDataUtils::Uri::Uri( QgsMapLayer *layer )

QString QgsMimeDataUtils::Uri::data() const
{
return encode( QStringList() << layerType << providerKey << name << uri << encode( supportedCrs ) << encode( supportedFormats ) << layerId << pId );
return encode( QStringList() << layerType << providerKey << name << uri << encode( supportedCrs ) << encode( supportedFormats ) << layerId << pId << QgsWkbTypes::displayString( wkbType ) );
}

QgsVectorLayer *QgsMimeDataUtils::Uri::vectorLayer( bool &owner, QString &error ) const
Expand Down
9 changes: 9 additions & 0 deletions src/core/qgsmimedatautils.h
Expand Up @@ -20,6 +20,7 @@

#include "qgis_core.h"
#include "qgis_sip.h"
#include "qgswkbtypes.h"

class QgsLayerItem;
class QgsLayerTreeNode;
Expand Down Expand Up @@ -135,6 +136,14 @@ class CORE_EXPORT QgsMimeDataUtils
*/
QString pId;

/**
* WKB type, if associated with a vector layer, or QgsWkbTypes::Unknown if not
* yet known.
*
* \since QGIS 3.8
*/
QgsWkbTypes::Type wkbType = QgsWkbTypes::Unknown;

#ifdef SIP_RUN
SIP_PYOBJECT __repr__();
% MethodCode
Expand Down
6 changes: 5 additions & 1 deletion tests/src/core/testqgsmimedatautils.cpp
Expand Up @@ -22,7 +22,7 @@
#include "qgsproject.h"

const QString TEST_ENCODED_DATA( "raster:wms:A Fancy WMS From Ciriè City:crs=EPSG\\:2036&dpiMode=7&format=image/png&layers=lidar&styles=default"
"&url=https\\://geoegl.msp.gouv.qc.:EPSG\\\\:2036\\:EPSG\\\\:3857:image/tiff\\:image/jpeg::" );
"&url=https\\://geoegl.msp.gouv.qc.:EPSG\\\\:2036\\:EPSG\\\\:3857:image/tiff\\:image/jpeg:::PointZ" );

class TestQgsMimeDataUtils: public QObject
{
Expand Down Expand Up @@ -73,6 +73,7 @@ void TestQgsMimeDataUtils::testEncodeDecode()
uri.supportedCrs << QStringLiteral( "EPSG:2036" ) << QStringLiteral( "EPSG:3857" ) ;
uri.supportedFormats << QStringLiteral( "image/tiff" ) << QStringLiteral( "image/jpeg" );
uri.uri = QStringLiteral( "crs=EPSG:2036&dpiMode=7&format=image/png&layers=lidar&styles=default&url=https://geoegl.msp.gouv.qc." );
uri.wkbType = QgsWkbTypes::PointZ;

QVERIFY( !uri.mapLayer() );

Expand All @@ -88,6 +89,7 @@ void TestQgsMimeDataUtils::testEncodeDecode()
QCOMPARE( uriDecoded.supportedFormats, uri.supportedFormats );
QCOMPARE( uriDecoded.uri, uri.uri );
QCOMPARE( uriDecoded.supportedCrs, uri.supportedCrs );
QCOMPARE( uriDecoded.wkbType, QgsWkbTypes::PointZ );

QgsMimeDataUtils::decodeUriList( mimeData );

Expand Down Expand Up @@ -120,6 +122,7 @@ void TestQgsMimeDataUtils::testLayerFromProject()

QgsMimeDataUtils::Uri uriDecoded( QgsMimeDataUtils::decodeUriList( mimeData ).at( 0 ) );
QCOMPARE( uriDecoded.mapLayer(), vl1 );
QCOMPARE( uriDecoded.wkbType, QgsWkbTypes::LineString );
bool owner = false;
QString error;
QCOMPARE( uriDecoded.vectorLayer( owner, error ), vl1 );
Expand Down Expand Up @@ -164,6 +167,7 @@ void TestQgsMimeDataUtils::testLayerFromProject()
mimeData = QgsMimeDataUtils::encodeUriList( QgsMimeDataUtils::UriList() << uri3 );
QgsMimeDataUtils::Uri uriDecoded5( QgsMimeDataUtils::decodeUriList( mimeData ).at( 0 ) );
QVERIFY( !uriDecoded5.mapLayer() );
QCOMPARE( uriDecoded5.wkbType, QgsWkbTypes::Point );
QgsVectorLayer *res = uriDecoded5.vectorLayer( owner, error );
QVERIFY( res );
QVERIFY( res->isValid() );
Expand Down

0 comments on commit de672e3

Please sign in to comment.