Branch data Line data Source code
1 : : /*************************************************************************** 2 : : qgslayoutitemgroup.h 3 : : --------------------- 4 : : begin : October 2017 5 : : copyright : (C) 2017 by Nyall Dawson 6 : : email : nyall dot dawson at gmail dot com 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 QGSLAYOUTITEMGROUP_H 18 : : #define QGSLAYOUTITEMGROUP_H 19 : : 20 : : #include "qgis_core.h" 21 : : #include "qgslayoutitem.h" 22 : : 23 : : /** 24 : : * \ingroup core 25 : : * \brief A container for grouping several QgsLayoutItems. 26 : : * \since QGIS 3.0 27 : : */ 28 : : class CORE_EXPORT QgsLayoutItemGroup: public QgsLayoutItem 29 : : { 30 : 0 : Q_OBJECT 31 : : 32 : : public: 33 : : 34 : : /** 35 : : * Constructor for QgsLayoutItemGroup, belonging to the specified \a layout. 36 : : */ 37 : : explicit QgsLayoutItemGroup( QgsLayout *layout ); 38 : : 39 : : void cleanup() override; 40 : : 41 : : int type() const override; 42 : : QString displayName() const override; 43 : : 44 : : /** 45 : : * Returns a new group item for the specified \a layout. 46 : : * 47 : : * The caller takes responsibility for deleting the returned object. 48 : : */ 49 : : static QgsLayoutItemGroup *create( QgsLayout *layout ) SIP_FACTORY; 50 : : 51 : : /** 52 : : * Adds an \a item to the group. Ownership of the item 53 : : * is transferred to the group. 54 : : */ 55 : : void addItem( QgsLayoutItem *item SIP_TRANSFER ); 56 : : 57 : : /** 58 : : * Removes all items from the group (but does not delete them). 59 : : * Items remain in the scene but are no longer grouped together 60 : : */ 61 : : void removeItems(); 62 : : 63 : : /** 64 : : * Returns a list of items contained by the group. 65 : : */ 66 : : QList<QgsLayoutItem *> items() const; 67 : : 68 : : //overridden to also hide grouped items 69 : : void setVisibility( bool visible ) override; 70 : : 71 : : //overridden to move child items 72 : : void attemptMove( const QgsLayoutPoint &point, bool useReferencePoint = true, bool includesFrame = false, int page = -1 ) override; 73 : : void attemptResize( const QgsLayoutSize &size, bool includesFrame = false ) override; 74 : : 75 : : void paint( QPainter *painter, const QStyleOptionGraphicsItem *itemStyle, QWidget *pWidget ) override; 76 : : 77 : : void finalizeRestoreFromXml() override; 78 : : ExportLayerBehavior exportLayerBehavior() const override; 79 : : protected: 80 : : void draw( QgsLayoutItemRenderContext &context ) override; 81 : : bool writePropertiesToElement( QDomElement &parentElement, QDomDocument &document, const QgsReadWriteContext &context ) const override; 82 : : bool readPropertiesFromElement( const QDomElement &itemElement, const QDomDocument &document, const QgsReadWriteContext &context ) override; 83 : : 84 : : private: 85 : : 86 : : void resetBoundingRect(); 87 : : void updateBoundingRect( QgsLayoutItem *item ); 88 : : void setSceneRect( const QRectF &rectangle ); 89 : : 90 : : QList< QString > mItemUuids; 91 : : QList< QPointer< QgsLayoutItem >> mItems; 92 : : QRectF mBoundingRectangle; 93 : : }; 94 : : 95 : : #endif //QGSLAYOUTITEMGROUP_H 96 : : 97 : : 98 : :