QGIS API Documentation 3.34.0-Prizren (ffbdd678812)
Loading...
Searching...
No Matches
qgslayout.h
Go to the documentation of this file.
1/***************************************************************************
2 qgslayout.h
3 -------------------
4 begin : June 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#ifndef QGSLAYOUT_H
17#define QGSLAYOUT_H
18
19#include "qgis_core.h"
20#include <QGraphicsScene>
21#include "qgslayoutsnapper.h"
26
28class QgsLayoutModel;
35
49class CORE_EXPORT QgsLayout : public QGraphicsScene, public QgsExpressionContextGenerator, public QgsLayoutUndoObjectInterface
50{
51 Q_OBJECT
52
53 public:
54
57 {
58 ZPage = 0,
59 ZItem = 1,
60 ZGrid = 9997,
61 ZGuide = 9998,
62 ZSmartGuide = 9999,
63 ZMouseHandles = 10000,
64 ZViewTool = 10001,
65 ZSnapIndicator = 10002,
66 };
67
70 {
72 UndoNone = -1,
73 };
74
82 QgsLayout( QgsProject *project );
83
84 ~QgsLayout() override;
85
90 QgsLayout *clone() const SIP_FACTORY;
91
96 void initializeDefaults();
97
103 void clear();
104
110 QgsProject *project() const;
111
115 QgsLayoutModel *itemsModel();
116
121 template<class T> void layoutItems( QList<T *> &itemList ) const SIP_SKIP
122 {
123 itemList.clear();
124 QList<QGraphicsItem *> graphicsItemList = items();
125 QList<QGraphicsItem *>::iterator itemIt = graphicsItemList.begin();
126 for ( ; itemIt != graphicsItemList.end(); ++itemIt )
127 {
128 T *item = dynamic_cast<T *>( *itemIt );
129 if ( item )
130 {
131 itemList.push_back( item );
132 }
133 }
134 }
135
140 template<class T> void layoutObjects( QList<T *> &objectList ) const SIP_SKIP
141 {
142 objectList.clear();
143 const QList<QGraphicsItem *> itemList( items() );
144 const QList<QgsLayoutMultiFrame *> frameList( multiFrames() );
145 for ( const auto &obj : itemList )
146 {
147 T *item = dynamic_cast<T *>( obj );
148 if ( item )
149 {
150 objectList.push_back( item );
151 }
152 }
153 for ( const auto &obj : frameList )
154 {
155 T *item = dynamic_cast<T *>( obj );
156 if ( item )
157 {
158 objectList.push_back( item );
159 }
160 }
161 }
162
169 QList<QgsLayoutItem *> selectedLayoutItems( bool includeLockedItems = true );
170
174 void setSelectedItem( QgsLayoutItem *item );
175
182 void deselectAll();
183
196 bool raiseItem( QgsLayoutItem *item, bool deferUpdate = false );
197
210 bool lowerItem( QgsLayoutItem *item, bool deferUpdate = false );
211
224 bool moveItemToTop( QgsLayoutItem *item, bool deferUpdate = false );
225
237 bool moveItemToBottom( QgsLayoutItem *item, bool deferUpdate = false );
238
244 void updateZValues( bool addUndoCommands = true );
245
261 QgsLayoutItem *itemByUuid( const QString &uuid, bool includeTemplateUuids = false ) const;
262
278 QgsLayoutItem *itemByTemplateUuid( const QString &uuid ) const;
279
286 QgsLayoutItem *itemById( const QString &id ) const;
287
301 QgsLayoutMultiFrame *multiFrameByUuid( const QString &uuid, bool includeTemplateUuids = false ) const;
302
308 QgsLayoutItem *layoutItemAt( QPointF position, bool ignoreLocked = false, double searchTolerance = 0 ) const;
309
315 QgsLayoutItem *layoutItemAt( QPointF position, const QgsLayoutItem *belowItem, bool ignoreLocked = false, double searchTolerance = 0 ) const;
316
323 void setUnits( Qgis::LayoutUnit units ) { mUnits = units; }
324
330 Qgis::LayoutUnit units() const { return mUnits; }
331
338 double convertToLayoutUnits( QgsLayoutMeasurement measurement ) const;
339
346 QSizeF convertToLayoutUnits( const QgsLayoutSize &size ) const;
347
354 QPointF convertToLayoutUnits( const QgsLayoutPoint &point ) const;
355
362 QgsLayoutMeasurement convertFromLayoutUnits( double length, Qgis::LayoutUnit unit ) const;
363
370 QgsLayoutSize convertFromLayoutUnits( QSizeF size, Qgis::LayoutUnit unit ) const;
371
378 QgsLayoutPoint convertFromLayoutUnits( QPointF point, Qgis::LayoutUnit unit ) const;
379
384 QgsLayoutRenderContext &renderContext();
385
390 SIP_SKIP const QgsLayoutRenderContext &renderContext() const;
391
396 QgsLayoutReportContext &reportContext();
397
402 SIP_SKIP const QgsLayoutReportContext &reportContext() const;
403
408 QgsLayoutSnapper &snapper() { return mSnapper; }
409
414 SIP_SKIP const QgsLayoutSnapper &snapper() const { return mSnapper; }
415
420 QgsLayoutGridSettings &gridSettings() { return mGridSettings; }
421
426 SIP_SKIP const QgsLayoutGridSettings &gridSettings() const { return mGridSettings; }
427
431 void reloadSettings();
432
436 QgsLayoutGuideCollection &guides();
437
441 SIP_SKIP const QgsLayoutGuideCollection &guides() const;
442
448
457 void setCustomProperty( const QString &key, const QVariant &value );
458
468 QVariant customProperty( const QString &key, const QVariant &defaultValue = QVariant() ) const;
469
477 void removeCustomProperty( const QString &key );
478
485 QStringList customProperties() const;
486
493 QgsLayoutItemMap *referenceMap() const;
494
500 void setReferenceMap( QgsLayoutItemMap *map );
501
506 QgsLayoutPageCollection *pageCollection();
507
512 SIP_SKIP const QgsLayoutPageCollection *pageCollection() const;
513
523 QRectF layoutBounds( bool ignorePages = false, double margin = 0.0 ) const;
524
535 QRectF pageItemBounds( int page, bool visibleOnly = false ) const;
536
541 void addLayoutItem( QgsLayoutItem *item SIP_TRANSFER );
542
548 void removeLayoutItem( QgsLayoutItem *item );
549
555 void addMultiFrame( QgsLayoutMultiFrame *multiFrame SIP_TRANSFER );
556
562 void removeMultiFrame( QgsLayoutMultiFrame *multiFrame );
563
569 QList< QgsLayoutMultiFrame * > multiFrames() const;
570
576 bool saveAsTemplate( const QString &path, const QgsReadWriteContext &context ) const;
577
589 QList< QgsLayoutItem * > loadFromTemplate( const QDomDocument &document, const QgsReadWriteContext &context, bool clearExisting = true, bool *ok SIP_OUT = nullptr );
590
595 virtual QDomElement writeXml( QDomDocument &document, const QgsReadWriteContext &context ) const;
596
601 virtual bool readXml( const QDomElement &layoutElement, const QDomDocument &document, const QgsReadWriteContext &context );
602
615 QList< QgsLayoutItem * > addItemsFromXml( const QDomElement &parentElement, const QDomDocument &document,
616 const QgsReadWriteContext &context,
617 QPointF *position = nullptr, bool pasteInPlace = false );
618
623 QgsLayoutUndoStack *undoStack();
624
629 SIP_SKIP const QgsLayoutUndoStack *undoStack() const;
630
631 QgsAbstractLayoutUndoCommand *createCommand( const QString &text, int id = 0, QUndoCommand *parent = nullptr ) SIP_FACTORY override;
632
638 QgsLayoutItemGroup *groupItems( const QList<QgsLayoutItem *> &items );
639
649 QList<QgsLayoutItem *> ungroupItems( QgsLayoutItemGroup *group );
650
660 bool accept( QgsStyleEntityVisitorInterface *visitor ) const;
661
662#ifndef SIP_RUN
665#endif
666
667 public slots:
668
677 void refresh();
678
682 void updateBounds();
683
684 signals:
685
691 void changed();
692
697
703
708 void refreshed();
709
715 void backgroundTaskCountChanged( int total );
716
723
724 private slots:
725 void itemBackgroundTaskCountChanged( int count );
726
727 private:
728
729 QgsProject *mProject = nullptr;
730 std::unique_ptr< QgsLayoutModel > mItemsModel;
731
732 QgsObjectCustomProperties mCustomProperties;
733
735 QgsLayoutRenderContext *mRenderContext = nullptr;
736 QgsLayoutReportContext *mReportContext = nullptr;
737 QgsLayoutSnapper mSnapper;
738 QgsLayoutGridSettings mGridSettings;
739
740 std::unique_ptr< QgsLayoutPageCollection > mPageCollection;
741 std::unique_ptr< QgsLayoutUndoStack > mUndoStack;
742
744 QList<QgsLayoutMultiFrame *> mMultiFrames;
745
747 QString mWorldFileMapId;
748
749 QHash< QgsLayoutItem *, int > mBackgroundTaskCount;
750
752 void writeXmlLayoutSettings( QDomElement &element, QDomDocument &document, const QgsReadWriteContext &context ) const;
754 bool readXmlLayoutSettings( const QDomElement &layoutElement, const QDomDocument &document, const QgsReadWriteContext &context );
755
759 void addLayoutItemPrivate( QgsLayoutItem *item );
760
764 void removeLayoutItemPrivate( QgsLayoutItem *item );
765
766 void deleteAndRemoveMultiFrames();
767
769 QPointF minPointFromXml( const QDomElement &elem ) const;
770
771 QgsLayout( const QgsLayout & ) = delete;
772 QgsLayout &operator=( const QgsLayout & ) = delete;
773
774 friend class QgsLayoutItemAddItemCommand;
775 friend class QgsLayoutItemDeleteUndoCommand;
776 friend class QgsLayoutItemUndoCommand;
777 friend class QgsLayoutUndoCommand;
778 friend class QgsLayoutItemGroupUndoCommand;
779 friend class QgsLayoutModel;
782};
783
784#endif //QGSLAYOUT_H
LayoutUnit
Layout measurement units.
Definition qgis.h:3647
@ Millimeters
Millimeters.
Base class for commands to undo/redo layout and layout object changes.
QgsCompositionConverter class converts a QGIS 2.x composition to a QGIS 3.x layout.
Abstract interface for generating an expression context.
virtual QgsExpressionContext createExpressionContext() const =0
This method needs to be reimplemented in all classes which implement this interface and return an exp...
Expression contexts are used to encapsulate the parameters around which a QgsExpression should be eva...
Contains settings relating to the appearance, spacing and offset for layout grids.
Stores and manages the snap guides used by a layout.
A container for grouping several QgsLayoutItems.
Layout graphical items for displaying a map.
Base class for graphical items within a QgsLayout.
This class provides a method of storing measurements for use in QGIS layouts using a variety of diffe...
A model for items attached to a layout.
Abstract base class for layout items with the ability to distribute the content to several frames (Qg...
A manager for a collection of pages in a layout.
This class provides a method of storing points, consisting of an x and y coordinate,...
Stores information relating to the current rendering settings for a layout.
Stores information relating to the current reporting context for a layout.
This class provides a method of storing sizes, consisting of a width and height, for use in QGIS layo...
Manages snapping grids and preset snap lines in a layout, and handles snapping points to the nearest ...
Interface for layout objects which support undo/redo commands.
virtual QgsAbstractLayoutUndoCommand * createCommand(const QString &text, int id=0, QUndoCommand *parent=nullptr)=0
Creates a new layout undo command with the specified text and parent.
An undo stack for QgsLayouts.
Base class for layouts, which can contain items such as maps, labels, scalebars, etc.
Definition qgslayout.h:50
QgsLayoutSnapper & snapper()
Returns a reference to the layout's snapper, which stores handles layout snap grids and lines and sna...
Definition qgslayout.h:408
void variablesChanged()
Emitted whenever the expression variables stored in the layout have been changed.
void setUnits(Qgis::LayoutUnit units)
Sets the native measurement units for the layout.
Definition qgslayout.h:323
const QgsLayoutGridSettings & gridSettings() const
Returns a reference to the layout's grid settings, which stores settings relating to grid appearance,...
Definition qgslayout.h:426
void changed()
Emitted when properties of the layout change.
void layoutObjects(QList< T * > &objectList) const
Returns a list of layout objects (items and multiframes) of a specific type.
Definition qgslayout.h:140
static const QgsSettingsEntryStringList * settingsSearchPathForTemplates
Settings entry search path for templates.
Definition qgslayout.h:664
void selectedItemChanged(QgsLayoutItem *selected)
Emitted whenever the selected item changes.
const QgsLayoutSnapper & snapper() const
Returns a reference to the layout's snapper, which stores handles layout snap grids and lines and sna...
Definition qgslayout.h:414
QgsLayoutGridSettings & gridSettings()
Returns a reference to the layout's grid settings, which stores settings relating to grid appearance,...
Definition qgslayout.h:420
void backgroundTaskCountChanged(int total)
Emitted whenever the total number of background tasks running in items from the layout changes.
void refreshed()
Emitted when the layout has been refreshed and items should also be refreshed and updated.
ZValues
Preset item z-values, to ensure correct stacking.
Definition qgslayout.h:57
Qgis::LayoutUnit units() const
Returns the native units for the layout.
Definition qgslayout.h:330
void itemAdded(QgsLayoutItem *item)
Emitted when an item was added to the layout.
UndoCommand
Layout undo commands, used for collapsing undo commands.
Definition qgslayout.h:70
@ UndoLayoutDpi
Change layout default DPI.
Definition qgslayout.h:71
Simple key-value store (keys = strings, values = variants) that supports loading/saving to/from XML i...
Encapsulates a QGIS project, including sets of map layers and their styles, layouts,...
Definition qgsproject.h:107
The class is used as a container of context for various read/write operations on other objects.
A string list settings entry.
An interface for classes which can visit style entity (e.g.
#define SIP_SKIP
Definition qgis_sip.h:126
#define SIP_TRANSFER
Definition qgis_sip.h:36
#define SIP_OUT
Definition qgis_sip.h:58
#define SIP_FACTORY
Definition qgis_sip.h:76