QGIS API Documentation
3.16.0-Hannover (43b64b13f3)
|
Go to the documentation of this file.
31 createDefaultPageStyleSymbol();
36 const auto constMPages = mPages;
39 mLayout->removeItem(
page );
60 return mPageStyleSymbol.get();
65 mPreviousItemPositions.clear();
66 QList< QgsLayoutItem * > items;
74 mPreviousItemPositions.insert( item->uuid(), qMakePair( item->page(), item->pagePositionWithUnits() ) );
80 for (
auto it = mPreviousItemPositions.constBegin(); it != mPreviousItemPositions.constEnd(); ++it )
84 if ( !mBlockUndoCommands )
85 item->beginCommand( QString() );
86 item->attemptMove( it.value().second,
true,
false, it.value().first );
87 if ( !mBlockUndoCommands )
91 mPreviousItemPositions.clear();
98 const auto constMPages = mPages;
127 double area = pageSize.width() * pageSize.height();
128 if ( area > maxArea )
143 if ( !size.isValid() )
148 || !
qgsDoubleNear( pageSize.height(), size.height(), 0.01 ) )
158 double startNextPageY = 0;
159 const auto constMPages = mPages;
163 if ( startNextPageY > point.y() )
175 if ( mPages.empty() )
179 double startNextPageY = 0;
180 const auto constMPages = mPages;
184 if ( startNextPageY >= point.y() )
189 if ( startNextPageY >= point.y() )
195 double lastPageHeight = mPages.last()->rect().height();
196 while ( startNextPageY < point.y() )
199 if ( startNextPageY >= point.y() )
209 const QList< QGraphicsItem * > items = mLayout->items( point );
210 for ( QGraphicsItem *item : items )
225 if (
page > 0 &&
page < mPages.count() )
227 layoutUnitsPos.ry() += mPages.at(
page )->pos().y();
229 return layoutUnitsPos;
235 if (
page > 0 &&
page < mPages.count() )
245 double startCurrentPageY = 0;
246 double startNextPageY = 0;
248 const auto constMPages = mPages;
251 startCurrentPageY = startNextPageY;
253 if ( startNextPageY > position.y() )
268 y = position.y() - startCurrentPageY;
270 return QPointF( position.x(), y );
287 if ( bounds.isEmpty() )
290 if ( !mBlockUndoCommands )
298 if ( mPages.empty() )
300 std::unique_ptr< QgsLayoutItemPage >
page = qgis::make_unique< QgsLayoutItemPage >( mLayout );
311 bounds.setWidth( bounds.width() + marginLeft + marginRight );
312 bounds.setHeight( bounds.height() + marginTop + marginBottom );
320 double diffX = marginLeft - bounds.left();
321 double diffY = marginTop - bounds.top();
323 const QList<QGraphicsItem *> itemList = mLayout->items();
324 for ( QGraphicsItem *item : itemList )
332 layoutItem->attemptMoveBy( diffX, diffY );
333 layoutItem->endCommand();
340 const QList< QgsLayoutGuide * > verticalGuides = mLayout->
guides().
guides( Qt::Vertical );
343 guide->setLayoutPosition( guide->layoutPosition() + diffX );
345 const QList< QgsLayoutGuide * > horizontalGuides = mLayout->
guides().
guides( Qt::Horizontal );
348 guide->setLayoutPosition( guide->layoutPosition() + diffY );
352 if ( !mBlockUndoCommands )
358 QDomElement element = document.createElement( QStringLiteral(
"PageCollection" ) );
361 element.appendChild( pageStyleElem );
368 mGuideCollection->writeXml( element, document, context );
370 parentElement.appendChild( element );
376 QDomElement element = e;
377 if ( element.nodeName() != QLatin1String(
"PageCollection" ) )
379 element = element.firstChildElement( QStringLiteral(
"PageCollection" ) );
382 if ( element.nodeName() != QLatin1String(
"PageCollection" ) )
387 mBlockUndoCommands =
true;
393 mLayout->removeItem(
page );
399 QDomElement pageStyleSymbolElem = element.firstChildElement( QStringLiteral(
"symbol" ) );
400 if ( !pageStyleSymbolElem.isNull() )
402 mPageStyleSymbol.reset( QgsSymbolLayerUtils::loadSymbol<QgsFillSymbol>( pageStyleSymbolElem, context ) );
405 QDomNodeList pageList = element.elementsByTagName( QStringLiteral(
"LayoutItem" ) );
406 for (
int i = 0; i < pageList.size(); ++i )
408 QDomElement pageElement = pageList.at( i ).toElement();
410 if ( mPageStyleSymbol )
414 mPages.append(
page.get() );
415 mLayout->addItem(
page.release() );
420 mGuideCollection->readXml( element, document, context );
422 mBlockUndoCommands =
false;
428 return *mGuideCollection;
433 return *mGuideCollection;
438 const auto constMPages = mPages;
457 return mPages.count();
472 return mPages.indexOf(
page );
477 QList<QgsLayoutItemPage *>
pages;
478 const auto constMPages = mPages;
491 const auto constMPages = mPages;
522 QList<QgsLayoutItem *> itemList;
523 const QList<QGraphicsItem *> graphicsItemList = mLayout->items();
524 itemList.reserve( graphicsItemList.size() );
525 for ( QGraphicsItem *graphicsItem : graphicsItemList )
530 itemList.push_back( item );
538 if (
page >= mPages.count() ||
page < 0 )
549 QList<QgsLayoutFrame *> frames;
553 if ( frame->hidePageIfEmpty() && frame->isEmpty() )
564 if ( !mBlockUndoCommands )
566 mPages.append(
page );
567 mLayout->addItem(
page );
569 if ( !mBlockUndoCommands )
575 if ( mPages.empty() )
579 std::unique_ptr< QgsLayoutItemPage > newPage = qgis::make_unique< QgsLayoutItemPage >( mLayout );
582 return mPages.at( mPages.count() - 1 );
587 if ( !mBlockUndoCommands )
593 if ( beforePage < 0 )
597 if ( beforePage >= mPages.count() )
599 mPages.append(
page );
603 mPages.insert( beforePage,
page );
605 mLayout->addItem(
page );
609 for (
auto it = mPreviousItemPositions.begin(); it != mPreviousItemPositions.end(); ++it )
611 if ( it.value().first < beforePage )
614 it.value().first = it.value().first + 1;
618 if ( ! mBlockUndoCommands )
627 if ( pageNumber < 0 || pageNumber >= mPages.count() )
630 if ( !mBlockUndoCommands )
638 mLayout->removeItem(
page );
643 for (
auto it = mPreviousItemPositions.begin(); it != mPreviousItemPositions.end(); ++it )
648 it.value().first = it.value().first - 1;
652 if ( ! mBlockUndoCommands )
661 if ( !mPages.contains(
page ) )
664 if ( !mBlockUndoCommands )
669 int pageIndex = mPages.indexOf(
page );
672 mPages.removeAll(
page );
676 mLayout->removeItem(
page );
680 for (
auto it = mPreviousItemPositions.begin(); it != mPreviousItemPositions.end(); ++it )
682 if ( it.value().first <= pageIndex )
685 it.value().first = it.value().first - 1;
689 if ( !mBlockUndoCommands )
698 if ( !mBlockUndoCommands )
703 for (
int i = mPages.count() - 1; i >= 0; --i )
706 mPages.takeAt( i )->deleteLater();
709 if ( !mBlockUndoCommands )
718 mPages.removeAll(
page );
722 void QgsLayoutPageCollection::createDefaultPageStyleSymbol()
725 properties.insert( QStringLiteral(
"color" ), QStringLiteral(
"white" ) );
726 properties.insert( QStringLiteral(
"style" ), QStringLiteral(
"solid" ) );
727 properties.insert( QStringLiteral(
"style_border" ), QStringLiteral(
"no" ) );
728 properties.insert( QStringLiteral(
"joinstyle" ), QStringLiteral(
"miter" ) );
double bottom() const
Returns the bottom margin.
bool shouldDrawItem() const
Returns whether the item should be drawn in the current context.
double maximumPageWidth() const
Returns the maximum width of pages in the collection.
QgsLayoutSize pageSize() const
Returns the size of the page.
QgsLayoutUndoStack * undoStack()
Returns a pointer to the layout's undo stack, which manages undo/redo states for the layout and it's ...
double top() const
Returns the top margin.
void setPageStyleSymbol(QgsFillSymbol *symbol)
Sets the symbol to use for drawing pages in the collection.
QgsLayoutGuideCollection & guides()
Returns a reference to the collection's guide collection, which manages page snap guides.
Item representing the paper in a layout.
bool pageIsEmpty(int page) const
Returns whether a given page index is empty, ie, it contains no items except for the background paper...
The class is used as a container of context for various read/write operations on other objects.
QList< QgsLayoutGuide * > guides()
Returns a list of all guides contained in the collection.
void deletePage(int pageNumber)
Deletes a page from the collection.
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 layoutItems(QList< T * > &itemList) const
Returns a list of layout items of a specific type.
void beginCommand(const QString &commandText, UndoCommand command=UndoNone)
Starts new undo command for this item.
void endPageSizeChange()
Should be called after changing any page item sizes, and preceded by a call to beginPageSizeChange().
double length() const
Returns the length of the measurement.
void endMacro()
Ends a macro command.
virtual void finalizeRestoreFromXml()
Called after all pending items have been restored from XML.
double pageShadowWidth() const
Returns the size of the page shadow, in layout units.
double spaceBetweenPages() const
Returns the space between pages, in layout units.
LayoutUnit
Layout measurement units.
QRectF boundingRect() const override
void update()
Updates the position (and visibility) of all guide line items.
double y() const
Returns y coordinate of point.
void setPageSize(const QgsLayoutSize &size)
Sets the size of the page.
int pageNumber(QgsLayoutItemPage *page) const
Returns the page number for the specified page, or -1 if the page is not contained in the collection.
QgsUnitTypes::LayoutUnit units() const
Returns the native units for the layout.
QgsLayoutItemPage * pageAtPoint(QPointF point) const
Returns the page at a specified point (in layout coordinates).
int page() const
Returns the page the item is currently on, with the first page returning 0.
QgsLayoutSize sizeWithUnits() const
Returns the item's current size, including units.
bool writeXml(QDomElement &parentElement, QDomDocument &document, const QgsReadWriteContext &context) const
Stores the item state in a DOM element.
QgsLayoutItemPage * extendByNewPage()
Adds a new page to the end of the collection.
bool readXml(const QDomElement &itemElement, const QDomDocument &document, const QgsReadWriteContext &context)
Sets the item state from a DOM element.
void setPageStyleSymbol(QgsFillSymbol *symbol)
Sets the symbol to use for drawing the page background.
QRectF layoutBounds(bool ignorePages=false, double margin=0.0) const
Calculates the bounds of all non-gui items in the layout.
int pageNumberForPoint(QPointF point) const
Returns the page number corresponding to a point in the layout (in layout units).
double left() const
Returns the left margin.
QPointF positionOnPage(QPointF point) const
Returns the position within a page of a point in the layout (in layout units).
void setY(const double y)
Sets y coordinate of point.
Base class for frame items, which form a layout multiframe item.
Q_DECL_DEPRECATED const QgsFillSymbol * pageStyleSymbol() const
Returns the symbol to use for drawing pages in the collection.
bool qgsDoubleNear(double a, double b, double epsilon=4 *std::numeric_limits< double >::epsilon())
Compare two doubles (but allow some difference)
QList< int > visiblePageNumbers(const QRectF ®ion) const
Returns a list of the page numbers which are visible within the specified region (in layout coordinat...
void insertPage(QgsLayoutItemPage *page, int beforePage)
Inserts a page into a specific position in the collection.
void beginPageSizeChange()
Should be called before changing any page item sizes, and followed by a call to endPageSizeChange().
QList< QgsLayoutItemPage * > pages()
Returns a list of pages in the collection.
void changed()
Emitted when pages are added or removed from the collection.
The QgsMargins class defines the four margins of a rectangle.
void updateBounds()
Updates the scene bounds of the layout.
double right() const
Returns the right margin.
QgsLayoutItemPage * page(int pageNumber)
Returns a specific page (by pageNumber) from the collection.
int predictPageNumberForPoint(QPointF point) const
Returns the theoretical page number corresponding to a point in the layout (in layout units),...
Base class for graphical items within a QgsLayout.
Contains the configuration for a single snap guide used by a layout.
void beginMacro(const QString &commandText)
Starts a macro command, with the given descriptive commandText.
QList< QgsLayoutItemPage * > visiblePages(const QRectF ®ion) const
Returns a list of the pages which are visible within the specified region (in layout coordinates).
Stores and manages the snap guides used by a layout.
virtual void attemptMove(const QgsLayoutPoint &point, bool useReferencePoint=true, bool includesFrame=false, int page=-1)
Attempts to move the item to a specified point.
QgsLayout * layout() override
Returns the layout the object belongs to.
void addPage(QgsLayoutItemPage *page)
Adds a page to the collection.
QMap< QString, QString > QgsStringMap
void endCommand()
Saves final state of an object and pushes the active command to the undo history.
void redraw()
Triggers a redraw for all pages.
QgsLayoutPageCollection * pageCollection()
Returns a pointer to the layout's page collection, which stores and manages page items in the layout.
QgsLayoutPageCollection(QgsLayout *layout)
Constructor for QgsLayoutItemPage, with the specified parent layout.
void reflow()
Forces the page collection to reflow the arrangement of pages, e.g.
Base class for layouts, which can contain items such as maps, labels, scalebars, etc.
QgsLayoutPoint pagePositionToAbsolute(int page, const QgsLayoutPoint &position) const
Converts a position on a page to an absolute position in (maintaining the units from the input positi...
QgsFillSymbol * clone() const override
Returns a deep copy of this symbol.
A fill symbol type, for rendering Polygon and MultiPolygon geometries.
bool readXml(const QDomElement &collectionElement, const QDomDocument &document, const QgsReadWriteContext &context) override
Sets the collection's state from a DOM element.
void beginCommand(QgsLayoutUndoObjectInterface *object, const QString &commandText, int id=0)
Begins a new undo command for the specified object.
QgsLayoutGuideCollection & guides()
Returns a reference to the layout's guide collection, which manages page snap guides.
void pageAboutToBeRemoved(int pageNumber)
Emitted just before a page is removed from the collection.
This class provides a method of storing sizes, consisting of a width and height, for use in QGIS layo...
static QgsFillSymbol * createSimple(const QgsStringMap &properties)
Create a fill symbol with one symbol layer: SimpleFill with specified properties.
QSizeF maximumPageSize() const
Returns the maximum size of any page in the collection, by area.
bool writeXml(QDomElement &parentElement, QDomDocument &document, const QgsReadWriteContext &context) const override
Stores the collection's state in a DOM element.
~QgsLayoutPageCollection() override
bool shouldExportPage(int page) const
Returns whether the specified page number should be included in exports of the layouts.
int pageCount() const
Returns the number of pages in the collection.
This class provides a method of storing points, consisting of an x and y coordinate,...
QList< QgsLayoutItem * > itemsOnPage(int page) const
Returns a list of layout items on the specified page index.
void clear()
Removes all pages from the collection.
double convertToLayoutUnits(QgsLayoutMeasurement measurement) const
Converts a measurement into the layout's native units.
double x() const
Returns x coordinate of point.
static QDomElement saveSymbol(const QString &symbolName, const QgsSymbol *symbol, QDomDocument &doc, const QgsReadWriteContext &context)
Writes a symbol definition to XML.
This class provides a method of storing measurements for use in QGIS layouts using a variety of diffe...
QgsLayoutMeasurement convertFromLayoutUnits(double length, QgsUnitTypes::LayoutUnit unit) const
Converts a length measurement from the layout's native units to a specified target unit.
QPointF pagePositionToLayoutPosition(int page, const QgsLayoutPoint &position) const
Converts a position on a page to an absolute position in layout coordinates.
QgsUnitTypes::LayoutUnit units() const
Returns the units for the point.
bool hasUniformPageSizes() const
Returns true if the layout has uniform page sizes, e.g.
QgsLayoutItemPage * takePage(QgsLayoutItemPage *page)
Takes a page from the collection, returning ownership of the page to the caller.
void resizeToContents(const QgsMargins &margins, QgsUnitTypes::LayoutUnit marginUnits)
Resizes the layout to a single page which fits the current contents of the layout.