Quantum GIS API Documentation  1.7.4
src/core/symbology-ng/qgssymbollayerv2registry.h
Go to the documentation of this file.
00001 
00002 #ifndef QGSSYMBOLLAYERV2REGISTRY_H
00003 #define QGSSYMBOLLAYERV2REGISTRY_H
00004 
00005 #include "qgssymbolv2.h"
00006 #include "qgssymbollayerv2.h"
00007 
00014 class CORE_EXPORT QgsSymbolLayerV2AbstractMetadata
00015 {
00016   public:
00017     QgsSymbolLayerV2AbstractMetadata( QString name, QString visibleName, QgsSymbolV2::SymbolType type )
00018         : mName( name ), mVisibleName( visibleName ), mType( type ) {}
00019 
00020     QString name() const { return mName; }
00021     QString visibleName() const { return mVisibleName; }
00022     QgsSymbolV2::SymbolType type() const { return mType; }
00023 
00025     virtual QgsSymbolLayerV2* createSymbolLayer( const QgsStringMap& map ) = 0;
00027     virtual QgsSymbolLayerV2Widget* createSymbolLayerWidget() { return NULL; }
00028 
00029   protected:
00030     QString mName;
00031     QString mVisibleName;
00032     QgsSymbolV2::SymbolType mType;
00033 };
00034 
00035 typedef QgsSymbolLayerV2*( *QgsSymbolLayerV2CreateFunc )( const QgsStringMap& );
00036 typedef QgsSymbolLayerV2Widget*( *QgsSymbolLayerV2WidgetFunc )();
00037 
00041 class CORE_EXPORT QgsSymbolLayerV2Metadata : public QgsSymbolLayerV2AbstractMetadata
00042 {
00043   public:
00044     QgsSymbolLayerV2Metadata( QString name, QString visibleName,
00045                               QgsSymbolV2::SymbolType type,
00046                               QgsSymbolLayerV2CreateFunc pfCreate,
00047                               QgsSymbolLayerV2WidgetFunc pfWidget = NULL )
00048         : QgsSymbolLayerV2AbstractMetadata( name, visibleName, type ), mCreateFunc( pfCreate ), mWidgetFunc( pfWidget ) {}
00049 
00050     QgsSymbolLayerV2CreateFunc createFunction() const { return mCreateFunc; }
00051     QgsSymbolLayerV2WidgetFunc widgetFunction() const { return mWidgetFunc; }
00052 
00053     void setWidgetFunction( QgsSymbolLayerV2WidgetFunc f ) { mWidgetFunc = f; }
00054 
00055     virtual QgsSymbolLayerV2* createSymbolLayer( const QgsStringMap& map ) { return mCreateFunc ? mCreateFunc( map ) : NULL; }
00056     virtual QgsSymbolLayerV2Widget* createSymbolLayerWidget() { return mWidgetFunc ? mWidgetFunc() : NULL; }
00057 
00058   protected:
00059     QgsSymbolLayerV2CreateFunc mCreateFunc;
00060     QgsSymbolLayerV2WidgetFunc mWidgetFunc;
00061 };
00062 
00063 
00068 class CORE_EXPORT QgsSymbolLayerV2Registry
00069 {
00070   public:
00071 
00073     static QgsSymbolLayerV2Registry* instance();
00074 
00076     QgsSymbolLayerV2AbstractMetadata* symbolLayerMetadata( QString name ) const;
00077 
00079     bool addSymbolLayerType( QgsSymbolLayerV2AbstractMetadata* metadata );
00080 
00082     QgsSymbolLayerV2* createSymbolLayer( QString name, const QgsStringMap& properties = QgsStringMap() ) const;
00083 
00085     QStringList symbolLayersForType( QgsSymbolV2::SymbolType type );
00086 
00088     static QgsSymbolLayerV2* defaultSymbolLayer( QgsSymbolV2::SymbolType type );
00089 
00090   protected:
00091     QgsSymbolLayerV2Registry();
00092     ~QgsSymbolLayerV2Registry();
00093 
00094     static QgsSymbolLayerV2Registry* mInstance;
00095     QMap<QString, QgsSymbolLayerV2AbstractMetadata*> mMetadata;
00096 
00097 };
00098 
00099 #endif
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines