Quantum GIS API Documentation  1.7.4
src/core/symbology-ng/qgsrendererv2registry.h
Go to the documentation of this file.
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
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines