Branch data Line data Source code
1 : : /*************************************************************************** 2 : : qgslabelsink.h 3 : : ------------------- 4 : : begin : January 2014 5 : : copyright : (C) 2014 by Marco Hugentobler 6 : : email : marco at sourcepole dot ch 7 : : ***************************************************************************/ 8 : : 9 : : /*************************************************************************** 10 : : * * 11 : : * This program is free software; you can redistribute it and/or modify * 12 : : * it under the terms of the GNU General Public License as published by * 13 : : * the Free Software Foundation; either version 2 of the License, or * 14 : : * (at your option) any later version. * 15 : : * * 16 : : ***************************************************************************/ 17 : : 18 : : #ifndef QGSLABELSINK_H 19 : : #define QGSLABELSINK_H 20 : : 21 : : #define SIP_NO_FILE 22 : : 23 : : #include "qgsvectorlayerlabelprovider.h" 24 : : #include "qgsrulebasedlabeling.h" 25 : : 26 : : class QgsPalLayerSettings; 27 : : class QgsRuleBasedLabeling; 28 : : 29 : : /** 30 : : * \ingroup core 31 : : * \brief Abstract base class that can be used to intercept rendered labels from 32 : : * a labeling / rendering job. 33 : : * 34 : : * \note not available in Python bindings 35 : : * \since QGIS 3.14 36 : : */ 37 : 0 : class QgsLabelSink 38 : : { 39 : : public: 40 : 0 : virtual ~QgsLabelSink() = default; 41 : : 42 : : /** 43 : : * The drawLabel method is called for each label that is being drawn. 44 : : * Every subclass must implement this method to draw the label or send the information from \a label 45 : : * to another desired location. 46 : : */ 47 : : virtual void drawLabel( const QString &layerId, QgsRenderContext &context, pal::LabelPosition *label, const QgsPalLayerSettings &settings ) = 0; 48 : : }; 49 : : 50 : : /** 51 : : * \ingroup core 52 : : * \brief Implements a derived label provider for use with QgsLabelSink. 53 : : * 54 : : * \note not available in Python bindings 55 : : * \since QGIS 3.14 56 : : */ 57 : 0 : class QgsLabelSinkProvider : public QgsVectorLayerLabelProvider 58 : : { 59 : : public: 60 : : //! Creates a rule based label sink provider which will draw/register labels in \a sink. 61 : : explicit QgsLabelSinkProvider( QgsVectorLayer *layer, const QString &providerId, QgsLabelSink *sink, const QgsPalLayerSettings *settings ); 62 : : 63 : : void drawLabel( QgsRenderContext &context, pal::LabelPosition *label ) const override; 64 : : 65 : : private: 66 : : QgsLabelSink *mLabelSink = nullptr; 67 : : }; 68 : : 69 : : /** 70 : : * \ingroup core 71 : : * \brief Implements a derived label provider for rule based labels for use with QgsLabelSink. 72 : : * 73 : : * \note not available in Python bindings 74 : : * \since QGIS 3.14 75 : : */ 76 : 0 : class QgsRuleBasedLabelSinkProvider : public QgsRuleBasedLabelProvider 77 : : { 78 : : public: 79 : : //! Creates a rule based label sink provider which will draw/register labels in \a sink. 80 : : explicit QgsRuleBasedLabelSinkProvider( const QgsRuleBasedLabeling &rules, QgsVectorLayer *layer, QgsLabelSink *sink ); 81 : : 82 : : /** 83 : : * Reinitialize the subproviders with QgsLabelSinkProviders 84 : : * \deprecated since QGIS 3.12 85 : : */ 86 : : Q_DECL_DEPRECATED void reinit( QgsVectorLayer *layer ); 87 : : 88 : : void drawLabel( QgsRenderContext &context, pal::LabelPosition *label ) const override; 89 : : 90 : : //! Creates a QgsRuleBasedLabelSinkProvider 91 : : QgsVectorLayerLabelProvider *createProvider( QgsVectorLayer *layer, const QString &providerId, bool withFeatureLoop, const QgsPalLayerSettings *settings ) override; 92 : : 93 : : private: 94 : : QgsLabelSink *mLabelSink = nullptr; 95 : : }; 96 : : 97 : : 98 : : 99 : : #endif // QGSLABELSINK_H