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