Branch data Line data Source code
1 : : /*************************************************************************** 2 : : qgslayoutitempage.h 3 : : -------------------- 4 : : begin : July 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 QGSLAYOUTITEMPAGE_H 18 : : #define QGSLAYOUTITEMPAGE_H 19 : : 20 : : #include "qgis_core.h" 21 : : #include "qgslayoutitem.h" 22 : : #include "qgslayoutitemregistry.h" 23 : : #include "qgis_sip.h" 24 : : 25 : : 26 : : ///@cond PRIVATE 27 : : #ifndef SIP_RUN 28 : : 29 : : /** 30 : : * \ingroup core 31 : : * \brief Item representing a grid. 32 : : * 33 : : * This is drawn separately to the underlying page item since the grid needs to be 34 : : * drawn above all other layout items, while the paper item is drawn below all others. 35 : : * \since QGIS 3.0 36 : : */ 37 : 0 : class CORE_EXPORT QgsLayoutItemPageGrid: public QGraphicsRectItem 38 : : { 39 : : public: 40 : : QgsLayoutItemPageGrid( double x, double y, double width, double height, QgsLayout *layout ); 41 : : 42 : : void paint( QPainter *painter, const QStyleOptionGraphicsItem *itemStyle, QWidget *pWidget ) override; 43 : : 44 : : private: 45 : : QgsLayout *mLayout = nullptr; 46 : : }; 47 : : #endif 48 : : ///@endcond 49 : : 50 : : /** 51 : : * \ingroup core 52 : : * \class QgsLayoutItemPage 53 : : * \brief Item representing the paper in a layout. 54 : : * \since QGIS 3.0 55 : : */ 56 : : class CORE_EXPORT QgsLayoutItemPage : public QgsLayoutItem 57 : : { 58 : : 59 : : Q_OBJECT 60 : : 61 : : public: 62 : : 63 : : //! Page orientation 64 : : enum Orientation 65 : : { 66 : : Portrait, //!< Portrait orientation 67 : : Landscape //!< Landscape orientation 68 : : }; 69 : : 70 : : //! Page item undo commands, used for collapsing undo commands 71 : : enum UndoCommand 72 : : { 73 : : UndoPageSymbol = 3000, //!< Layout page symbol change 74 : : }; 75 : : 76 : : /** 77 : : * Constructor for QgsLayoutItemPage, with the specified parent \a layout. 78 : : */ 79 : : explicit QgsLayoutItemPage( QgsLayout *layout ); 80 : : ~QgsLayoutItemPage() override; 81 : : 82 : : /** 83 : : * Returns a new page item for the specified \a layout. 84 : : * 85 : : * The caller takes responsibility for deleting the returned object. 86 : : */ 87 : : static QgsLayoutItemPage *create( QgsLayout *layout ) SIP_FACTORY; 88 : : 89 : : int type() const override; 90 : : QString displayName() const override; 91 : : 92 : : /** 93 : : * Sets the \a size of the page. 94 : : * \see pageSize() 95 : : */ 96 : : void setPageSize( const QgsLayoutSize &size ); 97 : : 98 : : /** 99 : : * Sets the page size to a known page \a size, e.g. "A4" and \a orientation. 100 : : * The known page sizes are managed by QgsPageSizeRegistry. Valid page sizes 101 : : * can be retrieved via QgsPageSizeRegistry::entries(). 102 : : * The function returns TRUE if \a size was a valid page size and the page 103 : : * size was changed. If FALSE is returned then \a size could not be matched 104 : : * to a known page size. 105 : : * \see pageSize() 106 : : */ 107 : : bool setPageSize( const QString &size, Orientation orientation = Portrait ); 108 : : 109 : : /** 110 : : * Returns the size of the page. 111 : : * \see setPageSize() 112 : : */ 113 : : QgsLayoutSize pageSize() const; 114 : : 115 : : /** 116 : : * Returns the page orientation. 117 : : * \note There is no direct setter for page orientation - use setPageSize() instead. 118 : : */ 119 : : Orientation orientation() const; 120 : : 121 : : /** 122 : : * Sets the \a symbol to use for drawing the page background. 123 : : * 124 : : * Ownership of \a symbol is transferred to the page. 125 : : * 126 : : * \see pageStyleSymbol() 127 : : * 128 : : * \since QGIS 3.10 129 : : */ 130 : : void setPageStyleSymbol( QgsFillSymbol *symbol SIP_TRANSFER ); 131 : : 132 : : /** 133 : : * Returns the symbol to use for drawing the page background. 134 : : * 135 : : * \see setPageStyleSymbol() 136 : : * 137 : : * \since QGIS 3.10 138 : : */ 139 : : const QgsFillSymbol *pageStyleSymbol() const { return mPageStyleSymbol.get(); } 140 : : 141 : : /** 142 : : * Decodes a \a string representing a page orientation. If specified, \a ok 143 : : * will be set to TRUE if string could be successfully interpreted as a 144 : : * page orientation. 145 : : */ 146 : : static QgsLayoutItemPage::Orientation decodePageOrientation( const QString &string, bool *ok SIP_OUT = nullptr ); 147 : : 148 : : QRectF boundingRect() const override; 149 : : void attemptResize( const QgsLayoutSize &size, bool includesFrame = false ) override; 150 : : QgsAbstractLayoutUndoCommand *createCommand( const QString &text, int id, QUndoCommand *parent = nullptr ) override SIP_FACTORY; 151 : : ExportLayerBehavior exportLayerBehavior() const override; 152 : : bool accept( QgsStyleEntityVisitorInterface *visitor ) const override; 153 : : 154 : : public slots: 155 : : 156 : : void redraw() override; 157 : : 158 : : protected: 159 : : 160 : : void draw( QgsLayoutItemRenderContext &context ) override; 161 : : void drawFrame( QgsRenderContext &context ) override; 162 : : void drawBackground( QgsRenderContext &context ) override; 163 : : bool writePropertiesToElement( QDomElement &parentElement, QDomDocument &document, const QgsReadWriteContext &context ) const override; 164 : : bool readPropertiesFromElement( const QDomElement &itemElement, const QDomDocument &document, const QgsReadWriteContext &context ) override; 165 : : 166 : : private: 167 : : 168 : : double mMaximumShadowWidth = -1; 169 : : 170 : : std::unique_ptr< QgsLayoutItemPageGrid > mGrid; 171 : : mutable QRectF mBoundingRect; 172 : : 173 : : //! Symbol for drawing page 174 : : std::unique_ptr< QgsFillSymbol > mPageStyleSymbol; 175 : : 176 : : void createDefaultPageStyleSymbol(); 177 : : 178 : : friend class TestQgsLayoutPage; 179 : : }; 180 : : 181 : : #endif //QGSLAYOUTITEMPAGE_H