00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016 #ifndef QGSSYMBOLLAYERV2REGISTRY_H
00017 #define QGSSYMBOLLAYERV2REGISTRY_H
00018
00019 #include "qgssymbolv2.h"
00020 #include "qgssymbollayerv2.h"
00021
00022 class QgsVectorLayer;
00023
00030 class CORE_EXPORT QgsSymbolLayerV2AbstractMetadata
00031 {
00032 public:
00033 QgsSymbolLayerV2AbstractMetadata( QString name, QString visibleName, QgsSymbolV2::SymbolType type )
00034 : mName( name ), mVisibleName( visibleName ), mType( type ) {}
00035
00036 virtual ~QgsSymbolLayerV2AbstractMetadata() {}
00037
00038 QString name() const { return mName; }
00039 QString visibleName() const { return mVisibleName; }
00040 QgsSymbolV2::SymbolType type() const { return mType; }
00041
00043 virtual QgsSymbolLayerV2* createSymbolLayer( const QgsStringMap& map ) = 0;
00045 virtual QgsSymbolLayerV2Widget* createSymbolLayerWidget( const QgsVectorLayer * ) { return NULL; }
00047 virtual QgsSymbolLayerV2* createSymbolLayerFromSld( QDomElement & ) { return NULL; }
00048
00049
00050 protected:
00051 QString mName;
00052 QString mVisibleName;
00053 QgsSymbolV2::SymbolType mType;
00054 };
00055
00056 typedef QgsSymbolLayerV2*( *QgsSymbolLayerV2CreateFunc )( const QgsStringMap& );
00057 typedef QgsSymbolLayerV2Widget*( *QgsSymbolLayerV2WidgetFunc )( const QgsVectorLayer* );
00058 typedef QgsSymbolLayerV2*( *QgsSymbolLayerV2CreateFromSldFunc )( QDomElement& );
00059
00063 class CORE_EXPORT QgsSymbolLayerV2Metadata : public QgsSymbolLayerV2AbstractMetadata
00064 {
00065 public:
00066 QgsSymbolLayerV2Metadata( QString name, QString visibleName,
00067 QgsSymbolV2::SymbolType type,
00068 QgsSymbolLayerV2CreateFunc pfCreate,
00069 QgsSymbolLayerV2WidgetFunc pfWidget = NULL )
00070 : QgsSymbolLayerV2AbstractMetadata( name, visibleName, type )
00071 , mCreateFunc( pfCreate )
00072 , mWidgetFunc( pfWidget )
00073 , mCreateFromSldFunc( NULL )
00074 {}
00075
00076 QgsSymbolLayerV2Metadata( QString name, QString visibleName,
00077 QgsSymbolV2::SymbolType type,
00078 QgsSymbolLayerV2CreateFunc pfCreate,
00079 QgsSymbolLayerV2CreateFromSldFunc pfCreateFromSld,
00080 QgsSymbolLayerV2WidgetFunc pfWidget = NULL )
00081 : QgsSymbolLayerV2AbstractMetadata( name, visibleName, type )
00082 , mCreateFunc( pfCreate )
00083 , mWidgetFunc( pfWidget )
00084 , mCreateFromSldFunc( pfCreateFromSld )
00085 {}
00086
00087 QgsSymbolLayerV2CreateFunc createFunction() const { return mCreateFunc; }
00088 QgsSymbolLayerV2WidgetFunc widgetFunction() const { return mWidgetFunc; }
00089 QgsSymbolLayerV2CreateFromSldFunc createFromSldFunction() const { return mCreateFromSldFunc; }
00090
00091 void setWidgetFunction( QgsSymbolLayerV2WidgetFunc f ) { mWidgetFunc = f; }
00092
00093 virtual QgsSymbolLayerV2* createSymbolLayer( const QgsStringMap& map ) { return mCreateFunc ? mCreateFunc( map ) : NULL; }
00094 virtual QgsSymbolLayerV2Widget* createSymbolLayerWidget( const QgsVectorLayer* vl ) { return mWidgetFunc ? mWidgetFunc( vl ) : NULL; }
00095 virtual QgsSymbolLayerV2* createSymbolLayerFromSld( QDomElement& elem ) { return mCreateFromSldFunc ? mCreateFromSldFunc( elem ) : NULL; }
00096
00097 protected:
00098 QgsSymbolLayerV2CreateFunc mCreateFunc;
00099 QgsSymbolLayerV2WidgetFunc mWidgetFunc;
00100 QgsSymbolLayerV2CreateFromSldFunc mCreateFromSldFunc;
00101 };
00102
00103
00108 class CORE_EXPORT QgsSymbolLayerV2Registry
00109 {
00110 public:
00111
00113 static QgsSymbolLayerV2Registry* instance();
00114
00116 QgsSymbolLayerV2AbstractMetadata* symbolLayerMetadata( QString name ) const;
00117
00119 bool addSymbolLayerType( QgsSymbolLayerV2AbstractMetadata* metadata );
00120
00122 QgsSymbolLayerV2* createSymbolLayer( QString name, const QgsStringMap& properties = QgsStringMap() ) const;
00123
00125 QgsSymbolLayerV2* createSymbolLayerFromSld( QString name, QDomElement &element ) const;
00126
00128 QStringList symbolLayersForType( QgsSymbolV2::SymbolType type );
00129
00131 static QgsSymbolLayerV2* defaultSymbolLayer( QgsSymbolV2::SymbolType type );
00132
00133 protected:
00134 QgsSymbolLayerV2Registry();
00135 ~QgsSymbolLayerV2Registry();
00136
00137 static QgsSymbolLayerV2Registry* mInstance;
00138 QMap<QString, QgsSymbolLayerV2AbstractMetadata*> mMetadata;
00139
00140 };
00141
00142 #endif