Branch data Line data Source code
1 : : /***************************************************************************
2 : : qgsrendererregistry.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 : : #include "qgsrendererregistry.h"
16 : :
17 : : // default renderers
18 : : #include "qgssinglesymbolrenderer.h"
19 : : #include "qgscategorizedsymbolrenderer.h"
20 : : #include "qgsgraduatedsymbolrenderer.h"
21 : : #include "qgsrulebasedrenderer.h"
22 : : #include "qgspointdisplacementrenderer.h"
23 : : #include "qgspointclusterrenderer.h"
24 : : #include "qgsinvertedpolygonrenderer.h"
25 : : #include "qgsmergedfeaturerenderer.h"
26 : : #include "qgsheatmaprenderer.h"
27 : : #include "qgs25drenderer.h"
28 : : #include "qgsembeddedsymbolrenderer.h"
29 : : #include "qgsnullsymbolrenderer.h"
30 : : #include "qgsvectorlayer.h"
31 : :
32 : 5 : QgsRendererRegistry::QgsRendererRegistry()
33 : : {
34 : : // add default renderers
35 : 10 : addRenderer( new QgsRendererMetadata( QStringLiteral( "nullSymbol" ),
36 : 5 : QObject::tr( "No Symbols" ),
37 : : QgsNullSymbolRenderer::create ) );
38 : :
39 : 10 : addRenderer( new QgsRendererMetadata( QStringLiteral( "singleSymbol" ),
40 : 5 : QObject::tr( "Single Symbol" ),
41 : : QgsSingleSymbolRenderer::create,
42 : : QgsSingleSymbolRenderer::createFromSld ) );
43 : :
44 : 10 : addRenderer( new QgsRendererMetadata( QStringLiteral( "categorizedSymbol" ),
45 : 5 : QObject::tr( "Categorized" ),
46 : : QgsCategorizedSymbolRenderer::create ) );
47 : :
48 : 10 : addRenderer( new QgsRendererMetadata( QStringLiteral( "graduatedSymbol" ),
49 : 5 : QObject::tr( "Graduated" ),
50 : : QgsGraduatedSymbolRenderer::create ) );
51 : :
52 : 10 : addRenderer( new QgsRendererMetadata( QStringLiteral( "RuleRenderer" ),
53 : 5 : QObject::tr( "Rule-based" ),
54 : : QgsRuleBasedRenderer::create,
55 : : QgsRuleBasedRenderer::createFromSld ) );
56 : :
57 : 10 : addRenderer( new QgsRendererMetadata( QStringLiteral( "pointDisplacement" ),
58 : 5 : QObject::tr( "Point Displacement" ),
59 : : QgsPointDisplacementRenderer::create,
60 : 5 : QIcon(),
61 : : nullptr,
62 : 5 : QgsRendererAbstractMetadata::PointLayer ) );
63 : :
64 : 10 : addRenderer( new QgsRendererMetadata( QStringLiteral( "pointCluster" ),
65 : 5 : QObject::tr( "Point Cluster" ),
66 : : QgsPointClusterRenderer::create,
67 : 5 : QIcon(),
68 : : nullptr,
69 : 5 : QgsRendererAbstractMetadata::PointLayer ) );
70 : :
71 : 10 : addRenderer( new QgsRendererMetadata( QStringLiteral( "mergedFeatureRenderer" ),
72 : 5 : QObject::tr( "Merged Features" ),
73 : : QgsMergedFeatureRenderer::create,
74 : 5 : QIcon(),
75 : : nullptr,
76 : 5 : QgsRendererAbstractMetadata::LineLayer | QgsRendererAbstractMetadata::PolygonLayer ) );
77 : :
78 : 10 : addRenderer( new QgsRendererMetadata( QStringLiteral( "invertedPolygonRenderer" ),
79 : 5 : QObject::tr( "Inverted Polygons" ),
80 : : QgsInvertedPolygonRenderer::create,
81 : 5 : QIcon(),
82 : : nullptr,
83 : 5 : QgsRendererAbstractMetadata::PolygonLayer ) );
84 : :
85 : 10 : addRenderer( new QgsRendererMetadata( QStringLiteral( "heatmapRenderer" ),
86 : 5 : QObject::tr( "Heatmap" ),
87 : : QgsHeatmapRenderer::create,
88 : 5 : QIcon(),
89 : : nullptr,
90 : 5 : QgsRendererAbstractMetadata::PointLayer ) );
91 : :
92 : :
93 : 10 : addRenderer( new QgsRendererMetadata( QStringLiteral( "25dRenderer" ),
94 : 5 : QObject::tr( "2.5 D" ),
95 : : Qgs25DRenderer::create,
96 : 5 : QIcon(),
97 : : nullptr,
98 : 5 : QgsRendererAbstractMetadata::PolygonLayer ) );
99 : :
100 : 10 : addRenderer( new QgsRendererMetadata( QStringLiteral( "embeddedSymbol" ),
101 : 5 : QObject::tr( "Embedded Symbols" ),
102 : : QgsEmbeddedSymbolRenderer::create ) );
103 : 5 : }
104 : :
105 : 5 : QgsRendererRegistry::~QgsRendererRegistry()
106 : : {
107 : 5 : qDeleteAll( mRenderers );
108 : 5 : }
109 : :
110 : 60 : bool QgsRendererRegistry::addRenderer( QgsRendererAbstractMetadata *metadata )
111 : : {
112 : 60 : if ( !metadata || mRenderers.contains( metadata->name() ) )
113 : 0 : return false;
114 : :
115 : 60 : mRenderers[metadata->name()] = metadata;
116 : 60 : mRenderersOrder << metadata->name();
117 : 60 : return true;
118 : 60 : }
119 : :
120 : 0 : bool QgsRendererRegistry::removeRenderer( const QString &rendererName )
121 : : {
122 : 0 : if ( !mRenderers.contains( rendererName ) )
123 : 0 : return false;
124 : :
125 : 0 : delete mRenderers[rendererName];
126 : 0 : mRenderers.remove( rendererName );
127 : 0 : mRenderersOrder.removeAll( rendererName );
128 : 0 : return true;
129 : 0 : }
130 : :
131 : 0 : QgsRendererAbstractMetadata *QgsRendererRegistry::rendererMetadata( const QString &rendererName )
132 : : {
133 : 0 : return mRenderers.value( rendererName );
134 : : }
135 : :
136 : 0 : QStringList QgsRendererRegistry::renderersList( QgsRendererAbstractMetadata::LayerTypes layerTypes ) const
137 : : {
138 : 0 : QStringList renderers;
139 : 0 : const auto constMRenderersOrder = mRenderersOrder;
140 : 0 : for ( const QString &renderer : constMRenderersOrder )
141 : : {
142 : 0 : QgsRendererAbstractMetadata *r = mRenderers.value( renderer );
143 : 0 : if ( r && r->compatibleLayerTypes() & layerTypes )
144 : 0 : renderers << renderer;
145 : : }
146 : 0 : return renderers;
147 : 0 : }
148 : :
149 : 0 : QStringList QgsRendererRegistry::renderersList( const QgsVectorLayer *layer ) const
150 : : {
151 : 0 : QgsRendererAbstractMetadata::LayerType layerType = QgsRendererAbstractMetadata::All;
152 : :
153 : 0 : switch ( layer->geometryType() )
154 : : {
155 : : case QgsWkbTypes::PointGeometry:
156 : 0 : layerType = QgsRendererAbstractMetadata::PointLayer;
157 : 0 : break;
158 : :
159 : : case QgsWkbTypes::LineGeometry:
160 : 0 : layerType = QgsRendererAbstractMetadata::LineLayer;
161 : 0 : break;
162 : :
163 : : case QgsWkbTypes::PolygonGeometry:
164 : 0 : layerType = QgsRendererAbstractMetadata::PolygonLayer;
165 : 0 : break;
166 : :
167 : : case QgsWkbTypes::UnknownGeometry:
168 : : case QgsWkbTypes::NullGeometry:
169 : 0 : break;
170 : : }
171 : :
172 : 0 : return renderersList( layerType );
173 : : }
|