Branch data Line data Source code
1 : : /*************************************************************************** 2 : : qgslegendsymbolitem.h 3 : : -------------------------------------- 4 : : Date : August 2014 5 : : Copyright : (C) 2014 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 QGSLEGENDSYMBOLITEM_H 17 : : #define QGSLEGENDSYMBOLITEM_H 18 : : 19 : : #include <memory> 20 : : #include <QString> 21 : : 22 : : #include "qgis.h" 23 : : #include "qgis_core.h" 24 : : 25 : : class QgsDataDefinedSizeLegend; 26 : : class QgsSymbol; 27 : : 28 : : /** 29 : : * \ingroup core 30 : : * \brief The class stores information about one class/rule of a vector layer renderer in a unified way 31 : : * that can be used by legend model for rendering of legend. 32 : : * 33 : : * \see QgsSymbolLegendNode 34 : : * \since QGIS 2.6 35 : : */ 36 : : class CORE_EXPORT QgsLegendSymbolItem 37 : : { 38 : : public: 39 : : 40 : : /** 41 : : * Constructor for QgsLegendSymbolItem. 42 : : */ 43 : 0 : QgsLegendSymbolItem() = default; 44 : : 45 : : /** 46 : : * Construct item. Does not take ownership of symbol (makes internal clone) 47 : : * \since QGIS 2.8 48 : : */ 49 : : QgsLegendSymbolItem( QgsSymbol *symbol, const QString &label, const QString &ruleKey, bool checkable = false, int scaleMinDenom = -1, int scaleMaxDenom = -1, int level = 0, const QString &parentRuleKey = QString() ); 50 : : ~QgsLegendSymbolItem(); 51 : : 52 : : QgsLegendSymbolItem( const QgsLegendSymbolItem &other ); 53 : : QgsLegendSymbolItem &operator=( const QgsLegendSymbolItem &other ); 54 : : 55 : : //! Returns associated symbol. May be NULLPTR. 56 : 0 : QgsSymbol *symbol() const { return mSymbol; } 57 : : //! Returns text label 58 : 0 : QString label() const { return mLabel; } 59 : : //! Returns unique identifier of the rule for identification of the item within renderer 60 : 0 : QString ruleKey() const { return mKey; } 61 : : //! Returns whether the item is user-checkable - whether renderer supports enabling/disabling it 62 : 0 : bool isCheckable() const { return mCheckable; } 63 : : 64 : : //! Used for older code that identifies legend entries from symbol pointer within renderer 65 : : QgsSymbol *legacyRuleKey() const { return mOriginalSymbolPointer; } 66 : : 67 : : //! Determine whether given scale is within the scale range. Returns TRUE if scale or scale range is invalid (value <= 0) 68 : : bool isScaleOK( double scale ) const; 69 : : 70 : : /** 71 : : * Min scale denominator of the scale range. For range 1:1000 to 1:2000 this will return 1000. 72 : : * Value <= 0 means the range is unbounded on this side 73 : : */ 74 : 0 : int scaleMinDenom() const { return mScaleMinDenom; } 75 : : 76 : : /** 77 : : * Max scale denominator of the scale range. For range 1:1000 to 1:2000 this will return 2000. 78 : : * Value <= 0 means the range is unbounded on this side 79 : : */ 80 : 0 : int scaleMaxDenom() const { return mScaleMaxDenom; } 81 : : 82 : : //! Indentation level that tells how deep the item is in a hierarchy of items. For flat lists level is 0 83 : : int level() const { return mLevel; } 84 : : 85 : : /** 86 : : * Key of the parent legend node. For legends with tree hierarchy 87 : : * \note Parameter parentRuleKey added in QGIS 2.8 88 : : */ 89 : 0 : QString parentRuleKey() const { return mParentKey; } 90 : : 91 : : /** 92 : : * Sets the symbol of the item. 93 : : * 94 : : * Does not take ownership of symbol -- an internal clone is made of the symbol. 95 : : * 96 : : * \see symbol() 97 : : */ 98 : : void setSymbol( QgsSymbol *s ); 99 : : 100 : : /** 101 : : * Sets extra information about data-defined size. If set, this item should be converted to QgsDataDefinedSizeLegendNode 102 : : * rather than QgsSymbolLegendNode instance as usual. Passing NULLPTR removes any data-defined size legend settings. 103 : : * 104 : : * Takes ownership of the settings object. 105 : : * \since QGIS 3.0 106 : : */ 107 : : void setDataDefinedSizeLegendSettings( QgsDataDefinedSizeLegend *settings SIP_TRANSFER ); 108 : : 109 : : /** 110 : : * Returns extra information for data-defined size legend rendering. Normally it returns NULLPTR. 111 : : * \since QGIS 3.0 112 : : */ 113 : : QgsDataDefinedSizeLegend *dataDefinedSizeLegendSettings() const; 114 : : 115 : : private: 116 : : //! Legend symbol -- may be NULLPTR. 117 : 0 : QgsSymbol *mSymbol = nullptr; 118 : : //! label of the item (may be empty or non-unique) 119 : : QString mLabel; 120 : : //! unique identifier of the symbol item (within renderer) 121 : : QString mKey; 122 : : //! whether it can be enabled/disabled 123 : 0 : bool mCheckable = false; 124 : : 125 : 0 : QgsSymbol *mOriginalSymbolPointer = nullptr; 126 : : 127 : : /** 128 : : * optional pointer to data-defined legend size settings - if set, the output legend 129 : : * node should be QgsDataDefinedSizeLegendNode rather than ordinary QgsSymbolLegendNode 130 : : */ 131 : 0 : QgsDataDefinedSizeLegend *mDataDefinedSizeLegendSettings = nullptr; 132 : : 133 : : // additional data that may be used for filtering 134 : : 135 : 0 : int mScaleMinDenom = -1; 136 : 0 : int mScaleMaxDenom = -1; 137 : : 138 : : //! Indentation level that tells how deep the item is in a hierarchy of items. For flat lists level is 0 139 : 0 : int mLevel = 0; 140 : : //! Key of the parent legend node. For legends with tree hierarchy 141 : : QString mParentKey; 142 : : }; 143 : : 144 : : typedef QList< QgsLegendSymbolItem > QgsLegendSymbolList; 145 : : 146 : : #endif // QGSLEGENDSYMBOLITEM_H