23 , mMultiFrame( multiFrame )
24 , mMultiFrameUuid( multiFrame ? multiFrame->uuid() : QString() )
59 int frameIndex = mMultiFrame->
frameIndex( const_cast< QgsLayoutFrame * >(
this ) );
70 int frameIndex = mMultiFrame->
frameIndex( const_cast< QgsLayoutFrame * >(
this ) );
83 return mMultiFrame->
icon();
95 if ( hideBackgroundIfEmpty == mHideBackgroundIfEmpty )
111 double multiFrameHeight = mMultiFrame->
totalSize().height();
112 if ( multiFrameHeight <= mSection.top() )
149 return tr(
"<Frame>" );
155 mMultiFrame->handleFrameRemoval(
this );
165 int frameIndex = mMultiFrame->
frameIndex(
this );
166 Q_ASSERT_X( frameIndex >= 0,
"QgsLayoutFrame::draw",
"Invalid frame index for frame" );
167 mMultiFrame->
render( context, mSection, frameIndex );
173 if ( !
isEmpty() || !mHideBackgroundIfEmpty )
181 if ( !
isEmpty() || !mHideBackgroundIfEmpty )
189 parentElement.setAttribute( QStringLiteral(
"multiFrame" ), mMultiFrameUuid );
190 parentElement.setAttribute( QStringLiteral(
"multiFrameTemplateUuid" ), mMultiFrameUuid );
191 parentElement.setAttribute( QStringLiteral(
"sectionX" ), QString::number( mSection.x() ) );
192 parentElement.setAttribute( QStringLiteral(
"sectionY" ), QString::number( mSection.y() ) );
193 parentElement.setAttribute( QStringLiteral(
"sectionWidth" ), QString::number( mSection.width() ) );
194 parentElement.setAttribute( QStringLiteral(
"sectionHeight" ), QString::number( mSection.height() ) );
195 parentElement.setAttribute( QStringLiteral(
"hidePageIfEmpty" ), mHidePageIfEmpty );
196 parentElement.setAttribute( QStringLiteral(
"hideBackgroundIfEmpty" ), mHideBackgroundIfEmpty );
202 double x = itemElem.attribute( QStringLiteral(
"sectionX" ) ).toDouble();
203 double y = itemElem.attribute( QStringLiteral(
"sectionY" ) ).toDouble();
204 double width = itemElem.attribute( QStringLiteral(
"sectionWidth" ) ).toDouble();
205 double height = itemElem.attribute( QStringLiteral(
"sectionHeight" ) ).toDouble();
206 mSection = QRectF( x, y, width, height );
207 mHidePageIfEmpty = itemElem.attribute( QStringLiteral(
"hidePageIfEmpty" ), QStringLiteral(
"0" ) ).toInt();
208 mHideBackgroundIfEmpty = itemElem.attribute( QStringLiteral(
"hideBackgroundIfEmpty" ), QStringLiteral(
"0" ) ).toInt();
210 mMultiFrameUuid = itemElem.attribute( QStringLiteral(
"multiFrame" ) );
211 if ( mMultiFrameUuid.isEmpty( ) )
213 mMultiFrameUuid = itemElem.attribute( QStringLiteral(
"multiFrameTemplateUuid" ) );
215 mMultiFrame =
mLayout->multiFrameByUuid( mMultiFrameUuid );
The class is used as a container of context for various read/write operations on other objects...
void draw(QgsLayoutItemRenderContext &context) override
Draws the item's contents using the specified item render context.
QgsExpressionContext createExpressionContext() const override
This method needs to be reimplemented in all classes which implement this interface and return an exp...
virtual QSizeF totalSize() const =0
Returns the total size of the multiframe's content, in layout units.
QgsExpressionContext createExpressionContext() const override
Creates an expression context relating to the objects' current state.
virtual QIcon icon() const
Returns the item's icon.
virtual QSizeF fixedFrameSize(const int frameIndex=-1) const
Returns the fixed size for a frame, if desired.
Base class for graphical items within a QgsLayout.
QString displayName() const override
Get item display name.
int type() const override
int frameIndex(QgsLayoutFrame *frame) const
Returns the index of a frame within the multiframe.
QgsExpressionContext createExpressionContext() const override
This method needs to be reimplemented in all classes which implement this interface and return an exp...
bool readPropertiesFromElement(const QDomElement &itemElement, const QDomDocument &document, const QgsReadWriteContext &context) override
Sets item state from a DOM element.
void cleanup() override
Called just before a batch of items are deleted, allowing them to run cleanup tasks.
Abstract base class for layout items with the ability to distribute the content to several frames (Qg...
static QgsExpressionContextScope * layoutItemScope(const QgsLayoutItem *item)
Creates a new scope which contains variables and functions relating to a QgsLayoutItem.
void refreshItemSize()
Refreshes an item's size by rechecking it against any possible item fixed or minimum sizes...
virtual void drawFrame(QgsRenderContext &context)
Draws the frame around the item.
void contentsChanged()
Emitted when the contents of the multi frame have changed and the frames must be redrawn.
const QgsLayout * layout() const
Returns the layout the object is attached to.
virtual void drawBackground(QgsRenderContext &context)
Draws the background for the item.
void drawBackground(QgsRenderContext &context) override
Draws the background for the item.
QgsLayoutSize fixedSize() const override
Returns the fixed size of the item, if applicable, or an empty size if item can be freely resized...
Expression contexts are used to encapsulate the parameters around which a QgsExpression should be eva...
virtual void cleanup()
Called just before a batch of items are deleted, allowing them to run cleanup tasks.
QPointer< QgsLayout > mLayout
QgsLayoutMultiFrame * multiFrame() const
Returns the parent multiframe for the frame.
QgsLayoutSize minimumSize() const override
Returns the minimum allowed size of the item, if applicable, or an empty size if item can be freely r...
QString id() const
Returns the item's ID name.
QIcon icon() const override
Returns the item's icon.
void setHidePageIfEmpty(const bool hidePageIfEmpty)
Sets whether the page should be hidden (ie, not included in layout exports) if this frame is empty...
void setHideBackgroundIfEmpty(const bool hideBackgroundIfEmpty)
Sets whether the background and frame stroke should be hidden if this frame is empty.
Base class for layouts, which can contain items such as maps, labels, scalebars, etc.
Frame item, part of a QgsLayoutMultiFrame object.
void setBackgroundEnabled(bool drawBackground)
Sets whether this item has a background drawn under it or not.
Contains settings and helpers relating to a render of a QgsLayoutItem.
QgsLayoutFrame(QgsLayout *layout, QgsLayoutMultiFrame *multiFrame)
Constructor for QgsLayoutFrame, with the specified parent layout and belonging to a multiFrame...
virtual QString displayName() const
Returns the multiframe display name.
Contains information about the context of a rendering operation.
virtual void render(QgsLayoutItemRenderContext &context, const QRectF &renderExtent, int frameIndex)=0
Renders a portion of the multiframe's content into a render context.
virtual QSizeF minFrameSize(const int frameIndex=-1) const
Returns the minimum size for a frames, if desired.
void appendScope(QgsExpressionContextScope *scope)
Appends a scope to the end of the context.
bool hidePageIfEmpty() const
Returns whether the page should be hidden (ie, not included in layout exports) if this frame is empty...
bool hideBackgroundIfEmpty() const
Returns whether the background and frame stroke should be hidden if this frame is empty...
This class provides a method of storing sizes, consisting of a width and height, for use in QGIS layo...
void drawFrame(QgsRenderContext &context) override
Draws the frame around the item.
bool isEmpty() const
Returns whether the frame is empty.
bool writePropertiesToElement(QDomElement &parentElement, QDomDocument &document, const QgsReadWriteContext &context) const override
Stores item state within an XML DOM element.
Base class for frame items, which form a layout multiframe item.
static QgsLayoutFrame * create(QgsLayout *layout)
Creates a new QgsLayoutFrame belonging to the specified layout.