Ejemplo n.º 1
0
static void _addLayerTreeNodeToUriList( QgsLayerTreeNode *node, QgsMimeDataUtils::UriList &uris )
{
  if ( QgsLayerTree::isGroup( node ) )
  {
    Q_FOREACH ( QgsLayerTreeNode *child, QgsLayerTree::toGroup( node )->children() )
      _addLayerTreeNodeToUriList( child, uris );
  }
  else if ( QgsLayerTree::isLayer( node ) )
  {
    QgsLayerTreeLayer *nodeLayer = QgsLayerTree::toLayer( node );
    QgsMapLayer *layer = nodeLayer->layer();
    if ( !layer )
      return;

    QgsMimeDataUtils::Uri uri;
    uri.name = layer->name();
    uri.uri = layer->dataProvider()->dataSourceUri();
    uri.providerKey = layer->dataProvider()->name();

    switch ( layer->type() )
    {
      case QgsMapLayer::VectorLayer:
      {
        uri.layerType = QStringLiteral( "vector" );
        if ( uri.providerKey == QStringLiteral( "memory" ) )
        {
          QUrl url = QUrl::fromEncoded( uri.uri.toUtf8() );
          url.addQueryItem( QStringLiteral( "pid" ), QString::number( QCoreApplication::applicationPid() ) );
          url.addQueryItem( QStringLiteral( "layerid" ), layer->id() );
          uri.uri = QString( url.toEncoded() );
        }
        break;
      }
      case QgsMapLayer::RasterLayer:
      {
        uri.layerType = QStringLiteral( "raster" );
        break;
      }

      case QgsMapLayer::MeshLayer:
      case QgsMapLayer::PluginLayer:
      {
        // plugin layers do not have a standard way of storing their URI...
        return;
      }
    }
    uris << uri;
  }
}