Branch data Line data Source code
1 : : /*************************************************************************** 2 : : qgslayoutframe.cpp 3 : : ------------------ 4 : : begin : October 2017 5 : : copyright : (C) 2017 by Nyall Dawson 6 : : email : nyall dot dawson 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 QGSLAYOUTFRAME_H 17 : : #define QGSLAYOUTFRAME_H 18 : : 19 : : #include "qgis_core.h" 20 : : #include "qgis_sip.h" 21 : : #include "qgslayoutitem.h" 22 : : 23 : : class QgsLayout; 24 : : class QgsLayoutMultiFrame; 25 : : 26 : : /** 27 : : * \ingroup core 28 : : * \brief Base class for frame items, which form a layout multiframe item. 29 : : * \since QGIS 3.0 30 : : */ 31 : : class CORE_EXPORT QgsLayoutFrame: public QgsLayoutItem 32 : : { 33 : 0 : Q_OBJECT 34 : : 35 : : public: 36 : : 37 : : /** 38 : : * Constructor for QgsLayoutFrame, with the specified parent \a layout 39 : : * and belonging to a \a multiFrame. 40 : : */ 41 : : QgsLayoutFrame( QgsLayout *layout, QgsLayoutMultiFrame *multiFrame ); 42 : : 43 : : /** 44 : : * Creates a new QgsLayoutFrame belonging to the specified \a layout. 45 : : */ 46 : : static QgsLayoutFrame *create( QgsLayout *layout ) SIP_FACTORY; 47 : : 48 : : int type() const override; 49 : : QIcon icon() const override; 50 : : 51 : : //Overridden to allow multiframe to set display name 52 : : QString displayName() const override; 53 : : 54 : : void cleanup() override; 55 : : 56 : : /** 57 : : * Sets the visible part of the multiframe's content which is visible within 58 : : * this frame (relative to the total multiframe extent in layout units). 59 : : * \see extent() 60 : : */ 61 : 0 : void setContentSection( const QRectF §ion ) { mSection = section; } 62 : : 63 : : /** 64 : : * Returns the parent multiframe for the frame. 65 : : */ 66 : : QgsLayoutMultiFrame *multiFrame() const; 67 : : 68 : : QgsLayoutSize minimumSize() const override; 69 : : QgsLayoutSize fixedSize() const override; 70 : : 71 : : /** 72 : : * Returns the visible portion of the multi frame's content which 73 : : * is shown in this frame, in layout units. 74 : : * \see setContentSection() 75 : : */ 76 : 0 : QRectF extent() const { return mSection; } 77 : : 78 : : /** 79 : : * Returns whether the page should be hidden (ie, not included in layout exports) if this frame is empty 80 : : * \returns TRUE if page should be hidden if frame is empty 81 : : * \see setHidePageIfEmpty() 82 : : */ 83 : 0 : bool hidePageIfEmpty() const { return mHidePageIfEmpty; } 84 : : 85 : : /** 86 : : * Sets whether the page should be hidden (ie, not included in layout exports) if this frame is empty 87 : : * \param hidePageIfEmpty set to TRUE if page should be hidden if frame is empty 88 : : * \see hidePageIfEmpty() 89 : : */ 90 : : void setHidePageIfEmpty( bool hidePageIfEmpty ); 91 : : 92 : : /** 93 : : * Returns whether the background and frame stroke should be hidden if this frame is empty 94 : : * \returns TRUE if background and stroke should be hidden if frame is empty 95 : : * \see setHideBackgroundIfEmpty() 96 : : */ 97 : 0 : bool hideBackgroundIfEmpty() const { return mHideBackgroundIfEmpty; } 98 : : 99 : : /** 100 : : * Sets whether the background and frame stroke should be hidden if this frame is empty 101 : : * \param hideBackgroundIfEmpty set to TRUE if background and stroke should be hidden if frame is empty 102 : : * \see hideBackgroundIfEmpty() 103 : : */ 104 : : void setHideBackgroundIfEmpty( bool hideBackgroundIfEmpty ); 105 : : 106 : : /** 107 : : * Returns whether the frame is empty. 108 : : * \see hidePageIfEmpty() 109 : : */ 110 : : bool isEmpty() const; 111 : : 112 : : QgsExpressionContext createExpressionContext() const override; 113 : : ExportLayerBehavior exportLayerBehavior() const override; 114 : : 115 : : protected: 116 : : 117 : : void draw( QgsLayoutItemRenderContext &context ) override; 118 : : void drawFrame( QgsRenderContext &context ) override; 119 : : void drawBackground( QgsRenderContext &context ) override; 120 : : bool writePropertiesToElement( QDomElement &parentElement, QDomDocument &document, const QgsReadWriteContext &context ) const override; 121 : : bool readPropertiesFromElement( const QDomElement &itemElement, const QDomDocument &document, const QgsReadWriteContext &context ) override; 122 : : 123 : : private: 124 : : QgsLayoutFrame() = delete; 125 : : QgsLayoutMultiFrame *mMultiFrame = nullptr; 126 : : QString mMultiFrameUuid; 127 : : QRectF mSection; 128 : : 129 : : //! If TRUE, layout will not export page if this frame is empty 130 : : bool mHidePageIfEmpty = false; 131 : : //! If TRUE, background and outside frame will not be drawn if frame is empty 132 : : bool mHideBackgroundIfEmpty = false; 133 : : 134 : : friend class QgsLayoutMultiFrame; 135 : : 136 : : }; 137 : : 138 : : #endif // QGSLAYOUTFRAME_H