Branch data Line data Source code
1 : : /*************************************************************************** 2 : : qgsdiagram.h 3 : : --------------------- 4 : : begin : March 2011 5 : : copyright : (C) 2011 by Marco Hugentobler 6 : : email : marco dot hugentobler at sourcepole dot ch 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 QGSDIAGRAM_H 16 : : #define QGSDIAGRAM_H 17 : : 18 : : #include "qgis_core.h" 19 : : #include "qgis.h" 20 : : #include <QPen> 21 : : #include <QBrush> 22 : : #include "qgsexpression.h" //for QMap with QgsExpression 23 : : 24 : : class QPainter; 25 : : class QPointF; 26 : : class QgsDiagramSettings; 27 : : class QgsDiagramInterpolationSettings; 28 : : class QgsFeature; 29 : : class QgsRenderContext; 30 : : class QgsExpressionContext; 31 : : class QgsFields; 32 : : class QgsAttributes; 33 : : 34 : : 35 : : /** 36 : : * \ingroup core 37 : : * \brief Base class for all diagram types. 38 : : */ 39 : : class CORE_EXPORT QgsDiagram SIP_NODEFAULTCTORS 40 : : { 41 : : public: 42 : : 43 : : #ifdef SIP_RUN 44 : : SIP_CONVERT_TO_SUBCLASS_CODE 45 : : if ( sipCpp->diagramName() == QLatin1String( "Pie" ) ) 46 : : sipType = sipType_QgsPieDiagram; 47 : : else if ( sipCpp->diagramName() == QLatin1String( "Histogram" ) ) 48 : : sipType = sipType_QgsHistogramDiagram; 49 : : else if ( sipCpp->diagramName() == QLatin1String( "Text" ) ) 50 : : sipType = sipType_QgsTextDiagram; 51 : : else if ( sipCpp->diagramName() == QLatin1String( "Stacked" ) ) 52 : : sipType = sipType_QgsStackedBarDiagram; 53 : : else 54 : : sipType = NULL; 55 : : SIP_END 56 : : #endif 57 : : 58 : 0 : virtual ~QgsDiagram() { clearCache(); } 59 : : 60 : : /** 61 : : * Returns an instance that is equivalent to this one 62 : : * \since QGIS 2.4 63 : : */ 64 : : virtual QgsDiagram *clone() const = 0 SIP_FACTORY; 65 : : 66 : : void clearCache(); 67 : : 68 : : /** 69 : : * Returns a prepared expression for the specified context. 70 : : * \param expression expression string 71 : : * \param context expression context 72 : : * \since QGIS 2.12 73 : : */ 74 : : QgsExpression *getExpression( const QString &expression, const QgsExpressionContext &context ); 75 : : 76 : : //! Draws the diagram at the given position (in pixel coordinates) 77 : : virtual void renderDiagram( const QgsFeature &feature, QgsRenderContext &c, const QgsDiagramSettings &s, QPointF position ) = 0; 78 : : 79 : : /** 80 : : * Gets a descriptive name for this diagram type. 81 : : */ 82 : : virtual QString diagramName() const = 0; 83 : : //! Returns the size in map units the diagram will use to render. 84 : : virtual QSizeF diagramSize( const QgsAttributes &attributes, const QgsRenderContext &c, const QgsDiagramSettings &s ) = 0; 85 : : //! Returns the size in map units the diagram will use to render. Interpolate size 86 : : virtual QSizeF diagramSize( const QgsFeature &feature, const QgsRenderContext &c, const QgsDiagramSettings &s, const QgsDiagramInterpolationSettings &is ) = 0; 87 : : 88 : : /** 89 : : * Returns the size of the legend item for the diagram corresponding to a specified value. 90 : : * \param value value to return legend item size for 91 : : * \param s diagram settings 92 : : * \param is interpolation settings 93 : : * \since QGIS 2.16 94 : : */ 95 : : virtual double legendSize( double value, const QgsDiagramSettings &s, const QgsDiagramInterpolationSettings &is ) const = 0; 96 : : 97 : : protected: 98 : : 99 : : /** 100 : : * Constructor for QgsDiagram. 101 : : */ 102 : 0 : QgsDiagram() = default; 103 : : QgsDiagram( const QgsDiagram &other ); 104 : : 105 : : /** 106 : : * Changes the pen width to match the current settings and rendering context 107 : : * \param pen The pen to modify 108 : : * \param s The settings that specify the pen width 109 : : * \param c The rendering specifying the proper scale units for pixel conversion 110 : : */ 111 : : void setPenWidth( QPen &pen, const QgsDiagramSettings &s, const QgsRenderContext &c ); 112 : : 113 : : /** 114 : : * Calculates a size to match the current settings and rendering context 115 : : * \param size The size to convert 116 : : * \param s The settings that specify the size type 117 : : * \param c The rendering specifying the proper scale units for pixel conversion 118 : : * 119 : : * \returns The converted size for rendering 120 : : */ 121 : : QSizeF sizePainterUnits( QSizeF size, const QgsDiagramSettings &s, const QgsRenderContext &c ); 122 : : 123 : : /** 124 : : * Calculates a length to match the current settings and rendering context 125 : : * \param l The length to convert 126 : : * \param s Unused 127 : : * \param c The rendering specifying the proper scale units for pixel conversion 128 : : * 129 : : * \returns The converted length for rendering 130 : : */ 131 : : double sizePainterUnits( double l, const QgsDiagramSettings &s, const QgsRenderContext &c ); 132 : : 133 : : /** 134 : : * Calculates a size to match the current settings and rendering context 135 : : * \param s The settings that contain the font size and size type 136 : : * \param c The rendering specifying the proper scale units for pixel conversion 137 : : * 138 : : * \returns The properly scaled font for rendering 139 : : */ 140 : : QFont scaledFont( const QgsDiagramSettings &s, const QgsRenderContext &c ); 141 : : 142 : : /** 143 : : * Returns the scaled size of a diagram for a value, respecting the specified diagram interpolation settings. 144 : : * \param value value to calculate corresponding circular size for 145 : : * \param s diagram settings 146 : : * \param is interpolation settings 147 : : * \since QGIS 2.16 148 : : */ 149 : : QSizeF sizeForValue( double value, const QgsDiagramSettings &s, const QgsDiagramInterpolationSettings &is ) const; 150 : : 151 : : private: 152 : : QMap<QString, QgsExpression *> mExpressions; 153 : : QgsDiagram &operator= ( const QgsDiagram & ) = delete; 154 : : }; 155 : : 156 : : #endif // QGSDIAGRAM_H