QGIS API Documentation 3.37.0-Master (fdefdf9c27f)
qgslayoutitempicture.h
Go to the documentation of this file.
1/***************************************************************************
2 qgslayoutitempicture.h
3 -------------------
4begin : October 2017
5copyright : (C) 2017 by Nyall Dawson
6email : nyall dot dawson at gmail dot com
7***************************************************************************/
8
9/***************************************************************************
10 * *
11 * This program is free software; you can redistribute it and/or modify *
12 * it under the terms of the GNU General Public License as published by *
13 * the Free Software Foundation; either version 2 of the License, or *
14 * (at your option) any later version. *
15 * *
16 ***************************************************************************/
17#ifndef QGSLAYOUTITEMPICTURE_H
18#define QGSLAYOUTITEMPICTURE_H
19
20#include "qgis_core.h"
21#include "qgslayoutitem.h"
22#include <QFile>
23#include <QImage>
24#include <QSvgRenderer>
25
27class QgsExpression;
29
34class CORE_EXPORT QgsLayoutItemPicture: public QgsLayoutItem
35{
36 Q_OBJECT
37 public:
38
43 {
48 FrameToImageSize
49 };
50
54 enum Format
55 {
59 };
60
63 {
64 GridNorth = 0,
66 };
67
72
73 int type() const override;
74 QIcon icon() const override;
75
81 static QgsLayoutItemPicture *create( QgsLayout *layout ) SIP_FACTORY;
82
83
93 void setPicturePath( const QString &path, Format format = FormatUnknown );
94
102 QString picturePath() const;
103
110 double pictureRotation() const { return mPictureRotation; }
111
122 void setLinkedMap( QgsLayoutItemMap *map );
123
130 QgsLayoutItemMap *linkedMap() const;
131
137 NorthMode northMode() const;
138
144 void setNorthMode( NorthMode mode );
145
151 double northOffset() const;
152
158 void setNorthOffset( double offset );
159
165 ResizeMode resizeMode() const { return mResizeMode; }
166
172 void setPictureAnchor( QgsLayoutItem::ReferencePoint anchor );
173
179 QgsLayoutItem::ReferencePoint pictureAnchor() const { return mPictureAnchor; }
180
186 QColor svgFillColor() const { return mSvgFillColor; }
187
195 void setSvgFillColor( const QColor &color );
196
202 QColor svgStrokeColor() const { return mSvgStrokeColor; }
203
212 void setSvgStrokeColor( const QColor &color );
213
219 double svgStrokeWidth() const { return mSvgStrokeWidth; }
220
228 void setSvgStrokeWidth( double width );
229
235 Format mode() const { return mMode; }
236
243 Format originalMode() const { return mOriginalMode; }
244
250 void setMode( Format mode );
251
252 void finalizeRestoreFromXml() override;
253
260 bool isMissingImage() const;
261
269 QString evaluatedPath() const;
270
275 QMap<QString, QgsProperty> svgDynamicParameters() const;
276
281 void setSvgDynamicParameters( const QMap<QString, QgsProperty> &parameters );
282
283 public slots:
284
290 void setPictureRotation( double rotation );
291
297 void setResizeMode( QgsLayoutItemPicture::ResizeMode mode );
298
304 void refreshPicture( const QgsExpressionContext *context = nullptr );
305
309 void recalculateSize();
310
312
313 signals:
315 void pictureRotationChanged( double newRotation );
316
317 protected:
318
319 void draw( QgsLayoutItemRenderContext &context ) override;
320 QSizeF applyItemSizeConstraint( QSizeF targetSize ) override;
321 bool writePropertiesToElement( QDomElement &element, QDomDocument &document, const QgsReadWriteContext &context ) const override;
322 bool readPropertiesFromElement( const QDomElement &element, const QDomDocument &document, const QgsReadWriteContext &context ) override;
323
324 private:
325
326 QgsLayoutItemPicture() = delete;
327
329 QRectF boundedSVGRect( double deviceWidth, double deviceHeight );
331 QRectF boundedImageRect( double deviceWidth, double deviceHeight );
332
334 QSizeF pictureSize();
335
336 QImage mImage;
337 QSvgRenderer mSVG;
339 QString mSourcePath;
340 Format mMode = FormatUnknown;
341 Format mOriginalMode = FormatUnknown;
342
343 QSize mDefaultSvgSize;
344
346 double mPictureRotation = 0;
347
348 QString mRotationMapUuid;
349
351 double mPictureWidth = 0.0;
353 double mPictureHeight = 0.0;
354
357
358 QColor mSvgFillColor = QColor( 255, 255, 255 );
359 QColor mSvgStrokeColor = QColor( 0, 0, 0 );
360 double mSvgStrokeWidth = 0.2;
361
362 bool mHasExpressionError = false;
363 bool mLoaded = false;
364 bool mLoadingSvg = false;
365 bool mIsMissingImage = false;
366 QString mEvaluatedPath;
367
368 QgsLayoutNorthArrowHandler *mNorthArrowHandler = nullptr;
369
371 void loadPicture( const QVariant &data );
372
377 QRect clippedImageRect( double &boundRectWidthMM, double &boundRectHeightMM, QSize imageRectPixels );
378
382 void loadRemotePicture( const QString &url );
383
387 void loadLocalPicture( const QString &path );
388
389 void loadPictureUsingCache( const QString &path );
390
391 QgsLayoutItemPicture( const QgsLayoutItemPicture & ) = delete;
392 QgsLayoutItemPicture &operator=( const QgsLayoutItemPicture & ) = delete;
393
394 private slots:
395
396 void updateNorthArrowRotation( double rotation );
397
398 void shapeChanged();
399
401 friend class TestQgsCompositionConverter;
402
403};
404
405#endif // QGSLAYOUTITEMPICTURE_H
QgsCompositionConverter class converts a QGIS 2.x composition to a QGIS 3.x layout.
Expression contexts are used to encapsulate the parameters around which a QgsExpression should be eva...
Class for parsing and evaluation of expressions (formerly called "search strings").
Layout graphical items for displaying a map.
A layout item subclass that displays SVG files or raster format images (jpg, png, ....
double pictureRotation() const
Returns the rotation used for drawing the picture within the item's frame, in degrees clockwise.
QColor svgStrokeColor() const
Returns the stroke color used for parametrized SVG files.
QgsLayoutItem::ReferencePoint pictureAnchor() const
Returns the picture's current anchor, which controls how it is placed within the picture item's frame...
double svgStrokeWidth() const
Returns the stroke width (in layout units) used for parametrized SVG files.
void pictureRotationChanged(double newRotation)
Emitted on picture rotation change.
ResizeMode resizeMode() const
Returns the resize mode used for drawing the picture within the layout item's frame.
Format originalMode() const
Returns the original set picture mode (image format).
NorthMode
Method for syncing rotation to a map's North direction.
@ TrueNorth
Align to true north.
Format mode() const
Returns the current picture mode (image format), FormatUnknown if given picture format is unknown.
QColor svgFillColor() const
Returns the fill color used for parametrized SVG files.
ResizeMode
Controls how pictures are scaled within the item's frame.
@ ZoomResizeFrame
Enlarges image to fit frame, then resizes frame to fit resultant image.
@ Clip
Draws image at original size and clips any portion which falls outside frame.
@ Stretch
Stretches image to fit frame, ignores aspect ratio.
@ Zoom
Enlarges image to fit frame while maintaining aspect ratio of picture.
Format
Format of source image.
@ FormatUnknown
Invalid or unknown image type.
Contains settings and helpers relating to a render of a QgsLayoutItem.
Definition: qgslayoutitem.h:43
Base class for graphical items within a QgsLayout.
virtual void refreshDataDefinedProperty(QgsLayoutObject::DataDefinedProperty property=QgsLayoutObject::DataDefinedProperty::AllProperties)
Refreshes a data defined property for the item by reevaluating the property's value and redrawing the...
virtual QIcon icon() const
Returns the item's icon.
ReferencePoint
Fixed position reference point.
@ UpperLeft
Upper left corner of item.
virtual bool writePropertiesToElement(QDomElement &element, QDomDocument &document, const QgsReadWriteContext &context) const
Stores item state within an XML DOM element.
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 QSizeF applyItemSizeConstraint(QSizeF targetSize)
Applies any item-specific size constraint handling to a given targetSize in layout units.
virtual bool readPropertiesFromElement(const QDomElement &element, const QDomDocument &document, const QgsReadWriteContext &context)
Sets item state from a DOM element.
virtual void draw(QgsLayoutItemRenderContext &context)=0
Draws the item's contents using the specified item render context.
An object which handles north-arrow type behavior for layout items.
DataDefinedProperty
Data defined properties for different item types.
@ AllProperties
All properties for item.
Base class for layouts, which can contain items such as maps, labels, scalebars, etc.
Definition: qgslayout.h:49
The class is used as a container of context for various read/write operations on other objects.
#define SIP_FACTORY
Definition: qgis_sip.h:76