|
Quantum GIS API Documentation
master-ce49b66
|
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