QGIS API Documentation  2.14.0-Essen
qgssymbollayerv2registry.h
Go to the documentation of this file.
1 /***************************************************************************
2  qgssymbollayerv2registry.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 QGSSYMBOLLAYERV2REGISTRY_H
17 #define QGSSYMBOLLAYERV2REGISTRY_H
18 
19 #include "qgssymbolv2.h"
20 #include "qgssymbollayerv2.h"
21 
22 class QgsVectorLayer;
23 
31 {
32  public:
34  : mName( name ), mVisibleName( visibleName ), mType( type ) {}
35 
37 
38  QString name() const { return mName; }
39  QString visibleName() const { return mVisibleName; }
40  QgsSymbolV2::SymbolType type() const { return mType; }
41 
43  virtual QgsSymbolLayerV2* createSymbolLayer( const QgsStringMap& map ) = 0;
45  virtual QgsSymbolLayerV2Widget* createSymbolLayerWidget( const QgsVectorLayer * ) { return nullptr; }
47  virtual QgsSymbolLayerV2* createSymbolLayerFromSld( QDomElement & ) { return nullptr; }
48 
49 
50  protected:
54 };
55 
56 typedef QgsSymbolLayerV2*( *QgsSymbolLayerV2CreateFunc )( const QgsStringMap& );
57 typedef QgsSymbolLayerV2Widget*( *QgsSymbolLayerV2WidgetFunc )( const QgsVectorLayer* );
58 typedef QgsSymbolLayerV2*( *QgsSymbolLayerV2CreateFromSldFunc )( QDomElement& );
59 
64 {
65  public:
67  QgsSymbolLayerV2Metadata( const QString& name, const QString& visibleName,
70  QgsSymbolLayerV2WidgetFunc pfWidget = nullptr )
71  : QgsSymbolLayerV2AbstractMetadata( name, visibleName, type )
72  , mCreateFunc( pfCreate )
73  , mWidgetFunc( pfWidget )
74  , mCreateFromSldFunc( nullptr )
75  {}
76 
78  QgsSymbolLayerV2Metadata( const QString& name, const QString& visibleName,
81  QgsSymbolLayerV2CreateFromSldFunc pfCreateFromSld,
82  QgsSymbolLayerV2WidgetFunc pfWidget = nullptr )
83  : QgsSymbolLayerV2AbstractMetadata( name, visibleName, type )
84  , mCreateFunc( pfCreate )
85  , mWidgetFunc( pfWidget )
86  , mCreateFromSldFunc( pfCreateFromSld )
87  {}
88 
90  QgsSymbolLayerV2CreateFunc createFunction() const { return mCreateFunc; }
92  QgsSymbolLayerV2WidgetFunc widgetFunction() const { return mWidgetFunc; }
94  QgsSymbolLayerV2CreateFromSldFunc createFromSldFunction() const { return mCreateFromSldFunc; }
95 
97  void setWidgetFunction( QgsSymbolLayerV2WidgetFunc f ) { mWidgetFunc = f; }
98 
99  virtual QgsSymbolLayerV2* createSymbolLayer( const QgsStringMap& map ) override { return mCreateFunc ? mCreateFunc( map ) : nullptr; }
100  virtual QgsSymbolLayerV2Widget* createSymbolLayerWidget( const QgsVectorLayer* vl ) override { return mWidgetFunc ? mWidgetFunc( vl ) : nullptr; }
101  virtual QgsSymbolLayerV2* createSymbolLayerFromSld( QDomElement& elem ) override { return mCreateFromSldFunc ? mCreateFromSldFunc( elem ) : nullptr; }
102 
103  protected:
107 };
108 
109 
114 class CORE_EXPORT QgsSymbolLayerV2Registry
115 {
116  public:
117 
119  static QgsSymbolLayerV2Registry* instance();
120 
122  QgsSymbolLayerV2AbstractMetadata* symbolLayerMetadata( const QString& name ) const;
123 
125  bool addSymbolLayerType( QgsSymbolLayerV2AbstractMetadata* metadata );
126 
128  QgsSymbolLayerV2* createSymbolLayer( const QString& name, const QgsStringMap& properties = QgsStringMap() ) const;
129 
131  QgsSymbolLayerV2* createSymbolLayerFromSld( const QString& name, QDomElement &element ) const;
132 
134  QStringList symbolLayersForType( QgsSymbolV2::SymbolType type );
135 
137  static QgsSymbolLayerV2* defaultSymbolLayer( QgsSymbolV2::SymbolType type );
138 
139  protected:
142 
144 
145  private:
147  QgsSymbolLayerV2Registry& operator=( const QgsSymbolLayerV2Registry& rh );
148 };
149 
150 #endif
virtual QgsSymbolLayerV2 * createSymbolLayerFromSld(QDomElement &)
Create a symbol layer of this type given the map of properties.
QgsSymbolV2::SymbolType type() const
virtual QgsSymbolLayerV2Widget * createSymbolLayerWidget(const QgsVectorLayer *vl) override
Create widget for symbol layer of this type.
QgsSymbolLayerV2CreateFunc mCreateFunc
virtual QgsSymbolLayerV2 * createSymbolLayer(const QgsStringMap &map) override
Create a symbol layer of this type given the map of properties.
QgsSymbolLayerV2WidgetFunc mWidgetFunc
Stores metadata about one symbol layer class.
QMap< QString, QString > QgsStringMap
Definition: qgis.h:384
QMap< QString, QgsSymbolLayerV2AbstractMetadata * > mMetadata
QgsSymbolLayerV2WidgetFunc widgetFunction() const
QgsSymbolLayerV2AbstractMetadata(const QString &name, const QString &visibleName, QgsSymbolV2::SymbolType type)
QgsSymbolLayerV2 *(* QgsSymbolLayerV2CreateFunc)(const QgsStringMap &)
QgsSymbolLayerV2CreateFromSldFunc createFromSldFunction() const
QgsSymbolLayerV2Metadata(const QString &name, const QString &visibleName, QgsSymbolV2::SymbolType type, QgsSymbolLayerV2CreateFunc pfCreate, QgsSymbolLayerV2CreateFromSldFunc pfCreateFromSld, QgsSymbolLayerV2WidgetFunc pfWidget=nullptr)
virtual QgsSymbolLayerV2Widget * createSymbolLayerWidget(const QgsVectorLayer *)
Create widget for symbol layer of this type.
QgsSymbolLayerV2CreateFromSldFunc mCreateFromSldFunc
QgsSymbolLayerV2CreateFunc createFunction() const
SymbolType
Type of the symbol.
Definition: qgssymbolv2.h:76
QgsSymbolLayerV2Widget *(* QgsSymbolLayerV2WidgetFunc)(const QgsVectorLayer *)
QgsSymbolLayerV2Metadata(const QString &name, const QString &visibleName, QgsSymbolV2::SymbolType type, QgsSymbolLayerV2CreateFunc pfCreate, QgsSymbolLayerV2WidgetFunc pfWidget=nullptr)
QgsSymbolLayerV2 *(* QgsSymbolLayerV2CreateFromSldFunc)(QDomElement &)
void setWidgetFunction(QgsSymbolLayerV2WidgetFunc f)
Represents a vector layer which manages a vector based data sets.
Registry of available symbol layer classes.
Convenience metadata class that uses static functions to create symbol layer and its widget...
virtual QgsSymbolLayerV2 * createSymbolLayerFromSld(QDomElement &elem) override
Create a symbol layer of this type given the map of properties.