Quantum GIS API Documentation  1.8
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.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
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines