QGIS API Documentation 4.0.0-Norrköping (1ddcee3d0e4)
Loading...
Searching...
No Matches
qgssymbollayerregistry.h
Go to the documentation of this file.
1/***************************************************************************
2 qgssymbollayerregistry.h
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#ifndef QGSSYMBOLLAYERREGISTRY_H
17#define QGSSYMBOLLAYERREGISTRY_H
18
19#include "qgis.h"
20#include "qgis_core.h"
21
22class QgsPathResolver;
23class QgsVectorLayer;
25class QgsSymbolLayer;
26class QDomElement;
28
37{
38 public:
46 : mName( name )
48 , mType( type )
49 {}
50
52
53 QString name() const { return mName; }
54 QString visibleName() const { return mVisibleName; }
55 Qgis::SymbolType type() const { return mType; }
56
58 virtual QgsSymbolLayer *createSymbolLayer( const QVariantMap &map ) = 0 SIP_FACTORY;
62 virtual QgsSymbolLayer *createSymbolLayerFromSld( QDomElement & ) SIP_FACTORY { return nullptr; }
63
71 virtual void resolvePaths( QVariantMap &properties, const QgsPathResolver &pathResolver, bool saving )
72 {
73 Q_UNUSED( properties )
74 Q_UNUSED( pathResolver )
75 Q_UNUSED( saving )
76 }
77
86 virtual void resolveFonts( const QVariantMap &properties, const QgsReadWriteContext &context )
87 {
88 Q_UNUSED( properties )
89 Q_UNUSED( context )
90 }
91
92 protected:
93 QString mName;
94 QString mVisibleName;
96};
97
98typedef QgsSymbolLayer *( *QgsSymbolLayerCreateFunc )( const QVariantMap & ) SIP_SKIP;
99typedef QgsSymbolLayerWidget *( *QgsSymbolLayerWidgetFunc )( QgsVectorLayer * ) SIP_SKIP;
100typedef QgsSymbolLayer *( *QgsSymbolLayerCreateFromSldFunc )( QDomElement & ) SIP_SKIP;
101typedef void ( *QgsSymbolLayerPathResolverFunc )( QVariantMap &, const QgsPathResolver &, bool ) SIP_SKIP;
102typedef void ( *QgsSymbolLayerFontResolverFunc )( const QVariantMap &, const QgsReadWriteContext & ) SIP_SKIP;
103
109{
110 public:
113 const QString &name,
114 const QString &visibleName,
117 QgsSymbolLayerCreateFromSldFunc pfCreateFromSld = nullptr,
118 QgsSymbolLayerPathResolverFunc pfPathResolver = nullptr,
119 QgsSymbolLayerWidgetFunc pfWidget = nullptr,
120 QgsSymbolLayerFontResolverFunc pfFontResolver = nullptr
122 mCreateFunc( pfCreate ),
123 mWidgetFunc( pfWidget ),
124 mCreateFromSldFunc( pfCreateFromSld ),
125 mPathResolverFunc( pfPathResolver ),
126 mFontResolverFunc( pfFontResolver )
127 {}
128
137
140
141 QgsSymbolLayer *createSymbolLayer( const QVariantMap &map ) override SIP_FACTORY { return mCreateFunc ? mCreateFunc( map ) : nullptr; }
143 QgsSymbolLayer *createSymbolLayerFromSld( QDomElement &elem ) override SIP_FACTORY { return mCreateFromSldFunc ? mCreateFromSldFunc( elem ) : nullptr; }
144 void resolvePaths( QVariantMap &properties, const QgsPathResolver &pathResolver, bool saving ) override
145 {
146 if ( mPathResolverFunc )
147 mPathResolverFunc( properties, pathResolver, saving );
148 }
149
150 void resolveFonts( const QVariantMap &properties, const QgsReadWriteContext &context ) override
151 {
152 if ( mFontResolverFunc )
153 mFontResolverFunc( properties, context );
154 }
155
156 protected:
161
168
169 private:
170#ifdef SIP_RUN
172#endif
173};
174
175
183class CORE_EXPORT QgsSymbolLayerRegistry
184{
185 public:
188
191
193 QgsSymbolLayerAbstractMetadata *symbolLayerMetadata( const QString &name ) const;
194
197
203
205 std::unique_ptr< QgsSymbolLayer > createSymbolLayer( const QString &name, const QVariantMap &properties = QVariantMap() ) const;
206
208 std::unique_ptr< QgsSymbolLayer > createSymbolLayerFromSld( const QString &name, QDomElement &element ) const;
209
215 void resolvePaths( const QString &name, QVariantMap &properties, const QgsPathResolver &pathResolver, bool saving ) const;
216
225 void resolveFonts( const QString &name, QVariantMap &properties, const QgsReadWriteContext &context ) const;
226
228 QStringList symbolLayersForType( Qgis::SymbolType type );
229
231 static std::unique_ptr< QgsSymbolLayer > defaultSymbolLayer( Qgis::SymbolType type );
232
233 private:
234#ifdef SIP_RUN
236#endif
237
238 QMap<QString, QgsSymbolLayerAbstractMetadata *> mMetadata;
239};
240
241#endif
SymbolType
Symbol types.
Definition qgis.h:636
Resolves relative paths into absolute paths and vice versa.
A container for the context for various read/write operations on objects.
Stores metadata about one symbol layer class.
virtual QgsSymbolLayer * createSymbolLayer(const QVariantMap &map)=0
Create a symbol layer of this type given the map of properties.
virtual void resolveFonts(const QVariantMap &properties, const QgsReadWriteContext &context)
Resolve fonts from the symbol layer's properties.
QgsSymbolLayerAbstractMetadata(const QString &name, const QString &visibleName, Qgis::SymbolType type)
Constructor for QgsSymbolLayerAbstractMetadata.
virtual ~QgsSymbolLayerAbstractMetadata()=default
virtual QgsSymbolLayerWidget * createSymbolLayerWidget(QgsVectorLayer *)
Create widget for symbol layer of this type. Can return nullptr if there's no GUI.
virtual QgsSymbolLayer * createSymbolLayerFromSld(QDomElement &)
Create a symbol layer of this type given the map of properties.
virtual void resolvePaths(QVariantMap &properties, const QgsPathResolver &pathResolver, bool saving)
Resolve paths in symbol layer's properties (if there are any paths).
QgsSymbolLayerCreateFunc mCreateFunc
QgsSymbolLayer * createSymbolLayer(const QVariantMap &map) override
Create a symbol layer of this type given the map of properties.
void resolveFonts(const QVariantMap &properties, const QgsReadWriteContext &context) override
Resolve fonts from the symbol layer's properties.
QgsSymbolLayerCreateFromSldFunc mCreateFromSldFunc
QgsSymbolLayerCreateFromSldFunc createFromSldFunction() const
QgsSymbolLayer * createSymbolLayerFromSld(QDomElement &elem) override
Create a symbol layer of this type given the map of properties.
QgsSymbolLayerPathResolverFunc pathResolverFunction() const
QgsSymbolLayerCreateFunc createFunction() const
void setWidgetFunction(QgsSymbolLayerWidgetFunc f)
QgsSymbolLayerWidgetFunc mWidgetFunc
void resolvePaths(QVariantMap &properties, const QgsPathResolver &pathResolver, bool saving) override
Resolve paths in symbol layer's properties (if there are any paths).
QgsSymbolLayerMetadata(const QString &name, const QString &visibleName, Qgis::SymbolType type, QgsSymbolLayerCreateFunc pfCreate, QgsSymbolLayerCreateFromSldFunc pfCreateFromSld=nullptr, QgsSymbolLayerPathResolverFunc pfPathResolver=nullptr, QgsSymbolLayerWidgetFunc pfWidget=nullptr, QgsSymbolLayerFontResolverFunc pfFontResolver=nullptr)
QgsSymbolLayerWidget * createSymbolLayerWidget(QgsVectorLayer *vl) override
Create widget for symbol layer of this type. Can return nullptr if there's no GUI.
QgsSymbolLayerFontResolverFunc mFontResolverFunc
Font resolver function pointer.
QgsSymbolLayerPathResolverFunc mPathResolverFunc
QgsSymbolLayerWidgetFunc widgetFunction() const
QgsSymbolLayerRegistry(const QgsSymbolLayerRegistry &rh)=delete
std::unique_ptr< QgsSymbolLayer > createSymbolLayerFromSld(const QString &name, QDomElement &element) const
create a new instance of symbol layer given symbol layer name and SLD
static std::unique_ptr< QgsSymbolLayer > defaultSymbolLayer(Qgis::SymbolType type)
create a new instance of symbol layer for specified symbol type with default settings
bool addSymbolLayerType(QgsSymbolLayerAbstractMetadata *metadata)
Registers a new symbol layer type. Takes ownership of the metadata instance.
QgsSymbolLayerRegistry & operator=(const QgsSymbolLayerRegistry &rh)=delete
QStringList symbolLayersForType(Qgis::SymbolType type)
Returns a list of available symbol layers for a specified symbol type.
void resolvePaths(const QString &name, QVariantMap &properties, const QgsPathResolver &pathResolver, bool saving) const
Resolve paths in properties of a particular symbol layer.
void resolveFonts(const QString &name, QVariantMap &properties, const QgsReadWriteContext &context) const
Resolve fonts from the properties of a particular symbol layer.
QgsSymbolLayerAbstractMetadata * symbolLayerMetadata(const QString &name) const
Returns metadata for specified symbol layer. Returns nullptr if not found.
bool removeSymbolLayerType(QgsSymbolLayerAbstractMetadata *metadata)
Removes a symbol layer type.
std::unique_ptr< QgsSymbolLayer > createSymbolLayer(const QString &name, const QVariantMap &properties=QVariantMap()) const
create a new instance of symbol layer given symbol layer name and properties
Abstract base class for widgets used to configure QgsSymbolLayer classes.
Abstract base class for symbol layers.
Represents a vector layer which manages a vector based dataset.
#define SIP_EXTERNAL
Definition qgis_sip.h:123
#define SIP_SKIP
Definition qgis_sip.h:133
#define SIP_TRANSFER
Definition qgis_sip.h:35
#define SIP_FACTORY
Definition qgis_sip.h:83
void(* QgsSymbolLayerPathResolverFunc)(QVariantMap &, const QgsPathResolver &, bool)
QgsSymbolLayer *(* QgsSymbolLayerCreateFunc)(const QVariantMap &)
QgsSymbolLayer *(* QgsSymbolLayerCreateFromSldFunc)(QDomElement &)
QgsSymbolLayerWidget *(* QgsSymbolLayerWidgetFunc)(QgsVectorLayer *)
void(* QgsSymbolLayerFontResolverFunc)(const QVariantMap &, const QgsReadWriteContext &)