48#include "moc_qgslayout.cpp"
50using namespace Qt::StringLiterals;
60 , mGridSettings( this )
65 setBackgroundBrush( Qt::NoBrush );
66 mItemsModel = std::make_unique<QgsLayoutModel>(
this );
72 mUndoStack->blockCommands(
true );
74 deleteAndRemoveMultiFrames();
82 QList<QGraphicsItem *> itemList = items();
87 for ( QGraphicsItem *item : std::as_const( itemList ) )
104 QDomDocument currentDoc;
107 QDomElement elem =
writeXml( currentDoc, context );
108 currentDoc.appendChild( elem );
110 auto newLayout = std::make_unique< QgsLayout >( mProject );
112 newLayout->loadFromTemplate( currentDoc, context,
true, &ok );
118 return newLayout.release();
126 mPageCollection->addPage( page );
127 mUndoStack->stack()->clear();
132 deleteAndRemoveMultiFrames();
135 const QList<QGraphicsItem *> itemList = items();
136 for ( QGraphicsItem *item : itemList )
140 if ( cItem && !pItem )
142 removeLayoutItemPrivate( cItem );
145 mItemsModel->clear();
147 mPageCollection->clear();
148 mUndoStack->stack()->clear();
158 return mItemsModel.get();
163 QList<QgsLayoutItem *> layoutItemList;
165 const QList<QGraphicsItem *> graphicsItemList = selectedItems();
166 for ( QGraphicsItem *item : graphicsItemList )
169 if ( layoutItem && ( includeLockedItems || !layoutItem->
isLocked() ) )
171 layoutItemList.push_back( layoutItem );
175 return layoutItemList;
194 const QList<QGraphicsItem *> selectedItemList = selectedItems();
195 for ( QGraphicsItem *item : selectedItemList )
199 layoutItem->setSelected(
false );
208 bool result = mItemsModel->reorderItemUp( item );
209 if ( result && !deferUpdate )
221 bool result = mItemsModel->reorderItemDown( item );
222 if ( result && !deferUpdate )
234 bool result = mItemsModel->reorderItemToTop( item );
235 if ( result && !deferUpdate )
247 bool result = mItemsModel->reorderItemToBottom( item );
248 if ( result && !deferUpdate )
259 QList<QgsLayoutItem *> itemList;
263 if ( item->uuid() == uuid )
265 else if ( includeTemplateUuids && item->mTemplateUuid == uuid )
274 QList<QgsLayoutItem *> itemList;
278 if ( item->mTemplateUuid == uuid )
287 const QList<QGraphicsItem *> itemList = items();
288 for ( QGraphicsItem *item : itemList )
291 if ( layoutItem && layoutItem->
id() ==
id )
303 if ( mf->uuid() == uuid )
305 else if ( includeTemplateUuids && mf->mTemplateUuid == uuid )
314 return layoutItemAt( position,
nullptr, ignoreLocked, searchTolerance );
320 QList<QGraphicsItem *> itemList;
321 if ( searchTolerance == 0 )
323 itemList = items( position, Qt::IntersectsItemShape, Qt::DescendingOrder );
327 itemList = items( QRectF( position.x() - searchTolerance, position.y() - searchTolerance, 2 * searchTolerance, 2 * searchTolerance ), Qt::IntersectsItemShape, Qt::DescendingOrder );
330 bool foundBelowItem =
false;
331 for ( QGraphicsItem *graphicsItem : std::as_const( itemList ) )
335 if ( layoutItem && !paperItem )
339 if ( ( !belowItem || foundBelowItem ) && ( !ignoreLocked || !layoutItem->
isLocked() ) )
344 return layoutItemAt( position, layoutItem, ignoreLocked, searchTolerance );
351 if ( layoutItem == belowItem )
354 foundBelowItem =
true;
364 return mRenderContext->measurementConverter().convert( measurement, mUnits ).length();
369 return mRenderContext->measurementConverter().convert( size, mUnits ).toQSizeF();
374 return mRenderContext->measurementConverter().convert( point, mUnits ).toQPointF();
379 return mRenderContext->measurementConverter().convert(
QgsLayoutMeasurement( length, mUnits ), unit );
384 return mRenderContext->measurementConverter().convert(
QgsLayoutSize( size.width(), size.height(), mUnits ), unit );
389 return mRenderContext->measurementConverter().convert(
QgsLayoutPoint( point.x(), point.y(), mUnits ), unit );
394 return *mRenderContext;
399 return *mRenderContext;
404 return *mReportContext;
409 return *mReportContext;
414 mGridSettings.loadFromSettings();
415 mPageCollection->redraw();
420 return mPageCollection->
guides();
425 return mPageCollection->
guides();
433 if ( mReportContext->layer() )
442 mCustomProperties.setValue( key, value );
444 if ( key.startsWith(
"variable"_L1 ) )
450 return mCustomProperties.value( key, defaultValue );
455 mCustomProperties.remove( key );
460 return mCustomProperties.keys();
470 QList< QgsLayoutItemMap * > maps;
473 double largestMapArea = 0;
476 double area = map->rect().width() * map->rect().height();
477 if ( area > largestMapArea )
479 largestMapArea = area;
488 mWorldFileMapId = map ? map->
uuid() : QString();
489 mProject->setDirty(
true );
494 return mPageCollection.get();
499 return mPageCollection.get();
508 const auto constItems = items();
509 for (
const QGraphicsItem *item : constItems )
516 if ( !isPage || !ignorePages )
524 itemBounds = layoutItem->mapToScene( layoutItem->rect() ).boundingRect();
527 itemBounds = item->sceneBoundingRect();
529 if ( bounds.isValid() )
530 bounds = bounds.united( itemBounds );
536 if ( bounds.isValid() && margin > 0.0 )
539 double maxWidth = mPageCollection->maximumPageWidth();
540 bounds.adjust( -maxWidth * margin, -maxWidth * margin, maxWidth * margin, maxWidth * margin );
552 const QList<QGraphicsItem *> itemList = items();
553 for ( QGraphicsItem *item : itemList )
558 if ( visibleOnly && !layoutItem->isVisible() )
562 if ( bounds.isValid() )
563 bounds = bounds.united( item->sceneBoundingRect() );
565 bounds = item->sceneBoundingRect();
574 addLayoutItemPrivate( item );
578 undoText = tr(
"Create %1" ).arg( metadata->visibleName() );
582 undoText = tr(
"Create Item" );
584 if ( !mUndoStack->isBlocked() )
590 std::unique_ptr< QgsLayoutItemDeleteUndoCommand > deleteCommand;
591 if ( !mUndoStack->isBlocked() )
593 mUndoStack->beginMacro( tr(
"Delete Items" ) );
594 deleteCommand = std::make_unique<QgsLayoutItemDeleteUndoCommand>( item, tr(
"Delete Item" ) );
596 removeLayoutItemPrivate( item );
599 mUndoStack->push( deleteCommand.release() );
600 mUndoStack->endMacro();
609 if ( !mMultiFrames.contains( multiFrame ) )
610 mMultiFrames << multiFrame;
615 mMultiFrames.removeAll( multiFrame );
625 QFile templateFile( path );
626 if ( !templateFile.open( QIODevice::WriteOnly | QIODevice::Truncate ) )
631 QDomDocument saveDocument;
632 QDomElement elem =
writeXml( saveDocument, context );
633 saveDocument.appendChild( elem );
635 if ( templateFile.write( saveDocument.toByteArray() ) == -1 )
646 QList< QgsLayoutItem * > result;
666 QDomNodeList itemsNodes = doc.elementsByTagName( u
"LayoutItem"_s );
667 for (
int i = 0; i < itemsNodes.count(); ++i )
669 QDomNode itemNode = itemsNodes.at( i );
670 if ( itemNode.isElement() )
672 itemNode.toElement().removeAttribute( u
"uuid"_s );
675 QDomNodeList multiFrameNodes = doc.elementsByTagName( u
"LayoutMultiFrame"_s );
676 for (
int i = 0; i < multiFrameNodes.count(); ++i )
678 QDomNode multiFrameNode = multiFrameNodes.at( i );
679 if ( multiFrameNode.isElement() )
681 multiFrameNode.toElement().removeAttribute( u
"uuid"_s );
682 QDomNodeList frameNodes = multiFrameNode.toElement().elementsByTagName( u
"childFrame"_s );
683 QDomNode itemNode = frameNodes.at( i );
684 if ( itemNode.isElement() )
686 itemNode.toElement().removeAttribute( u
"uuid"_s );
694 QDomElement layoutElem = doc.documentElement();
695 if ( layoutElem.isNull() )
700 bool loadOk =
readXml( layoutElem, doc, context );
720 return mUndoStack.get();
725 return mUndoStack.get();
738 void saveState( QDomDocument &stateDoc )
const override
741 QDomElement documentElement = stateDoc.createElement( u
"UndoState"_s );
742 mLayout->writeXmlLayoutSettings( documentElement, stateDoc, QgsReadWriteContext() );
743 stateDoc.appendChild( documentElement );
753 mLayout->readXmlLayoutSettings( stateDoc.documentElement(), stateDoc, QgsReadWriteContext() );
754 mLayout->project()->setDirty(
true );
758 QgsLayout *mLayout =
nullptr;
769 if ( items.size() < 2 )
775 mUndoStack->beginMacro( tr(
"Group Items" ) );
776 auto itemGroup = std::make_unique<QgsLayoutItemGroup>(
this );
779 itemGroup->addItem( item );
784 auto c = std::make_unique<QgsLayoutItemGroupUndoCommand>( QgsLayoutItemGroupUndoCommand::Grouped, returnGroup,
this, tr(
"Group Items" ) );
785 mUndoStack->push(
c.release() );
786 mProject->setDirty(
true );
788 mUndoStack->endMacro();
796 QList<QgsLayoutItem *> ungroupedItems;
799 return ungroupedItems;
802 mUndoStack->beginMacro( tr(
"Ungroup Items" ) );
805 auto c = std::make_unique<QgsLayoutItemGroupUndoCommand>( QgsLayoutItemGroupUndoCommand::Ungrouped, group,
this, tr(
"Ungroup Items" ) );
806 mUndoStack->push(
c.release() );
808 mProject->setDirty(
true );
810 ungroupedItems = group->
items();
814 mUndoStack->endMacro();
816 return ungroupedItems;
821 const QList< QGraphicsItem * > constItems = items();
822 for (
const QGraphicsItem *item : constItems )
828 if ( !layoutItem->
accept( visitor ) )
836 mUndoStack->blockCommands(
true );
837 mPageCollection->beginPageSizeChange();
839 mPageCollection->reflow();
840 mPageCollection->endPageSizeChange();
841 mUndoStack->blockCommands(
false );
845void QgsLayout::writeXmlLayoutSettings( QDomElement &element, QDomDocument &document,
const QgsReadWriteContext & )
const
847 mCustomProperties.
writeXml( element, document );
849 element.setAttribute( u
"worldFileMap"_s, mWorldFileMapId );
850 element.setAttribute( u
"printResolution"_s, mRenderContext->
dpi() );
855 QDomElement element = document.createElement( u
"Layout"_s );
858 save( &mGridSettings );
859 save( mPageCollection.get() );
862 const QList<QGraphicsItem *> itemList = items();
863 for (
const QGraphicsItem *graphicsItem : itemList )
870 item->writeXml( element, document, context );
877 if ( mf->frameCount() > 0 )
878 mf->writeXml( element, document, context );
881 writeXmlLayoutSettings( element, document, context );
885bool QgsLayout::readXmlLayoutSettings(
const QDomElement &layoutElement,
const QDomDocument &,
const QgsReadWriteContext & )
887 mCustomProperties.
readXml( layoutElement );
889 mWorldFileMapId = layoutElement.attribute( u
"worldFileMap"_s );
890 mRenderContext->
setDpi( layoutElement.attribute( u
"printResolution"_s, u
"300"_s ).toDouble() );
900 mItemsModel->rebuildZList();
905void QgsLayout::removeLayoutItemPrivate(
QgsLayoutItem *item )
907 mItemsModel->setItemRemoved( item );
914 emit itemRemoved( item );
920void QgsLayout::deleteAndRemoveMultiFrames()
922 qDeleteAll( mMultiFrames );
923 mMultiFrames.clear();
926QPointF QgsLayout::minPointFromXml(
const QDomElement &elem )
const
928 double minX = std::numeric_limits<double>::max();
929 double minY = std::numeric_limits<double>::max();
930 const QDomNodeList itemList = elem.elementsByTagName( u
"LayoutItem"_s );
932 for (
int i = 0; i < itemList.size(); ++i )
934 const QDomElement currentItemElem = itemList.at( i ).toElement();
939 minX = std::min( minX, layoutPoint.x() );
940 minY = std::min( minY, layoutPoint.y() );
943 return found ? QPointF( minX, minY ) : QPointF( 0, 0 );
948 int counter = mItemsModel->zOrderListSize();
949 const QList<QgsLayoutItem *> zOrderList = mItemsModel->zOrderList();
951 if ( addUndoCommands )
953 mUndoStack->beginMacro( tr(
"Change Item Stacking" ) );
959 if ( addUndoCommands )
961 mUndoStack->beginCommand( currentItem, QString() );
963 currentItem->setZValue( counter );
964 if ( addUndoCommands )
966 mUndoStack->endCommand();
971 if ( addUndoCommands )
973 mUndoStack->endMacro();
979 if ( layoutElement.nodeName() !=
"Layout"_L1 )
986 std::unique_ptr< QgsScopedRuntimeProfile > profile;
988 profile = std::make_unique< QgsScopedRuntimeProfile >( tr(
"Read layout settings" ), u
"projectload"_s );
990 blockSignals(
true );
991 readXmlLayoutSettings( layoutElement, document, context );
992 blockSignals(
false );
995 profile->switchTask( tr(
"Load pages" ) );
996 restore( mPageCollection.get() );
998 profile->switchTask( tr(
"Load snapping settings" ) );
999 restore( &mSnapper );
1001 profile->switchTask( tr(
"Load grid settings" ) );
1002 restore( &mGridSettings );
1005 profile->switchTask( tr(
"Restore items" ) );
1015 QList< QgsLayoutItem * > newItems;
1016 QList< QgsLayoutMultiFrame * > newMultiFrames;
1021 int zOrderOffset = mItemsModel->zOrderListSize();
1023 QPointF pasteShiftPos;
1024 int pageNumber = -1;
1030 QPointF minItemPos = minPointFromXml( parentElement );
1033 pasteShiftPos = *position - minItemPos;
1036 pageNumber = mPageCollection->pageNumberForPoint( *position );
1040 std::unique_ptr< QgsScopedRuntimeProfile > profile;
1042 profile = std::make_unique< QgsScopedRuntimeProfile >( tr(
"Read items" ), u
"projectload"_s );
1047 const QDomNodeList multiFrameList = parentElement.elementsByTagName( u
"LayoutMultiFrame"_s );
1048 for (
int i = 0; i < multiFrameList.size(); ++i )
1050 const QDomElement multiFrameElem = multiFrameList.at( i ).toElement();
1051 const int itemType = multiFrameElem.attribute( u
"type"_s ).toInt();
1057 profile->switchTask( tr(
"Load %1" ).arg( metadata->visibleName() ) );
1067 mf->readXml( multiFrameElem, document, context );
1070 mf->setCreateUndoCommands(
true );
1085 newMultiFrames << m;
1088 const QDomNodeList layoutItemList = parentElement.childNodes();
1089 for (
int i = 0; i < layoutItemList.size(); ++i )
1091 const QDomElement currentItemElem = layoutItemList.at( i ).toElement();
1092 if ( currentItemElem.nodeName() !=
"LayoutItem"_L1 )
1095 const int itemType = currentItemElem.attribute( u
"type"_s ).toInt();
1101 profile->switchTask( tr(
"Load %1" ).arg( metadata->visibleName() ) );
1112 item->readXml( currentItemElem, document, context );
1118 item->attemptMove( posOnPage,
true,
false, pageNumber );
1122 item->attemptMoveBy( pasteShiftPos.x(), pasteShiftPos.y() );
1138 label->setTextFormat( textFormat );
1142 if ( item->isGroupMember() )
1146 QList<QgsLayoutItem *>
groupItems = group->items();
1148 group->removeItems();
1151 group->addItem( groupItem );
1153 group->addItem( html->
frame( 0 ) );
1156 newMultiFrames << html;
1164 layoutItem->setZValue( layoutItem->zValue() + zOrderOffset );
1165 newItems << layoutItem;
1172 std::unique_ptr< QgsScopedRuntimeProfile > itemProfile;
1175 profile->switchTask( tr(
"Finalize restore" ) );
1180 itemProfile = std::make_unique< QgsScopedRuntimeProfile >( item->
displayName(), u
"projectload"_s );
1183 itemProfile.reset();
1188 itemProfile = std::make_unique< QgsScopedRuntimeProfile >( mf->displayName(), u
"projectload"_s );
1189 mf->finalizeRestoreFromXml();
1191 itemProfile.reset();
1196 item->mTemplateUuid.clear();
1200 mf->mTemplateUuid.clear();
1208 profile->switchTask( tr(
"Update model" ) );
1209 mItemsModel->rebuildZList();
1219void QgsLayout::itemBackgroundTaskCountChanged(
int count )
1221 QgsLayoutItem *item = qobject_cast<QgsLayoutItem *>( sender() );
1226 mBackgroundTaskCount.insert( item, count );
1228 mBackgroundTaskCount.remove( item );
1232 for (
auto it = mBackgroundTaskCount.constBegin(); it != mBackgroundTaskCount.constEnd(); ++it )
1234 total += it.value();
LayoutUnit
Layout measurement units.
@ Millimeters
Millimeters.
@ Percentage
Percentage of another measurement (e.g., canvas size, feature size).
Base class for commands to undo/redo layout and layout object changes.
virtual void saveState(QDomDocument &stateDoc) const =0
Saves the state of the object to the specified stateDoc.
virtual void restoreState(QDomDocument &stateDoc)=0
Restores the state of the object from the specified stateDoc.
static QgsLayoutItemRegistry * layoutItemRegistry()
Returns the application's layout item registry, used for layout item types.
static QgsRuntimeProfiler * profiler()
Returns the application runtime profiler.
static bool isCompositionTemplate(const QDomDocument &document)
Check if the given document is a composition template.
static QDomDocument convertCompositionTemplate(const QDomDocument &document, QgsProject *project)
Convert a composition template document to a layout template.
static QgsExpressionContextScope * layoutScope(const QgsLayout *layout)
Creates a new scope which contains variables and functions relating to a QgsLayout layout.
static QgsExpressionContextScope * projectScope(const QgsProject *project)
Creates a new scope which contains variables and functions relating to a QGIS project.
static QgsExpressionContextScope * layerScope(const QgsMapLayer *layer)
Creates a new scope which contains variables and functions relating to a QgsMapLayer.
static QgsExpressionContextScope * globalScope()
Creates a new scope which contains variables and functions relating to the global QGIS context.
Expression contexts are used to encapsulate the parameters around which a QgsExpression should be eva...
void appendScope(QgsExpressionContextScope *scope)
Appends a scope to the end of the context.
Stores and manages the snap guides used by a layout.
QList< QgsLayoutGuide * > guides()
Returns a list of all guides contained in the collection.
A container for grouping several QgsLayoutItems.
void removeItems()
Removes all items from the group (but does not delete them).
QList< QgsLayoutItem * > items() const
Returns a list of items contained by the group.
static QgsLayoutItemHtml * createFromLabel(QgsLayoutItemLabel *label)
Returns a new QgsLayoutItemHtml matching the content and rendering of a given label.
A layout item subclass for text labels.
@ ModeHtml
Label displays rendered HTML content.
Layout graphical items for displaying a map.
Item representing the paper in a layout.
void setPageSize(const QgsLayoutSize &size)
Sets the size of the page.
Base class for graphical items within a QgsLayout.
virtual void cleanup()
Called just before a batch of items are deleted, allowing them to run cleanup tasks.
virtual bool accept(QgsStyleEntityVisitorInterface *visitor) const
Accepts the specified style entity visitor, causing it to visit all style entities associated with th...
QgsLayoutItemGroup * parentGroup() const
Returns the item's parent group, if the item is part of a QgsLayoutItemGroup group.
virtual void setSelected(bool selected)
Sets whether the item should be selected.
bool isLocked() const
Returns true if the item is locked, and cannot be interacted with using the mouse.
int page() const
Returns the page the item is currently on, with the first page returning 0.
virtual void finalizeRestoreFromXml()
Called after all pending items have been restored from XML.
int type() const override
Returns a unique graphics item type identifier.
virtual QString displayName() const
Gets item display name.
virtual QString uuid() const
Returns the item identification string.
QString id() const
Returns the item's ID name.
void backgroundTaskCountChanged(int count)
Emitted whenever the number of background tasks an item is executing changes.
Provides a method of storing measurements for use in QGIS layouts using a variety of different measur...
QgsLayoutFrame * frame(int index) const
Returns the child frame at a specified index from the multiframe.
A manager for a collection of pages in a layout.
Provides a method of storing points, consisting of an x and y coordinate, for use in QGIS layouts.
static QgsLayoutPoint decodePoint(const QString &string)
Decodes a point from a string.
Stores information relating to the current rendering settings for a layout.
void setDpi(double dpi)
Sets the dpi for outputting the layout.
double dpi() const
Returns the dpi for outputting the layout.
Stores information relating to the current reporting context for a layout.
An interface for layout objects which can be stored and read from DOM elements.
Provides a method of storing sizes, consisting of a width and height, for use in QGIS layouts.
Manages snapping grids and preset snap lines in a layout, and handles snapping points to the nearest ...
An undo stack for QgsLayouts.
Base class for layouts, which can contain items such as maps, labels, scalebars, etc.
QgsLayoutItem * itemById(const QString &id) const
Returns a layout item given its id.
void removeMultiFrame(QgsLayoutMultiFrame *multiFrame)
Removes a multiFrame from the layout (but does not delete it).
void setCustomProperty(const QString &key, const QVariant &value)
Set a custom property for the layout.
void updateBounds()
Updates the scene bounds of the layout.
bool saveAsTemplate(const QString &path, const QgsReadWriteContext &context) const
Saves the layout as a template at the given file path.
QgsAbstractLayoutUndoCommand * createCommand(const QString &text, int id=0, QUndoCommand *parent=nullptr) override
Creates a new layout undo command with the specified text and parent.
void initializeDefaults()
Initializes an empty layout, e.g.
QgsLayoutRenderContext & renderContext()
Returns a reference to the layout's render context, which stores information relating to the current ...
void removeCustomProperty(const QString &key)
Remove a custom property from the layout.
QgsLayoutModel * itemsModel()
Returns the items model attached to the layout.
QgsLayoutPageCollection * pageCollection()
Returns a pointer to the layout's page collection, which stores and manages page items in the layout.
void variablesChanged()
Emitted whenever the expression variables stored in the layout have been changed.
void layoutItems(QList< T * > &itemList) const
Returns a list of layout items of a specific type.
QgsLayoutItem * itemByUuid(const QString &uuid, bool includeTemplateUuids=false) const
Returns the layout item with matching uuid unique identifier, or nullptr if a matching item could not...
void addMultiFrame(QgsLayoutMultiFrame *multiFrame)
Adds a multiFrame to the layout.
void setUnits(Qgis::LayoutUnit units)
Sets the native measurement units for the layout.
QgsLayoutGuideCollection & guides()
Returns a reference to the layout's guide collection, which manages page snap guides.
QList< QgsLayoutItem * > ungroupItems(QgsLayoutItemGroup *group)
Ungroups items by removing them from an item group and removing the group from the layout.
bool moveItemToTop(QgsLayoutItem *item, bool deferUpdate=false)
Raises an item up to the top of the z-order.
QgsLayoutItem * layoutItemAt(QPointF position, bool ignoreLocked=false, double searchTolerance=0) const
Returns the topmost layout item at a specified position.
QgsLayoutItemMap * referenceMap() const
Returns the map item which will be used to generate corresponding world files when the layout is expo...
void changed()
Emitted when properties of the layout change.
friend class QgsLayoutMultiFrame
bool moveItemToBottom(QgsLayoutItem *item, bool deferUpdate=false)
Lowers an item down to the bottom of the z-order.
QgsLayoutItemGroup * groupItems(const QList< QgsLayoutItem * > &items)
Creates a new group from a list of layout items and adds the group to the layout.
QList< QgsLayoutItem * > addItemsFromXml(const QDomElement &parentElement, const QDomDocument &document, const QgsReadWriteContext &context, QPointF *position=nullptr, bool pasteInPlace=false)
Add items from an XML representation to the layout.
friend class QgsLayoutItemAddItemCommand
void reloadSettings()
Refreshes the layout when global layout related options change.
double convertToLayoutUnits(QgsLayoutMeasurement measurement) const
Converts a measurement into the layout's native units.
virtual bool readXml(const QDomElement &layoutElement, const QDomDocument &document, const QgsReadWriteContext &context)
Sets the collection's state from a DOM element.
QStringList customProperties() const
Returns list of keys stored in custom properties for the layout.
QgsLayout * clone() const
Creates a clone of the layout.
void clear()
Clears the layout.
QgsLayoutItem * itemByTemplateUuid(const QString &uuid) const
Returns the layout item with matching template uuid unique identifier, or nullptr if a matching item ...
friend class QgsLayoutUndoCommand
bool lowerItem(QgsLayoutItem *item, bool deferUpdate=false)
Lowers an item down the z-order.
QgsLayoutMeasurement convertFromLayoutUnits(double length, Qgis::LayoutUnit unit) const
Converts a length measurement from the layout's native units to a specified target unit.
friend class QgsLayoutModel
QList< QgsLayoutItem * > loadFromTemplate(const QDomDocument &document, const QgsReadWriteContext &context, bool clearExisting=true, bool *ok=nullptr)
Load a layout template document.
static const QgsSettingsEntryStringList * settingsSearchPathForTemplates
Settings entry search path for templates.
bool raiseItem(QgsLayoutItem *item, bool deferUpdate=false)
Raises an item up the z-order.
QList< QgsLayoutItem * > selectedLayoutItems(bool includeLockedItems=true)
Returns list of selected layout items.
QVariant customProperty(const QString &key, const QVariant &defaultValue=QVariant()) const
Read a custom property from the layout.
void selectedItemChanged(QgsLayoutItem *selected)
Emitted whenever the selected item changes.
void deselectAll()
Clears any selected items in the layout.
void setSelectedItem(QgsLayoutItem *item)
Clears any selected items and sets item as the current selection.
QRectF layoutBounds(bool ignorePages=false, double margin=0.0) const
Calculates the bounds of all non-gui items in the layout.
void refresh()
Forces the layout, and all items contained within it, to refresh.
void backgroundTaskCountChanged(int total)
Emitted whenever the total number of background tasks running in items from the layout changes.
void removeLayoutItem(QgsLayoutItem *item)
Removes an item from the layout.
void refreshed()
Emitted when the layout has been refreshed and items should also be refreshed and updated.
void updateZValues(bool addUndoCommands=true)
Resets the z-values of items based on their position in the internal z order list.
QgsExpressionContext createExpressionContext() const override
Creates an expression context relating to the layout's current state.
QgsLayoutReportContext & reportContext()
Returns a reference to the layout's report context, which stores information relating to the current ...
virtual QDomElement writeXml(QDomDocument &document, const QgsReadWriteContext &context) const
Returns the layout's state encapsulated in a DOM element.
void setReferenceMap(QgsLayoutItemMap *map)
Sets the map item which will be used to generate corresponding world files when the layout is exporte...
QList< QgsLayoutMultiFrame * > multiFrames() const
Returns a list of multi frames contained in the layout.
void addLayoutItem(QgsLayoutItem *item)
Adds an item to the layout.
QgsLayoutMultiFrame * multiFrameByUuid(const QString &uuid, bool includeTemplateUuids=false) const
Returns the layout multiframe with matching uuid unique identifier, or nullptr if a matching multifra...
bool accept(QgsStyleEntityVisitorInterface *visitor) const
Accepts the specified style entity visitor, causing it to visit all style entities associated with th...
QgsProject * project() const
The project associated with the layout.
void itemAdded(QgsLayoutItem *item)
Emitted when an item was added to the layout.
QRectF pageItemBounds(int page, bool visibleOnly=false) const
Returns the bounding box of the items contained on a specified page.
QgsLayout(QgsProject *project)
Construct a new layout linked to the specified project.
QgsLayoutUndoStack * undoStack()
Returns a pointer to the layout's undo stack, which manages undo/redo states for the layout and it's ...
void writeXml(QDomNode &parentNode, QDomDocument &doc) const
Writes the store contents to an XML node.
void readXml(const QDomNode &parentNode, const QString &keyStartsWith=QString())
Read store contents from an XML node.
Describes the version of a project.
Encapsulates a QGIS project, including sets of map layers and their styles, layouts,...
A container for the context for various read/write operations on objects.
A string list settings entry.
static QgsSettingsTreeNode * sTreeLayout
An interface for classes which can visit style entity (e.g.
Container for all settings relating to text rendering.
double lineHeight() const
Returns the line height for text.
Qgis::RenderUnit lineHeightUnit() const
Returns the units for the line height for text.
void setLineHeight(double height)
Sets the line height for text.
static Q_INVOKABLE Qgis::LayoutUnit decodeLayoutUnit(const QString &string, bool *ok=nullptr)
Decodes a layout unit from a string.
static Q_INVOKABLE QString encodeUnit(Qgis::DistanceUnit unit)
Encodes a distance unit to a string.
As part of the API refactoring and improvements which landed in the Processing API was substantially reworked from the x version This was done in order to allow much of the underlying Processing framework to be ported into c
QgsSignalBlocker< Object > whileBlocking(Object *object)
Temporarily blocks signals from a QObject while calling a single method from the object.