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