Quantum GIS API Documentation  1.8
src/core/symbology-ng/qgssymbollayerv2registry.h
Go to the documentation of this file.
00001 /***************************************************************************
00002     qgssymbollayerv2registry.h
00003     ---------------------
00004     begin                : November 2009
00005     copyright            : (C) 2009 by Martin Dobias
00006     email                : wonder.sk at gmail.com
00007  ***************************************************************************
00008  *                                                                         *
00009  *   This program is free software; you can redistribute it and/or modify  *
00010  *   it under the terms of the GNU General Public License as published by  *
00011  *   the Free Software Foundation; either version 2 of the License, or     *
00012  *   (at your option) any later version.                                   *
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
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines