Branch data Line data Source code
1 : : /*************************************************************************** 2 : : qgsannotationregistry.h 3 : : ----------------------- 4 : : Date : January 2017 5 : : Copyright : (C) 2017 Nyall Dawson 6 : : Email : nyall dot dawson 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 QGSANNOTATIONREGISTRY_H 17 : : #define QGSANNOTATIONREGISTRY_H 18 : : 19 : : #define SIP_NO_FILE 20 : : 21 : : #include "qgis_core.h" 22 : : #include "qgsannotation.h" 23 : : #include "qgstextannotation.h" 24 : : #include "qgssvgannotation.h" 25 : : #include "qgshtmlannotation.h" 26 : : #include <QString> 27 : : #include <functional> 28 : : 29 : : ///@cond PRIVATE 30 : : 31 : : // None of this is stable API! 32 : : 33 : : //! Creates a new annotation object 34 : : typedef std::function < QgsAnnotation*() > QgsCreateAnnotationFunc; 35 : : 36 : : /** 37 : : * \class QgsAnnotationMetadata 38 : : * \ingroup core 39 : : * \brief Metadata item for an annotation type within a QgsAnnotationRegistry. 40 : : * \since QGIS 3.0 41 : : */ 42 : 45 : class CORE_EXPORT QgsAnnotationMetadata 43 : : { 44 : : public: 45 : : 46 : : /** 47 : : * Constructor for QgsAnnotationMetadata. \a typeName should be a unique string 48 : : * identifying the annotation type. 49 : : */ 50 : 15 : QgsAnnotationMetadata( const QString &typeName, const QgsCreateAnnotationFunc &createFunc ) 51 : 15 : : mTypeName( typeName ) 52 : 15 : , mCreateFunc( createFunc ) 53 : 15 : {} 54 : : 55 : : /** 56 : : * Returns the annotation type. 57 : : */ 58 : 30 : QString type() const { return mTypeName; } 59 : : 60 : : /** 61 : : * Creates a new annotation of the associated type. 62 : : */ 63 : 0 : QgsAnnotation *createAnnotation() const { return mCreateFunc ? mCreateFunc() : nullptr ; } 64 : : 65 : : private: 66 : : 67 : : QString mTypeName; 68 : 0 : QgsCreateAnnotationFunc mCreateFunc = nullptr; 69 : : 70 : 0 : QgsAnnotationMetadata() = default; 71 : : friend class QMap< QString, QgsAnnotationMetadata >; 72 : : 73 : : }; 74 : : 75 : : /** 76 : : * \class QgsAnnotationRegistry 77 : : * \ingroup core 78 : : * \brief Handles registration and creation of annotation item types. 79 : : * \since QGIS 3.0 80 : : */ 81 : 5 : class CORE_EXPORT QgsAnnotationRegistry 82 : : { 83 : : 84 : : public: 85 : : 86 : : /** 87 : : * Constructor for QgsAnnotationRegistry. The registry is automatically populated 88 : : * with several standard annotation types. 89 : : */ 90 : 5 : QgsAnnotationRegistry() 91 : : { 92 : 10 : addAnnotationType( QgsAnnotationMetadata( QStringLiteral( "TextAnnotationItem" ), QgsTextAnnotation::create ) ); 93 : 10 : addAnnotationType( QgsAnnotationMetadata( QStringLiteral( "HtmlAnnotationItem" ), QgsHtmlAnnotation::create ) ); 94 : 10 : addAnnotationType( QgsAnnotationMetadata( QStringLiteral( "SVGAnnotationItem" ), QgsSvgAnnotation::create ) ); 95 : 5 : } 96 : : 97 : : /** 98 : : * Adds a new annotation type to the registry. Returns TRUE if adding the type 99 : : * was successful, or FALSE if an annotation with duplicate type already exists 100 : : * in the registry. 101 : : */ 102 : 15 : bool addAnnotationType( const QgsAnnotationMetadata &metadata ) 103 : : { 104 : 15 : if ( mMetadata.contains( metadata.type() ) ) 105 : 0 : return false; 106 : : 107 : 15 : mMetadata.insert( metadata.type(), metadata ); 108 : 15 : return true; 109 : 15 : } 110 : : 111 : : /** 112 : : * Creates a new annotation of the specified type. Returns NULLPTR if no 113 : : * matching annotations types were found. 114 : : */ 115 : 0 : QgsAnnotation *create( const QString &typeName ) const 116 : : { 117 : 0 : if ( !mMetadata.contains( typeName ) ) 118 : 0 : return nullptr; 119 : : 120 : 0 : return mMetadata.value( typeName ).createAnnotation(); 121 : 0 : } 122 : : 123 : : private: 124 : : 125 : : QMap< QString, QgsAnnotationMetadata > mMetadata; 126 : : 127 : : }; 128 : : 129 : : ///@endcond 130 : : 131 : : #endif // QGSANNOTATIONREGISTRY_H