Quantum GIS API Documentation
1.8
|
00001 /*************************************************************************** 00002 qgsrendererv2registry.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 #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 QgsRendererV2Metadata( QString name, 00082 QString visibleName, 00083 QgsRendererV2CreateFunc pfCreate, 00084 QIcon icon = QIcon(), 00085 QgsRendererV2WidgetFunc pfWidget = NULL ) 00086 : QgsRendererV2AbstractMetadata( name, visibleName, icon ) 00087 , mCreateFunc( pfCreate ) 00088 , mWidgetFunc( pfWidget ) 00089 , mCreateFromSldFunc( NULL ) 00090 {} 00091 00092 QgsRendererV2Metadata( QString name, 00093 QString visibleName, 00094 QgsRendererV2CreateFunc pfCreate, 00095 QgsRendererV2CreateFromSldFunc pfCreateFromSld, 00096 QIcon icon = QIcon(), 00097 QgsRendererV2WidgetFunc pfWidget = NULL ) 00098 : QgsRendererV2AbstractMetadata( name, visibleName, icon ) 00099 , mCreateFunc( pfCreate ) 00100 , mWidgetFunc( pfWidget ) 00101 , mCreateFromSldFunc( pfCreateFromSld ) 00102 {} 00103 00104 virtual QgsFeatureRendererV2* createRenderer( QDomElement& elem ) { return mCreateFunc ? mCreateFunc( elem ) : NULL; } 00105 virtual QgsRendererV2Widget* createRendererWidget( QgsVectorLayer* layer, QgsStyleV2* style, QgsFeatureRendererV2* renderer ) 00106 { return mWidgetFunc ? mWidgetFunc( layer, style, renderer ) : NULL; } 00107 virtual QgsFeatureRendererV2* createRendererFromSld( QDomElement& elem, QGis::GeometryType geomType ) 00108 { return mCreateFromSldFunc ? mCreateFromSldFunc( elem, geomType ) : NULL; } 00109 00110 00111 QgsRendererV2CreateFunc createFunction() const { return mCreateFunc; } 00112 QgsRendererV2WidgetFunc widgetFunction() const { return mWidgetFunc; } 00113 QgsRendererV2CreateFromSldFunc createFromSldFunction() const { return mCreateFromSldFunc; } 00114 00115 void setWidgetFunction( QgsRendererV2WidgetFunc f ) { mWidgetFunc = f; } 00116 00117 protected: 00119 QgsRendererV2CreateFunc mCreateFunc; 00121 QgsRendererV2WidgetFunc mWidgetFunc; 00123 QgsRendererV2CreateFromSldFunc mCreateFromSldFunc; 00124 }; 00125 00131 class CORE_EXPORT QgsRendererV2Registry 00132 { 00133 public: 00134 00135 static QgsRendererV2Registry* instance(); 00136 00138 bool addRenderer( QgsRendererV2AbstractMetadata* metadata ); 00139 00141 bool removeRenderer( QString rendererName ); 00142 00144 QgsRendererV2AbstractMetadata* rendererMetadata( QString rendererName ); 00145 00147 QStringList renderersList(); 00148 00149 protected: 00151 QgsRendererV2Registry(); 00152 ~QgsRendererV2Registry(); 00153 00154 static QgsRendererV2Registry* mInstance; 00155 00156 QMap<QString, QgsRendererV2AbstractMetadata*> mRenderers; 00157 00159 QStringList mRenderersOrder; 00160 }; 00161 00162 #endif // QGSRENDERERV2REGISTRY_H