|
Quantum GIS API Documentation
master-ce49b66
|
00001 /*************************************************************************** 00002 qgsrendererv2registry.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 #ifndef QGSRENDERERV2REGISTRY_H 00016 #define QGSRENDERERV2REGISTRY_H 00017 00018 #include <QIcon> 00019 #include <QMap> 00020 #include <QStringList> 00021 #include <QDomElement> 00022 00023 #include "qgis.h" 00024 00025 class QgsFeatureRendererV2; 00026 class QgsVectorLayer; 00027 class QgsStyleV2; 00028 class QgsRendererV2Widget; 00029 00036 class CORE_EXPORT QgsRendererV2AbstractMetadata 00037 { 00038 public: 00039 QgsRendererV2AbstractMetadata( QString name, QString visibleName, QIcon icon = QIcon() ) 00040 : mName( name ), mVisibleName( visibleName ), mIcon( icon ) {} 00041 virtual ~QgsRendererV2AbstractMetadata() {} 00042 00043 QString name() const { return mName; } 00044 QString visibleName() const { return mVisibleName; } 00045 00046 QIcon icon() const { return mIcon; } 00047 void setIcon( const QIcon& icon ) { mIcon = icon; } 00048 00051 virtual QgsFeatureRendererV2* createRenderer( QDomElement& elem ) = 0; 00053 virtual QgsRendererV2Widget* createRendererWidget( QgsVectorLayer* layer, QgsStyleV2* style, QgsFeatureRendererV2* renderer ) 00054 { Q_UNUSED( layer ); Q_UNUSED( style ); Q_UNUSED( renderer ); return NULL; } 00055 00056 virtual QgsFeatureRendererV2* createRendererFromSld( QDomElement& elem, QGis::GeometryType geomType ) 00057 { Q_UNUSED( elem ); Q_UNUSED( geomType ); return NULL; } 00058 00059 protected: 00061 QString mName; 00063 QString mVisibleName; 00065 QIcon mIcon; 00066 }; 00067 00068 00069 typedef QgsFeatureRendererV2*( *QgsRendererV2CreateFunc )( QDomElement& ); 00070 typedef QgsRendererV2Widget*( *QgsRendererV2WidgetFunc )( QgsVectorLayer*, QgsStyleV2*, QgsFeatureRendererV2* ); 00071 typedef QgsFeatureRendererV2*( *QgsRendererV2CreateFromSldFunc )( QDomElement&, QGis::GeometryType geomType ); 00072 00076 class CORE_EXPORT QgsRendererV2Metadata : public QgsRendererV2AbstractMetadata 00077 { 00078 public: 00079 00081 00082 QgsRendererV2Metadata( QString name, 00083 QString visibleName, 00084 QgsRendererV2CreateFunc pfCreate, 00085 QIcon icon = QIcon(), 00086 QgsRendererV2WidgetFunc pfWidget = NULL ) 00087 : QgsRendererV2AbstractMetadata( name, visibleName, icon ) 00088 , mCreateFunc( pfCreate ) 00089 , mWidgetFunc( pfWidget ) 00090 , mCreateFromSldFunc( NULL ) 00091 {} 00092 00094 QgsRendererV2Metadata( QString name, 00095 QString visibleName, 00096 QgsRendererV2CreateFunc pfCreate, 00097 QgsRendererV2CreateFromSldFunc pfCreateFromSld, 00098 QIcon icon = QIcon(), 00099 QgsRendererV2WidgetFunc pfWidget = NULL ) 00100 : QgsRendererV2AbstractMetadata( name, visibleName, icon ) 00101 , mCreateFunc( pfCreate ) 00102 , mWidgetFunc( pfWidget ) 00103 , mCreateFromSldFunc( pfCreateFromSld ) 00104 {} 00105 00106 virtual QgsFeatureRendererV2* createRenderer( QDomElement& elem ) { return mCreateFunc ? mCreateFunc( elem ) : NULL; } 00107 virtual QgsRendererV2Widget* createRendererWidget( QgsVectorLayer* layer, QgsStyleV2* style, QgsFeatureRendererV2* renderer ) 00108 { return mWidgetFunc ? mWidgetFunc( layer, style, renderer ) : NULL; } 00109 virtual QgsFeatureRendererV2* createRendererFromSld( QDomElement& elem, QGis::GeometryType geomType ) 00110 { return mCreateFromSldFunc ? mCreateFromSldFunc( elem, geomType ) : NULL; } 00111 00113 QgsRendererV2CreateFunc createFunction() const { return mCreateFunc; } 00115 QgsRendererV2WidgetFunc widgetFunction() const { return mWidgetFunc; } 00117 QgsRendererV2CreateFromSldFunc createFromSldFunction() const { return mCreateFromSldFunc; } 00118 00120 void setWidgetFunction( QgsRendererV2WidgetFunc f ) { mWidgetFunc = f; } 00121 00122 protected: 00124 QgsRendererV2CreateFunc mCreateFunc; 00126 QgsRendererV2WidgetFunc mWidgetFunc; 00128 QgsRendererV2CreateFromSldFunc mCreateFromSldFunc; 00129 }; 00130 00136 class CORE_EXPORT QgsRendererV2Registry 00137 { 00138 public: 00139 00140 static QgsRendererV2Registry* instance(); 00141 00143 bool addRenderer( QgsRendererV2AbstractMetadata* metadata ); 00144 00146 bool removeRenderer( QString rendererName ); 00147 00149 QgsRendererV2AbstractMetadata* rendererMetadata( QString rendererName ); 00150 00152 QStringList renderersList(); 00153 00154 protected: 00156 QgsRendererV2Registry(); 00157 ~QgsRendererV2Registry(); 00158 00159 static QgsRendererV2Registry* mInstance; 00160 00161 QMap<QString, QgsRendererV2AbstractMetadata*> mRenderers; 00162 00164 QStringList mRenderersOrder; 00165 }; 00166 00167 #endif // QGSRENDERERV2REGISTRY_H