Branch data Line data Source code
1 : : /*************************************************************************** 2 : : qgslayoutitempolygon.h 3 : : begin : March 2016 4 : : copyright : (C) 2016 Paul Blottiere, Oslandia 5 : : email : paul dot blottiere at oslandia dot com 6 : : ***************************************************************************/ 7 : : 8 : : /*************************************************************************** 9 : : * * 10 : : * This program is free software; you can redistribute it and/or modify * 11 : : * it under the terms of the GNU General Public License as published by * 12 : : * the Free Software Foundation; either version 2 of the License, or * 13 : : * (at your option) any later version. * 14 : : * * 15 : : ***************************************************************************/ 16 : : 17 : : #ifndef QGSLAYOUTITEMPOLYGON_H 18 : : #define QGSLAYOUTITEMPOLYGON_H 19 : : 20 : : #include "qgis_core.h" 21 : : #include "qgslayoutitemnodeitem.h" 22 : : #include "qgssymbol.h" 23 : : 24 : : /** 25 : : * \ingroup core 26 : : * \brief Layout item for node based polygon shapes. 27 : : * \since QGIS 3.0 28 : : */ 29 : : class CORE_EXPORT QgsLayoutItemPolygon: public QgsLayoutNodesItem 30 : : { 31 : 0 : Q_OBJECT 32 : : 33 : : public: 34 : : 35 : : /** 36 : : * Constructor for QgsLayoutItemPolygon for the specified \a layout. 37 : : */ 38 : : QgsLayoutItemPolygon( QgsLayout *layout ); 39 : : 40 : : /** 41 : : * Constructor for QgsLayoutItemPolygon for the specified \a polygon 42 : : * and \a layout. 43 : : */ 44 : : QgsLayoutItemPolygon( const QPolygonF &polygon, QgsLayout *layout ); 45 : : 46 : : /** 47 : : * Returns a new polygon item for the specified \a layout. 48 : : * 49 : : * The caller takes responsibility for deleting the returned object. 50 : : */ 51 : : static QgsLayoutItemPolygon *create( QgsLayout *layout ) SIP_FACTORY; 52 : : 53 : : int type() const override; 54 : : QIcon icon() const override; 55 : : QString displayName() const override; 56 : : bool accept( QgsStyleEntityVisitorInterface *visitor ) const override; 57 : : QgsLayoutItem::Flags itemFlags() const override; 58 : : QgsGeometry clipPath() const override; 59 : : 60 : : /** 61 : : * Returns the fill symbol used to draw the shape. 62 : : * \see setSymbol() 63 : : */ 64 : : QgsFillSymbol *symbol() { return mPolygonStyleSymbol.get(); } 65 : : 66 : : /** 67 : : * Sets the \a symbol used to draw the shape. 68 : : * Ownership of \a symbol is not transferred. 69 : : * \see symbol() 70 : : */ 71 : : void setSymbol( QgsFillSymbol *symbol ); 72 : : 73 : : protected: 74 : : bool _addNode( int indexPoint, QPointF newPoint, double radius ) override; 75 : : bool _removeNode( int nodeIndex ) override; 76 : : void _draw( QgsLayoutItemRenderContext &context, const QStyleOptionGraphicsItem *itemStyle = nullptr ) override; 77 : : void _readXmlStyle( const QDomElement &elmt, const QgsReadWriteContext &context ) override; 78 : : void _writeXmlStyle( QDomDocument &doc, QDomElement &elmt, const QgsReadWriteContext &context ) const override; 79 : : 80 : : private: 81 : : 82 : : //! QgsSymbol use to draw the shape. 83 : : std::unique_ptr<QgsFillSymbol> mPolygonStyleSymbol; 84 : : //! Create a default symbol. 85 : : void createDefaultPolygonStyleSymbol(); 86 : : 87 : : /** 88 : : * Should be called after the shape's symbol is changed. Redraws the shape and recalculates 89 : : * its selection bounds. 90 : : */ 91 : : void refreshSymbol(); 92 : : }; 93 : : 94 : : #endif // QGSLAYOUTITEMPOLYGON_H