LCOV - code coverage report
Current view: top level - core/symbology - qgssymbollayerregistry.cpp (source / functions) Hit Total Coverage
Test: coverage.info.cleaned Lines: 40 67 59.7 %
Date: 2021-03-26 12:19:53 Functions: 0 0 -
Branches: 0 0 -

           Branch data     Line data    Source code
       1                 :            : /***************************************************************************
       2                 :            :     qgssymbollayerregistry.cpp
       3                 :            :     ---------------------
       4                 :            :     begin                : November 2009
       5                 :            :     copyright            : (C) 2009 by Martin Dobias
       6                 :            :     email                : wonder dot sk at gmail dot com
       7                 :            :  ***************************************************************************
       8                 :            :  *                                                                         *
       9                 :            :  *   This program is free software; you can redistribute it and/or modify  *
      10                 :            :  *   it under the terms of the GNU General Public License as published by  *
      11                 :            :  *   the Free Software Foundation; either version 2 of the License, or     *
      12                 :            :  *   (at your option) any later version.                                   *
      13                 :            :  *                                                                         *
      14                 :            :  ***************************************************************************/
      15                 :            : 
      16                 :            : #include "qgssymbollayerregistry.h"
      17                 :            : 
      18                 :            : #include "qgsarrowsymbollayer.h"
      19                 :            : #include "qgsellipsesymbollayer.h"
      20                 :            : #include "qgsmarkersymbollayer.h"
      21                 :            : #include "qgslinesymbollayer.h"
      22                 :            : #include "qgsfillsymbollayer.h"
      23                 :            : #include "qgsvectorfieldsymbollayer.h"
      24                 :            : #include "qgsmasksymbollayer.h"
      25                 :            : #include "qgsgeometrygeneratorsymbollayer.h"
      26                 :            : 
      27                 :          5 : QgsSymbolLayerRegistry::QgsSymbolLayerRegistry()
      28                 :            : {
      29                 :            :   // init registry with known symbol layers
      30                 :         10 :   addSymbolLayerType( new QgsSymbolLayerMetadata( QStringLiteral( "SimpleLine" ), QObject::tr( "Simple Line" ), QgsSymbol::Line,
      31                 :            :                       QgsSimpleLineSymbolLayer::create, QgsSimpleLineSymbolLayer::createFromSld ) );
      32                 :         10 :   addSymbolLayerType( new QgsSymbolLayerMetadata( QStringLiteral( "MarkerLine" ), QObject::tr( "Marker Line" ), QgsSymbol::Line,
      33                 :            :                       QgsMarkerLineSymbolLayer::create, QgsMarkerLineSymbolLayer::createFromSld ) );
      34                 :         10 :   addSymbolLayerType( new QgsSymbolLayerMetadata( QStringLiteral( "HashLine" ), QObject::tr( "Hashed Line" ), QgsSymbol::Line,
      35                 :            :                       QgsHashedLineSymbolLayer::create ) );
      36                 :         10 :   addSymbolLayerType( new QgsSymbolLayerMetadata( QStringLiteral( "ArrowLine" ), QObject::tr( "Arrow" ), QgsSymbol::Line, QgsArrowSymbolLayer::create ) );
      37                 :            : 
      38                 :         10 :   addSymbolLayerType( new QgsSymbolLayerMetadata( QStringLiteral( "SimpleMarker" ), QObject::tr( "Simple Marker" ), QgsSymbol::Marker,
      39                 :            :                       QgsSimpleMarkerSymbolLayer::create, QgsSimpleMarkerSymbolLayer::createFromSld ) );
      40                 :         10 :   addSymbolLayerType( new QgsSymbolLayerMetadata( QStringLiteral( "FilledMarker" ), QObject::tr( "Filled Marker" ), QgsSymbol::Marker,
      41                 :            :                       QgsFilledMarkerSymbolLayer::create ) );
      42                 :         10 :   addSymbolLayerType( new QgsSymbolLayerMetadata( QStringLiteral( "SvgMarker" ), QObject::tr( "SVG Marker" ), QgsSymbol::Marker,
      43                 :            :                       QgsSvgMarkerSymbolLayer::create, QgsSvgMarkerSymbolLayer::createFromSld, QgsSvgMarkerSymbolLayer::resolvePaths ) );
      44                 :         10 :   addSymbolLayerType( new QgsSymbolLayerMetadata( QStringLiteral( "RasterMarker" ), QObject::tr( "Raster Image Marker" ), QgsSymbol::Marker,
      45                 :            :                       QgsRasterMarkerSymbolLayer::create, nullptr, QgsRasterFillSymbolLayer::resolvePaths ) );
      46                 :         10 :   addSymbolLayerType( new QgsSymbolLayerMetadata( QStringLiteral( "FontMarker" ), QObject::tr( "Font Marker" ), QgsSymbol::Marker,
      47                 :            :                       QgsFontMarkerSymbolLayer::create, QgsFontMarkerSymbolLayer::createFromSld ) );
      48                 :         10 :   addSymbolLayerType( new QgsSymbolLayerMetadata( QStringLiteral( "EllipseMarker" ), QObject::tr( "Ellipse Marker" ), QgsSymbol::Marker,
      49                 :            :                       QgsEllipseSymbolLayer::create, QgsEllipseSymbolLayer::createFromSld ) );
      50                 :         10 :   addSymbolLayerType( new QgsSymbolLayerMetadata( QStringLiteral( "VectorField" ), QObject::tr( "Vector Field Marker" ), QgsSymbol::Marker,
      51                 :            :                       QgsVectorFieldSymbolLayer::create ) );
      52                 :         10 :   addSymbolLayerType( new QgsSymbolLayerMetadata( QStringLiteral( "MaskMarker" ), QObject::tr( "Mask" ), QgsSymbol::Marker,
      53                 :            :                       QgsMaskMarkerSymbolLayer::create ) );
      54                 :            : 
      55                 :         10 :   addSymbolLayerType( new QgsSymbolLayerMetadata( QStringLiteral( "SimpleFill" ), QObject::tr( "Simple Fill" ), QgsSymbol::Fill,
      56                 :            :                       QgsSimpleFillSymbolLayer::create, QgsSimpleFillSymbolLayer::createFromSld ) );
      57                 :         10 :   addSymbolLayerType( new QgsSymbolLayerMetadata( QStringLiteral( "GradientFill" ), QObject::tr( "Gradient Fill" ), QgsSymbol::Fill,
      58                 :            :                       QgsGradientFillSymbolLayer::create ) );
      59                 :         10 :   addSymbolLayerType( new QgsSymbolLayerMetadata( QStringLiteral( "ShapeburstFill" ), QObject::tr( "Shapeburst Fill" ), QgsSymbol::Fill,
      60                 :            :                       QgsShapeburstFillSymbolLayer::create ) );
      61                 :         10 :   addSymbolLayerType( new QgsSymbolLayerMetadata( QStringLiteral( "RasterFill" ), QObject::tr( "Raster Image Fill" ), QgsSymbol::Fill,
      62                 :            :                       QgsRasterFillSymbolLayer::create, nullptr, QgsRasterFillSymbolLayer::resolvePaths ) );
      63                 :         10 :   addSymbolLayerType( new QgsSymbolLayerMetadata( QStringLiteral( "SVGFill" ), QObject::tr( "SVG Fill" ), QgsSymbol::Fill,
      64                 :            :                       QgsSVGFillSymbolLayer::create, QgsSVGFillSymbolLayer::createFromSld, QgsSVGFillSymbolLayer::resolvePaths ) );
      65                 :         10 :   addSymbolLayerType( new QgsSymbolLayerMetadata( QStringLiteral( "CentroidFill" ), QObject::tr( "Centroid Fill" ), QgsSymbol::Fill,
      66                 :            :                       QgsCentroidFillSymbolLayer::create, QgsCentroidFillSymbolLayer::createFromSld ) );
      67                 :         10 :   addSymbolLayerType( new QgsSymbolLayerMetadata( QStringLiteral( "RandomMarkerFill" ), QObject::tr( "Random Marker Fill" ), QgsSymbol::Fill,
      68                 :            :                       QgsRandomMarkerFillSymbolLayer::create ) );
      69                 :         10 :   addSymbolLayerType( new QgsSymbolLayerMetadata( QStringLiteral( "LinePatternFill" ), QObject::tr( "Line Pattern Fill" ), QgsSymbol::Fill,
      70                 :            :                       QgsLinePatternFillSymbolLayer::create, QgsLinePatternFillSymbolLayer::createFromSld ) );
      71                 :         10 :   addSymbolLayerType( new QgsSymbolLayerMetadata( QStringLiteral( "PointPatternFill" ), QObject::tr( "Point Pattern Fill" ), QgsSymbol::Fill,
      72                 :            :                       QgsPointPatternFillSymbolLayer::create, QgsPointPatternFillSymbolLayer::createFromSld ) );
      73                 :            : 
      74                 :         10 :   addSymbolLayerType( new QgsSymbolLayerMetadata( QStringLiteral( "GeometryGenerator" ), QObject::tr( "Geometry Generator" ), QgsSymbol::Hybrid,
      75                 :            :                       QgsGeometryGeneratorSymbolLayer::create ) );
      76                 :          5 : }
      77                 :            : 
      78                 :          5 : QgsSymbolLayerRegistry::~QgsSymbolLayerRegistry()
      79                 :            : {
      80                 :          5 :   qDeleteAll( mMetadata );
      81                 :          5 : }
      82                 :            : 
      83                 :        110 : bool QgsSymbolLayerRegistry::addSymbolLayerType( QgsSymbolLayerAbstractMetadata *metadata )
      84                 :            : {
      85                 :        110 :   if ( !metadata || mMetadata.contains( metadata->name() ) )
      86                 :          0 :     return false;
      87                 :            : 
      88                 :        110 :   mMetadata[metadata->name()] = metadata;
      89                 :        110 :   return true;
      90                 :        110 : }
      91                 :            : 
      92                 :            : 
      93                 :          0 : QgsSymbolLayerAbstractMetadata *QgsSymbolLayerRegistry::symbolLayerMetadata( const QString &name ) const
      94                 :            : {
      95                 :          0 :   return mMetadata.value( name );
      96                 :            : }
      97                 :            : 
      98                 :          0 : QgsSymbolLayer *QgsSymbolLayerRegistry::defaultSymbolLayer( QgsSymbol::SymbolType type )
      99                 :            : {
     100                 :          0 :   switch ( type )
     101                 :            :   {
     102                 :            :     case QgsSymbol::Marker:
     103                 :          0 :       return QgsSimpleMarkerSymbolLayer::create();
     104                 :            : 
     105                 :            :     case QgsSymbol::Line:
     106                 :          0 :       return QgsSimpleLineSymbolLayer::create();
     107                 :            : 
     108                 :            :     case QgsSymbol::Fill:
     109                 :          0 :       return QgsSimpleFillSymbolLayer::create();
     110                 :            : 
     111                 :            :     case QgsSymbol::Hybrid:
     112                 :          0 :       return nullptr;
     113                 :            :   }
     114                 :            : 
     115                 :          0 :   return nullptr;
     116                 :          0 : }
     117                 :            : 
     118                 :            : 
     119                 :        990 : QgsSymbolLayer *QgsSymbolLayerRegistry::createSymbolLayer( const QString &name, const QVariantMap &properties ) const
     120                 :            : {
     121                 :        990 :   if ( !mMetadata.contains( name ) )
     122                 :          0 :     return nullptr;
     123                 :            : 
     124                 :        990 :   return mMetadata[name]->createSymbolLayer( properties );
     125                 :        990 : }
     126                 :            : 
     127                 :          0 : QgsSymbolLayer *QgsSymbolLayerRegistry::createSymbolLayerFromSld( const QString &name, QDomElement &element ) const
     128                 :            : {
     129                 :          0 :   if ( !mMetadata.contains( name ) )
     130                 :          0 :     return nullptr;
     131                 :            : 
     132                 :          0 :   return mMetadata[name]->createSymbolLayerFromSld( element );
     133                 :          0 : }
     134                 :            : 
     135                 :        990 : void QgsSymbolLayerRegistry::resolvePaths( const QString &name, QVariantMap &properties, const QgsPathResolver &pathResolver, bool saving ) const
     136                 :            : {
     137                 :        990 :   if ( !mMetadata.contains( name ) )
     138                 :          0 :     return;
     139                 :            : 
     140                 :        990 :   mMetadata[name]->resolvePaths( properties, pathResolver, saving );
     141                 :        990 : }
     142                 :            : 
     143                 :          0 : QStringList QgsSymbolLayerRegistry::symbolLayersForType( QgsSymbol::SymbolType type )
     144                 :            : {
     145                 :          0 :   QStringList lst;
     146                 :          0 :   QMap<QString, QgsSymbolLayerAbstractMetadata *>::ConstIterator it = mMetadata.constBegin();
     147                 :          0 :   for ( ; it != mMetadata.constEnd(); ++it )
     148                 :            :   {
     149                 :          0 :     if ( it.value()->type() == type || it.value()->type() == QgsSymbol::Hybrid )
     150                 :          0 :       lst.append( it.key() );
     151                 :          0 :   }
     152                 :          0 :   return lst;
     153                 :          0 : }

Generated by: LCOV version 1.14