QGIS API Documentation  master-3f58142
src/core/symbology-ng/qgsrendererv2registry.h
Go to the documentation of this file.
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
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Defines