Branch data Line data Source code
1 : : /*************************************************************************** 2 : : qgstextlabelfeature.h 3 : : --------------------- 4 : : begin : December 2015 5 : : copyright : (C) 2015 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 : : #ifndef QGSTEXTLABELFEATURE_H 16 : : #define QGSTEXTLABELFEATURE_H 17 : : 18 : : #define SIP_NO_FILE 19 : : 20 : : #include "qgslabelfeature.h" 21 : : #include "qgstextdocument.h" 22 : : 23 : : class QgsTextCharacterFormat; 24 : : 25 : : /** 26 : : * \ingroup core 27 : : * \brief Class that adds extra information to QgsLabelFeature for text labels 28 : : * 29 : : * \note not part of public API 30 : : */ 31 : : class QgsTextLabelFeature : public QgsLabelFeature 32 : : { 33 : : public: 34 : : //! Construct text label feature 35 : : QgsTextLabelFeature( QgsFeatureId id, geos::unique_ptr geometry, QSizeF size ); 36 : : 37 : : //! Clean up 38 : : ~QgsTextLabelFeature() override; 39 : : 40 : : /** 41 : : * Returns the text component corresponding to a specified label part 42 : : * \param partId Set to -1 for labels which are not broken into parts (e.g., non-curved labels), or the required 43 : : * part index for labels which are broken into parts (curved labels) 44 : : * \since QGIS 2.10 45 : : */ 46 : : QString text( int partId ) const; 47 : : 48 : : /** 49 : : * Returns the character format corresponding to the specified label part 50 : : * \param partId Set to the required part index for labels which are broken into parts (curved labels) 51 : : * 52 : : * This only returns valid formats for curved label placements. 53 : : * 54 : : * \since QGIS 3.14 55 : : */ 56 : : QgsTextCharacterFormat characterFormat( int partId ) const; 57 : : 58 : : /** 59 : : * Returns TRUE if the feature contains specific character formatting for the part with matching ID. 60 : : * 61 : : * \since QGIS 3.14 62 : : */ 63 : : bool hasCharacterFormat( int partId ) const; 64 : : 65 : : //! calculate data for info(). setDefinedFont() must have been called already. 66 : : void calculateInfo( bool curvedLabeling, QFontMetricsF *fm, const QgsMapToPixel *xform, double maxinangle, double maxoutangle, QgsTextDocument *document = nullptr ); 67 : : 68 : : //! Gets data-defined values 69 : 0 : const QMap< QgsPalLayerSettings::Property, QVariant > &dataDefinedValues() const { return mDataDefinedValues; } 70 : : //! Sets data-defined values 71 : 0 : void setDataDefinedValues( const QMap< QgsPalLayerSettings::Property, QVariant > &values ) { mDataDefinedValues = values; } 72 : : 73 : : //! Sets font to be used for rendering 74 : 0 : void setDefinedFont( const QFont &f ) { mDefinedFont = f; } 75 : : //! Font to be used for rendering 76 : 0 : QFont definedFont() { return mDefinedFont; } 77 : : 78 : : //! Metrics of the font for rendering 79 : 0 : QFontMetricsF *labelFontMetrics() { return mFontMetrics; } 80 : : 81 : : /** 82 : : * Returns the document for the label. 83 : : * \see setDocument() 84 : : * \since QGIS 3.14 85 : : */ 86 : : QgsTextDocument document() const; 87 : : 88 : : /** 89 : : * Sets the \a document for the label. 90 : : * \see document() 91 : : * \since QGIS 3.14 92 : : */ 93 : : void setDocument( const QgsTextDocument &document ); 94 : : 95 : : protected: 96 : : //! List of graphemes (used for curved labels) 97 : : QStringList mClusters; 98 : : 99 : : QList< QgsTextCharacterFormat > mCharacterFormats; 100 : : 101 : : //! Font for rendering 102 : : QFont mDefinedFont; 103 : : //! Metrics of the font for rendering 104 : : QFontMetricsF *mFontMetrics = nullptr; 105 : : //! Stores attribute values for data defined properties 106 : : QMap< QgsPalLayerSettings::Property, QVariant > mDataDefinedValues; 107 : : 108 : : QgsTextDocument mDocument; 109 : : 110 : : }; 111 : : 112 : : #endif //QGSTEXTLABELFEATURE_H