00001 #ifndef QGSRENDERERV2REGISTRY_H
00002 #define QGSRENDERERV2REGISTRY_H
00003
00004 #include <QIcon>
00005 #include <QMap>
00006 #include <QStringList>
00007
00008 class QgsFeatureRendererV2;
00009 class QDomElement;
00010 class QgsVectorLayer;
00011 class QgsStyleV2;
00012 class QgsRendererV2Widget;
00013
00020 class CORE_EXPORT QgsRendererV2AbstractMetadata
00021 {
00022 public:
00023 QgsRendererV2AbstractMetadata( QString name, QString visibleName, QIcon icon = QIcon() )
00024 : mName( name ), mVisibleName( visibleName ), mIcon( icon ) {}
00025
00026 QString name() const { return mName; }
00027 QString visibleName() const { return mVisibleName; }
00028
00029 QIcon icon() const { return mIcon; }
00030 void setIcon( const QIcon& icon ) { mIcon = icon; }
00031
00034 virtual QgsFeatureRendererV2* createRenderer( QDomElement& elem ) = 0;
00036 virtual QgsRendererV2Widget* createRendererWidget( QgsVectorLayer* layer, QgsStyleV2* style, QgsFeatureRendererV2* renderer )
00037 { return NULL; }
00038
00039 protected:
00041 QString mName;
00043 QString mVisibleName;
00045 QIcon mIcon;
00046 };
00047
00048
00049 typedef QgsFeatureRendererV2*( *QgsRendererV2CreateFunc )( QDomElement& );
00050 typedef QgsRendererV2Widget*( *QgsRendererV2WidgetFunc )( QgsVectorLayer*, QgsStyleV2*, QgsFeatureRendererV2* );
00051
00055 class CORE_EXPORT QgsRendererV2Metadata : public QgsRendererV2AbstractMetadata
00056 {
00057 public:
00058
00060 QgsRendererV2Metadata( QString name,
00061 QString visibleName,
00062 QgsRendererV2CreateFunc pfCreate,
00063 QIcon icon = QIcon(),
00064 QgsRendererV2WidgetFunc pfWidget = NULL )
00065 : QgsRendererV2AbstractMetadata( name, visibleName, icon ), mCreateFunc( pfCreate ), mWidgetFunc( pfWidget ) {}
00066
00067 virtual QgsFeatureRendererV2* createRenderer( QDomElement& elem ) { return mCreateFunc ? mCreateFunc( elem ) : NULL; }
00068 virtual QgsRendererV2Widget* createRendererWidget( QgsVectorLayer* layer, QgsStyleV2* style, QgsFeatureRendererV2* renderer )
00069 { return mWidgetFunc ? mWidgetFunc( layer, style, renderer ) : NULL; }
00070
00071 QgsRendererV2CreateFunc createFunction() const { return mCreateFunc; }
00072 QgsRendererV2WidgetFunc widgetFunction() const { return mWidgetFunc; }
00073
00074 void setWidgetFunction( QgsRendererV2WidgetFunc f ) { mWidgetFunc = f; }
00075
00076 protected:
00078 QgsRendererV2CreateFunc mCreateFunc;
00080 QgsRendererV2WidgetFunc mWidgetFunc;
00081 };
00082
00088 class CORE_EXPORT QgsRendererV2Registry
00089 {
00090 public:
00091
00092 static QgsRendererV2Registry* instance();
00093
00095 bool addRenderer( QgsRendererV2AbstractMetadata* metadata );
00096
00098 bool removeRenderer( QString rendererName );
00099
00101 QgsRendererV2AbstractMetadata* rendererMetadata( QString rendererName );
00102
00104 QStringList renderersList();
00105
00106 protected:
00108 QgsRendererV2Registry();
00109 ~QgsRendererV2Registry();
00110
00111 static QgsRendererV2Registry* mInstance;
00112
00113 QMap<QString, QgsRendererV2AbstractMetadata*> mRenderers;
00114
00116 QStringList mRenderersOrder;
00117 };
00118
00119 #endif // QGSRENDERERV2REGISTRY_H