QGIS API Documentation  3.21.0-Master (564c892cfd)
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 
22 class QgsPathResolver;
23 class QgsVectorLayer;
25 class QgsSymbolLayer;
26 class 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 
52  virtual ~QgsSymbolLayerAbstractMetadata() = default;
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 
73  virtual void resolvePaths( QVariantMap &properties, const QgsPathResolver &pathResolver, bool saving )
74  {
75  Q_UNUSED( properties )
76  Q_UNUSED( pathResolver )
77  Q_UNUSED( saving )
78  }
79 
88  virtual void resolveFonts( const QVariantMap &properties, const QgsReadWriteContext &context )
89  {
90  Q_UNUSED( properties )
91  Q_UNUSED( context )
92  }
93 
94  protected:
95  QString mName;
96  QString mVisibleName;
98 };
99 
100 typedef QgsSymbolLayer *( *QgsSymbolLayerCreateFunc )( const QVariantMap & ) SIP_SKIP;
101 typedef QgsSymbolLayerWidget *( *QgsSymbolLayerWidgetFunc )( QgsVectorLayer * ) SIP_SKIP;
102 typedef QgsSymbolLayer *( *QgsSymbolLayerCreateFromSldFunc )( QDomElement & ) SIP_SKIP;
103 typedef void ( *QgsSymbolLayerPathResolverFunc )( QVariantMap &, const QgsPathResolver &, bool ) SIP_SKIP;
104 typedef void ( *QgsSymbolLayerFontResolverFunc )( const QVariantMap &, const QgsReadWriteContext & ) SIP_SKIP;
105 
111 {
112  public:
114  QgsSymbolLayerMetadata( const QString &name, const QString &visibleName,
115  Qgis::SymbolType type,
116  QgsSymbolLayerCreateFunc pfCreate,
117  QgsSymbolLayerCreateFromSldFunc pfCreateFromSld = nullptr,
118  QgsSymbolLayerPathResolverFunc pfPathResolver = nullptr,
119  QgsSymbolLayerWidgetFunc pfWidget = nullptr,
120  QgsSymbolLayerFontResolverFunc pfFontResolver = nullptr ) SIP_SKIP
121  : QgsSymbolLayerAbstractMetadata( name, visibleName, type )
122  , mCreateFunc( pfCreate )
123  , mWidgetFunc( pfWidget )
124  , mCreateFromSldFunc( pfCreateFromSld )
125  , mPathResolverFunc( pfPathResolver )
126  , mFontResolverFunc( pfFontResolver )
127  {}
128 
130  QgsSymbolLayerCreateFunc createFunction() const { return mCreateFunc; } SIP_SKIP
132  QgsSymbolLayerWidgetFunc widgetFunction() const { return mWidgetFunc; } SIP_SKIP
134  QgsSymbolLayerCreateFromSldFunc createFromSldFunction() const { return mCreateFromSldFunc; } SIP_SKIP
136  QgsSymbolLayerPathResolverFunc pathResolverFunction() const { return mPathResolverFunc; } SIP_SKIP
137 
139  void setWidgetFunction( QgsSymbolLayerWidgetFunc f ) { mWidgetFunc = f; } SIP_SKIP
140 
141  QgsSymbolLayer *createSymbolLayer( const QVariantMap &map ) override SIP_FACTORY { return mCreateFunc ? mCreateFunc( map ) : nullptr; }
142  QgsSymbolLayerWidget *createSymbolLayerWidget( QgsVectorLayer *vl ) override SIP_FACTORY { return mWidgetFunc ? mWidgetFunc( vl ) : 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 
183 class CORE_EXPORT QgsSymbolLayerRegistry
184 {
185  public:
186 
189 
194 
196  QgsSymbolLayerAbstractMetadata *symbolLayerMetadata( const QString &name ) const;
197 
199  bool addSymbolLayerType( QgsSymbolLayerAbstractMetadata *metadata SIP_TRANSFER );
200 
202  QgsSymbolLayer *createSymbolLayer( const QString &name, const QVariantMap &properties = QVariantMap() ) const SIP_FACTORY;
203 
205  QgsSymbolLayer *createSymbolLayerFromSld( const QString &name, QDomElement &element ) const SIP_FACTORY;
206 
213  void resolvePaths( const QString &name, QVariantMap &properties, const QgsPathResolver &pathResolver, bool saving ) const;
214 
223  void resolveFonts( const QString &name, QVariantMap &properties, const QgsReadWriteContext &context ) const;
224 
226  QStringList symbolLayersForType( Qgis::SymbolType type );
227 
229  static QgsSymbolLayer *defaultSymbolLayer( Qgis::SymbolType type ) SIP_FACTORY;
230 
231  private:
232 #ifdef SIP_RUN
234 #endif
235 
236  QMap<QString, QgsSymbolLayerAbstractMetadata *> mMetadata;
237 };
238 
239 #endif
The Qgis class provides global constants for use throughout the application.
Definition: qgis.h:62
SymbolType
Symbol types.
Definition: qgis.h:168
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 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 QgsSymbolLayer * createSymbolLayer(const QVariantMap &map)=0
Create a symbol layer of this type given the map of properties.
virtual ~QgsSymbolLayerAbstractMetadata()=default
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).
virtual QgsSymbolLayerWidget * createSymbolLayerWidget(QgsVectorLayer *)
Create widget for symbol layer of this type. Can return nullptr if there's no GUI.
Convenience metadata class that uses static functions to create symbol layer and its widget.
QgsSymbolLayerCreateFunc mCreateFunc
void resolveFonts(const QVariantMap &properties, const QgsReadWriteContext &context) override
Resolve fonts from the symbol layer's properties.
QgsSymbolLayer * createSymbolLayerFromSld(QDomElement &elem) override
Create a symbol layer of this type given the map of properties.
QgsSymbolLayerCreateFromSldFunc mCreateFromSldFunc
QgsSymbolLayerCreateFromSldFunc createFromSldFunction() const
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.
QgsSymbolLayer * createSymbolLayer(const QVariantMap &map) override
Create a symbol layer of this type given the map of properties.
QgsSymbolLayerFontResolverFunc mFontResolverFunc
Font resolver function pointer.
QgsSymbolLayerPathResolverFunc mPathResolverFunc
QgsSymbolLayerWidgetFunc widgetFunction() const
Registry of available symbol layer classes.
QgsSymbolLayerRegistry & operator=(const QgsSymbolLayerRegistry &rh)=delete
QgsSymbolLayerRegistry cannot be copied.
QgsSymbolLayerRegistry(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(* QgsSymbolLayerFontResolverFunc)(const QVariantMap &, const QgsReadWriteContext &)
void(* QgsSymbolLayerPathResolverFunc)(QVariantMap &, const QgsPathResolver &, bool)
QgsSymbolLayer *(* QgsSymbolLayerCreateFunc)(const QVariantMap &)
QgsSymbolLayerWidget *(* QgsSymbolLayerWidgetFunc)(QgsVectorLayer *)
QgsSymbolLayer *(* QgsSymbolLayerCreateFromSldFunc)(QDomElement &)