@@ -10,41 +10,69 @@ class QgsVectorLayer;
10
10
class QgsStyleV2 ;
11
11
class QgsRendererV2Widget ;
12
12
13
+ /* *
14
+ Stores metadata about one renderer class.
15
+
16
+ @note It's necessary to implement createRenderer() function.
17
+ In C++ you can use QgsRendererV2Metadata convenience class.
18
+ */
19
+ class CORE_EXPORT QgsRendererV2AbstractMetadata
20
+ {
21
+ public:
22
+ QgsRendererV2AbstractMetadata ( QString name, QString visibleName, QString iconName = QString() )
23
+ : mName ( name ), mVisibleName ( visibleName ), mIconName ( iconName ) {}
24
+
25
+ QString name () const { return mName ; }
26
+ QString visibleName () const { return mVisibleName ; }
27
+ QString iconName () const { return mIconName ; }
28
+
29
+ /* * Return new instance of the renderer given the DOM element. Returns NULL on error.
30
+ * Pure virtual function: must be implemented in derived classes. */
31
+ virtual QgsFeatureRendererV2* createRenderer ( QDomElement& elem ) = 0;
32
+ /* * Return new instance of settings widget for the renderer. Returns NULL on error. */
33
+ virtual QgsRendererV2Widget* createRendererWidget ( QgsVectorLayer* layer, QgsStyleV2* style, QgsFeatureRendererV2* renderer )
34
+ { return NULL ; }
35
+
36
+ protected:
37
+ // ! name used within QGIS for identification (the same what renderer's type() returns)
38
+ QString mName ;
39
+ // ! name visible for users (translatable)
40
+ QString mVisibleName ;
41
+ // ! icon to be shown in the renderer properties dialog
42
+ QString mIconName ;
43
+ };
44
+
45
+
13
46
typedef QgsFeatureRendererV2*( *QgsRendererV2CreateFunc )( QDomElement& );
14
47
typedef QgsRendererV2Widget*( *QgsRendererV2WidgetFunc )( QgsVectorLayer*, QgsStyleV2*, QgsFeatureRendererV2* );
15
48
16
- class CORE_EXPORT QgsRendererV2Metadata
49
+ /* *
50
+ Convenience metadata class that uses static functions to create renderer and its widget.
51
+ */
52
+ class CORE_EXPORT QgsRendererV2Metadata : public QgsRendererV2AbstractMetadata
17
53
{
18
54
public:
19
- /* * construct invalid metadata */
20
- QgsRendererV2Metadata ()
21
- : mName (), mVisibleName (), mCreateFunc ( NULL ), mIconName (), mWidgetFunc ( NULL ) {}
22
55
23
56
/* * construct metadata */
24
57
QgsRendererV2Metadata ( QString name,
25
58
QString visibleName,
26
59
QgsRendererV2CreateFunc pfCreate,
27
60
QString iconName = QString(),
28
61
QgsRendererV2WidgetFunc pfWidget = NULL )
29
- : mName ( name ), mVisibleName ( visibleName ), mCreateFunc ( pfCreate ), mIconName ( iconName ), mWidgetFunc ( pfWidget ) {}
62
+ : QgsRendererV2AbstractMetadata( name, visibleName, iconName ), mCreateFunc ( pfCreate ), mWidgetFunc ( pfWidget ) {}
63
+
64
+ virtual QgsFeatureRendererV2* createRenderer ( QDomElement& elem ) { return mCreateFunc ? mCreateFunc (elem):NULL ; }
65
+ virtual QgsRendererV2Widget* createRendererWidget ( QgsVectorLayer* layer, QgsStyleV2* style, QgsFeatureRendererV2* renderer )
66
+ { return mWidgetFunc ? mWidgetFunc (layer, style, renderer) : NULL ; }
30
67
31
- QString name () const { return mName ; }
32
- QString visibleName () const { return mVisibleName ; }
33
- QString iconName () const { return mIconName ; }
34
68
QgsRendererV2CreateFunc createFunction () const { return mCreateFunc ; }
35
69
QgsRendererV2WidgetFunc widgetFunction () const { return mWidgetFunc ; }
36
70
37
71
void setWidgetFunction ( QgsRendererV2WidgetFunc f ) { mWidgetFunc = f; }
38
72
39
73
protected:
40
- // ! name used within QGIS for identification (the same what renderer's type() returns)
41
- QString mName ;
42
- // ! name visible for users (translatable)
43
- QString mVisibleName ;
44
74
// ! pointer to function that creates an instance of the renderer when loading project / style
45
75
QgsRendererV2CreateFunc mCreateFunc ;
46
- // ! icon to be shown in the renderer properties dialog
47
- QString mIconName ;
48
76
// ! pointer to function that creates a widget for configuration of renderer's params
49
77
QgsRendererV2WidgetFunc mWidgetFunc ;
50
78
};
@@ -60,28 +88,26 @@ class CORE_EXPORT QgsRendererV2Registry
60
88
61
89
static QgsRendererV2Registry* instance ();
62
90
63
- // ! add a renderer to registry
64
- void addRenderer ( const QgsRendererV2Metadata& metadata );
91
+ // ! add a renderer to registry. Takes ownership of the metadata object.
92
+ bool addRenderer ( QgsRendererV2AbstractMetadata* metadata );
65
93
66
94
// ! remove renderer from registry
67
95
bool removeRenderer ( QString rendererName );
68
96
69
- // ! get factory method for particular renderer
70
- QgsRendererV2Metadata rendererMetadata ( QString rendererName );
71
-
72
- // ! assign a widget factory to particular renderer
73
- bool setRendererWidgetFunction ( QString name, QgsRendererV2WidgetFunc f );
97
+ // ! get metadata for particular renderer. Returns NULL if not found in registry.
98
+ QgsRendererV2AbstractMetadata* rendererMetadata ( QString rendererName );
74
99
75
100
// ! return a list of available renderers
76
101
QStringList renderersList ();
77
102
78
103
protected:
79
104
// ! protected constructor
80
105
QgsRendererV2Registry ();
106
+ ~QgsRendererV2Registry ();
81
107
82
108
static QgsRendererV2Registry* mInstance ;
83
109
84
- QMap<QString, QgsRendererV2Metadata > mRenderers ;
110
+ QMap<QString, QgsRendererV2AbstractMetadata* > mRenderers ;
85
111
86
112
// ! list to keep order in which renderers have been added
87
113
QStringList mRenderersOrder ;
0 commit comments