Branch data Line data Source code
1 : : /*************************************************************************** 2 : : qgs3drendererregistry.h 3 : : -------------------------------------- 4 : : Date : July 2017 5 : : Copyright : (C) 2017 by Martin Dobias 6 : : Email : wonder dot sk at gmail dot com 7 : : *************************************************************************** 8 : : * * 9 : : * This program is free software; you can redistribute it and/or modify * 10 : : * it under the terms of the GNU General Public License as published by * 11 : : * the Free Software Foundation; either version 2 of the License, or * 12 : : * (at your option) any later version. * 13 : : * * 14 : : ***************************************************************************/ 15 : : 16 : : #ifndef QGS3DRENDERERREGISTRY_H 17 : : #define QGS3DRENDERERREGISTRY_H 18 : : 19 : : #include "qgis_core.h" 20 : : #include "qgis_sip.h" 21 : : 22 : : #include <QMap> 23 : : 24 : : class QDomElement; 25 : : class QgsAbstract3DRenderer; 26 : : class QgsReadWriteContext; 27 : : 28 : : 29 : : /** 30 : : * \brief Base metadata class for 3D renderers. Instances of derived classes may be registered in Qgs3DRendererRegistry. 31 : : * \ingroup core 32 : : * \since QGIS 3.0 33 : : */ 34 : : class CORE_EXPORT Qgs3DRendererAbstractMetadata 35 : : { 36 : : public: 37 : : 38 : 0 : virtual ~Qgs3DRendererAbstractMetadata() = default; 39 : : 40 : : /** 41 : : * Returns unique identifier of the 3D renderer class 42 : : */ 43 : : QString type() const; 44 : : 45 : : /** 46 : : * Returns new instance of the renderer given the DOM element. Returns NULLPTR on error. 47 : : * Pure virtual function: must be implemented in derived classes. 48 : : */ 49 : : virtual QgsAbstract3DRenderer *createRenderer( QDomElement &elem, const QgsReadWriteContext &context ) = 0 SIP_FACTORY; 50 : : 51 : : protected: 52 : : 53 : : /** 54 : : * Constructor of the base class 55 : : */ 56 : : explicit Qgs3DRendererAbstractMetadata( const QString &type ); 57 : : 58 : : protected: 59 : : //! Type used within QGIS for identification (the same what renderer's type() returns) 60 : : QString mType; 61 : : }; 62 : : 63 : : 64 : : /** 65 : : * \brief Keeps track of available 3D renderers. Should be accessed through QgsApplication::renderer3DRegistry() singleton. 66 : : * \ingroup core 67 : : * \since QGIS 3.0 68 : : */ 69 : : class CORE_EXPORT Qgs3DRendererRegistry 70 : : { 71 : : public: 72 : : //! Creates registry of 3D renderers 73 : 5 : Qgs3DRendererRegistry() = default; 74 : : 75 : : ~Qgs3DRendererRegistry(); 76 : : 77 : : /** 78 : : * Registers a new 3D renderer type. The call takes ownership of the passed metadata object. 79 : : */ 80 : : void addRenderer( Qgs3DRendererAbstractMetadata *metadata SIP_TRANSFER ); 81 : : 82 : : /** 83 : : * Unregisters a 3D renderer type 84 : : */ 85 : : void removeRenderer( const QString &type ); 86 : : 87 : : /** 88 : : * Returns metadata for a 3D renderer type (may be used to create a new instance of the type) 89 : : */ 90 : : Qgs3DRendererAbstractMetadata *rendererMetadata( const QString &type ) const; 91 : : 92 : : /** 93 : : * Returns a list of all available 3D renderer types. 94 : : */ 95 : : QStringList renderersList() const; 96 : : 97 : : private: 98 : : QMap<QString, Qgs3DRendererAbstractMetadata *> mRenderers; 99 : : }; 100 : : 101 : : #endif // QGS3DRENDERERREGISTRY_H