Quantum GIS API Documentation  master-ce49b66
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 dot sk at gmail dot 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:
00067     QgsSymbolLayerV2Metadata( QString name, QString visibleName,
00068                               QgsSymbolV2::SymbolType type,
00069                               QgsSymbolLayerV2CreateFunc pfCreate,
00070                               QgsSymbolLayerV2WidgetFunc pfWidget = NULL )
00071         : QgsSymbolLayerV2AbstractMetadata( name, visibleName, type )
00072         , mCreateFunc( pfCreate )
00073         , mWidgetFunc( pfWidget )
00074         , mCreateFromSldFunc( NULL )
00075     {}
00076 
00078     QgsSymbolLayerV2Metadata( QString name, QString visibleName,
00079                               QgsSymbolV2::SymbolType type,
00080                               QgsSymbolLayerV2CreateFunc pfCreate,
00081                               QgsSymbolLayerV2CreateFromSldFunc pfCreateFromSld,
00082                               QgsSymbolLayerV2WidgetFunc pfWidget = NULL )
00083         : QgsSymbolLayerV2AbstractMetadata( name, visibleName, type )
00084         , mCreateFunc( pfCreate )
00085         , mWidgetFunc( pfWidget )
00086         , mCreateFromSldFunc( pfCreateFromSld )
00087     {}
00088 
00090     QgsSymbolLayerV2CreateFunc createFunction() const { return mCreateFunc; }
00092     QgsSymbolLayerV2WidgetFunc widgetFunction() const { return mWidgetFunc; }
00094     QgsSymbolLayerV2CreateFromSldFunc createFromSldFunction() const { return mCreateFromSldFunc; }
00095 
00097     void setWidgetFunction( QgsSymbolLayerV2WidgetFunc f ) { mWidgetFunc = f; }
00098 
00099     virtual QgsSymbolLayerV2* createSymbolLayer( const QgsStringMap& map ) { return mCreateFunc ? mCreateFunc( map ) : NULL; }
00100     virtual QgsSymbolLayerV2Widget* createSymbolLayerWidget( const QgsVectorLayer* vl ) { return mWidgetFunc ? mWidgetFunc( vl ) : NULL; }
00101     virtual QgsSymbolLayerV2* createSymbolLayerFromSld( QDomElement& elem ) { return mCreateFromSldFunc ? mCreateFromSldFunc( elem ) : NULL; }
00102 
00103   protected:
00104     QgsSymbolLayerV2CreateFunc mCreateFunc;
00105     QgsSymbolLayerV2WidgetFunc mWidgetFunc;
00106     QgsSymbolLayerV2CreateFromSldFunc mCreateFromSldFunc;
00107 };
00108 
00109 
00114 class CORE_EXPORT QgsSymbolLayerV2Registry
00115 {
00116   public:
00117 
00119     static QgsSymbolLayerV2Registry* instance();
00120 
00122     QgsSymbolLayerV2AbstractMetadata* symbolLayerMetadata( QString name ) const;
00123 
00125     bool addSymbolLayerType( QgsSymbolLayerV2AbstractMetadata* metadata );
00126 
00128     QgsSymbolLayerV2* createSymbolLayer( QString name, const QgsStringMap& properties = QgsStringMap() ) const;
00129 
00131     QgsSymbolLayerV2* createSymbolLayerFromSld( QString name, QDomElement &element ) const;
00132 
00134     QStringList symbolLayersForType( QgsSymbolV2::SymbolType type );
00135 
00137     static QgsSymbolLayerV2* defaultSymbolLayer( QgsSymbolV2::SymbolType type );
00138 
00139   protected:
00140     QgsSymbolLayerV2Registry();
00141     ~QgsSymbolLayerV2Registry();
00142 
00143     static QgsSymbolLayerV2Registry* mInstance;
00144     QMap<QString, QgsSymbolLayerV2AbstractMetadata*> mMetadata;
00145 
00146 };
00147 
00148 #endif
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Defines