QGIS API Documentation 3.37.0-Master (fdefdf9c27f)
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_core.h"
20#include "qgis.h"
21
22class QgsPathResolver;
23class QgsVectorLayer;
25class QgsSymbolLayer;
26class QDomElement;
28
37{
38 public:
39
46 QgsSymbolLayerAbstractMetadata( const QString &name, const QString &visibleName, Qgis::SymbolType type )
47 : mName( name )
48 , mVisibleName( visibleName )
49 , mType( type )
50 {}
51
53
54 QString name() const { return mName; }
55 QString visibleName() const { return mVisibleName; }
56 Qgis::SymbolType type() const { return mType; }
57
59 virtual QgsSymbolLayer *createSymbolLayer( const QVariantMap &map ) = 0 SIP_FACTORY;
63 virtual QgsSymbolLayer *createSymbolLayerFromSld( QDomElement & ) SIP_FACTORY { return nullptr; }
64
72 virtual void resolvePaths( QVariantMap &properties, const QgsPathResolver &pathResolver, bool saving )
73 {
74 Q_UNUSED( properties )
75 Q_UNUSED( pathResolver )
76 Q_UNUSED( saving )
77 }
78
87 virtual void resolveFonts( const QVariantMap &properties, const QgsReadWriteContext &context )
88 {
89 Q_UNUSED( properties )
90 Q_UNUSED( context )
91 }
92
93 protected:
94 QString mName;
95 QString mVisibleName;
97};
98
99typedef QgsSymbolLayer *( *QgsSymbolLayerCreateFunc )( const QVariantMap & ) SIP_SKIP;
100typedef QgsSymbolLayerWidget *( *QgsSymbolLayerWidgetFunc )( QgsVectorLayer * ) SIP_SKIP;
101typedef QgsSymbolLayer *( *QgsSymbolLayerCreateFromSldFunc )( QDomElement & ) SIP_SKIP;
102typedef void ( *QgsSymbolLayerPathResolverFunc )( QVariantMap &, const QgsPathResolver &, bool ) SIP_SKIP;
103typedef void ( *QgsSymbolLayerFontResolverFunc )( const QVariantMap &, const QgsReadWriteContext & ) SIP_SKIP;
104
110{
111 public:
113 QgsSymbolLayerMetadata( const QString &name, const QString &visibleName,
114 Qgis::SymbolType type,
116 QgsSymbolLayerCreateFromSldFunc pfCreateFromSld = nullptr,
117 QgsSymbolLayerPathResolverFunc pfPathResolver = nullptr,
118 QgsSymbolLayerWidgetFunc pfWidget = nullptr,
119 QgsSymbolLayerFontResolverFunc pfFontResolver = nullptr ) SIP_SKIP
120 : QgsSymbolLayerAbstractMetadata( name, visibleName, type )
121 , mCreateFunc( pfCreate )
122 , mWidgetFunc( pfWidget )
123 , mCreateFromSldFunc( pfCreateFromSld )
124 , mPathResolverFunc( pfPathResolver )
125 , mFontResolverFunc( pfFontResolver )
126 {}
127
129 QgsSymbolLayerCreateFunc createFunction() const { return mCreateFunc; } SIP_SKIP
131 QgsSymbolLayerWidgetFunc widgetFunction() const { return mWidgetFunc; } SIP_SKIP
136
139
140 QgsSymbolLayer *createSymbolLayer( const QVariantMap &map ) override SIP_FACTORY { return mCreateFunc ? mCreateFunc( map ) : nullptr; }
141 QgsSymbolLayerWidget *createSymbolLayerWidget( QgsVectorLayer *vl ) override SIP_FACTORY { return mWidgetFunc ? mWidgetFunc( vl ) : nullptr; }
142 QgsSymbolLayer *createSymbolLayerFromSld( QDomElement &elem ) override SIP_FACTORY { return mCreateFromSldFunc ? mCreateFromSldFunc( elem ) : nullptr; }
143 void resolvePaths( QVariantMap &properties, const QgsPathResolver &pathResolver, bool saving ) override
144 {
145 if ( mPathResolverFunc )
146 mPathResolverFunc( properties, pathResolver, saving );
147 }
148
149 void resolveFonts( const QVariantMap &properties, const QgsReadWriteContext &context ) override
150 {
151 if ( mFontResolverFunc )
152 mFontResolverFunc( properties, context );
153 }
154
155 protected:
160
167
168 private:
169#ifdef SIP_RUN
171#endif
172};
173
174
182class CORE_EXPORT QgsSymbolLayerRegistry
183{
184 public:
185
188
193
195 QgsSymbolLayerAbstractMetadata *symbolLayerMetadata( const QString &name ) const;
196
198 bool addSymbolLayerType( QgsSymbolLayerAbstractMetadata *metadata SIP_TRANSFER );
199
204 bool removeSymbolLayerType( QgsSymbolLayerAbstractMetadata *metadata );
205
207 QgsSymbolLayer *createSymbolLayer( const QString &name, const QVariantMap &properties = QVariantMap() ) const SIP_FACTORY;
208
210 QgsSymbolLayer *createSymbolLayerFromSld( const QString &name, QDomElement &element ) const SIP_FACTORY;
211
217 void resolvePaths( const QString &name, QVariantMap &properties, const QgsPathResolver &pathResolver, bool saving ) const;
218
227 void resolveFonts( const QString &name, QVariantMap &properties, const QgsReadWriteContext &context ) const;
228
230 QStringList symbolLayersForType( Qgis::SymbolType type );
231
233 static QgsSymbolLayer *defaultSymbolLayer( Qgis::SymbolType type ) SIP_FACTORY;
234
235 private:
236#ifdef SIP_RUN
238#endif
239
240 QMap<QString, QgsSymbolLayerAbstractMetadata *> mMetadata;
241};
242
243#endif
The Qgis class provides global constants for use throughout the application.
Definition: qgis.h:54
SymbolType
Symbol types.
Definition: qgis.h:401
Resolves relative paths into absolute paths and vice versa.
The class is used as a container of context for various read/write operations on other 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).
Convenience metadata class that uses static functions to create symbol layer and its widget.
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
Registry of available symbol layer classes.
QgsSymbolLayerRegistry(const QgsSymbolLayerRegistry &rh)=delete
QgsSymbolLayerRegistry cannot be copied.
QgsSymbolLayerRegistry & operator=(const QgsSymbolLayerRegistry &rh)=delete
QgsSymbolLayerRegistry cannot be copied.
Represents a vector layer which manages a vector based data sets.
#define SIP_EXTERNAL
Definition: qgis_sip.h:116
#define SIP_SKIP
Definition: qgis_sip.h:126
#define SIP_TRANSFER
Definition: qgis_sip.h:36
#define SIP_FACTORY
Definition: qgis_sip.h:76
void(* QgsSymbolLayerPathResolverFunc)(QVariantMap &, const QgsPathResolver &, bool)
QgsSymbolLayer *(* QgsSymbolLayerCreateFunc)(const QVariantMap &)
QgsSymbolLayer *(* QgsSymbolLayerCreateFromSldFunc)(QDomElement &)
QgsSymbolLayerWidget *(* QgsSymbolLayerWidgetFunc)(QgsVectorLayer *)
void(* QgsSymbolLayerFontResolverFunc)(const QVariantMap &, const QgsReadWriteContext &)