QGIS API Documentation 3.99.0-Master (752b475928d)
Loading...
Searching...
No Matches
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
23#include <QFile>
24#include <QImage>
25#include <QSvgRenderer>
26
28class QgsExpression;
30
35class CORE_EXPORT QgsLayoutItemPicture: public QgsLayoutItem
36{
37 Q_OBJECT
38 public:
39
51
54 {
57 };
58
63
64 int type() const override;
65 QIcon icon() const override;
66
72 static QgsLayoutItemPicture *create( QgsLayout *layout ) SIP_FACTORY;
73
74
84 void setPicturePath( const QString &path, Qgis::PictureFormat format = Qgis::PictureFormat::Unknown );
85
93 QString picturePath() const;
94
101 double pictureRotation() const { return mPictureRotation; }
102
113 void setLinkedMap( QgsLayoutItemMap *map );
114
121 QgsLayoutItemMap *linkedMap() const;
122
128 NorthMode northMode() const;
129
135 void setNorthMode( NorthMode mode );
136
142 double northOffset() const;
143
149 void setNorthOffset( double offset );
150
156 ResizeMode resizeMode() const { return mResizeMode; }
157
163 void setPictureAnchor( QgsLayoutItem::ReferencePoint anchor );
164
170 QgsLayoutItem::ReferencePoint pictureAnchor() const { return mPictureAnchor; }
171
177 QColor svgFillColor() const { return mSvgFillColor; }
178
186 void setSvgFillColor( const QColor &color );
187
193 QColor svgStrokeColor() const { return mSvgStrokeColor; }
194
203 void setSvgStrokeColor( const QColor &color );
204
210 double svgStrokeWidth() const { return mSvgStrokeWidth; }
211
219 void setSvgStrokeWidth( double width );
220
227 Qgis::PictureFormat mode() const { return mMode; }
228
236 Qgis::PictureFormat originalMode() const { return mOriginalMode; }
237
243 void setMode( Qgis::PictureFormat mode );
244
245 void finalizeRestoreFromXml() override;
246
253 bool isMissingImage() const;
254
262 QString evaluatedPath() const;
263
268 QMap<QString, QgsProperty> svgDynamicParameters() const;
269
274 void setSvgDynamicParameters( const QMap<QString, QgsProperty> &parameters );
275
276 public slots:
277
283 void setPictureRotation( double rotation );
284
290 void setResizeMode( QgsLayoutItemPicture::ResizeMode mode );
291
297 void refreshPicture( const QgsExpressionContext *context = nullptr );
298
302 void recalculateSize();
303
305
306 signals:
308 void pictureRotationChanged( double newRotation );
309
310 protected:
311
312 void draw( QgsLayoutItemRenderContext &context ) override;
313 QSizeF applyItemSizeConstraint( QSizeF targetSize ) override;
314 bool writePropertiesToElement( QDomElement &element, QDomDocument &document, const QgsReadWriteContext &context ) const override;
315 bool readPropertiesFromElement( const QDomElement &element, const QDomDocument &document, const QgsReadWriteContext &context ) override;
316
317 private:
318
319 QgsLayoutItemPicture() = delete;
320
322 QSizeF pictureSize();
323
324 QImage mImage;
325 QSvgRenderer mSVG;
327 QString mSourcePath;
330
331 QSize mDefaultSvgSize;
332
334 double mPictureRotation = 0;
335
336 QString mRotationMapUuid;
337
339 double mPictureWidth = 0.0;
341 double mPictureHeight = 0.0;
342
345
346 QColor mSvgFillColor = QColor( 255, 255, 255 );
347 QColor mSvgStrokeColor = QColor( 0, 0, 0 );
348 double mSvgStrokeWidth = 0.2;
349
350 bool mHasExpressionError = false;
351 bool mLoaded = false;
352 bool mLoadingSvg = false;
353 bool mIsMissingImage = false;
354 QString mEvaluatedPath;
355
356 QgsLayoutNorthArrowHandler *mNorthArrowHandler = nullptr;
357
359 void loadPicture( const QVariant &data );
360
365 QRect clippedImageRect( double &boundRectWidthMM, double &boundRectHeightMM, QSize imageRectPixels );
366
370 void loadRemotePicture( const QString &url );
371
375 void loadLocalPicture( const QString &path );
376
377 void loadPictureUsingCache( const QString &path );
378
379 QgsLayoutItemPicture( const QgsLayoutItemPicture & ) = delete;
380 QgsLayoutItemPicture &operator=( const QgsLayoutItemPicture & ) = delete;
381
382 private slots:
383
384 void updateNorthArrowRotation( double rotation );
385
386 void shapeChanged();
387
390
391};
392
393#endif // QGSLAYOUTITEMPICTURE_H
PictureFormat
Picture formats.
Definition qgis.h:5272
@ Unknown
Invalid or unknown image type.
Definition qgis.h:5275
Expression contexts are used to encapsulate the parameters around which a QgsExpression should be eva...
Handles 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.
QgsLayoutItemPicture(QgsLayout *layout)
Constructor for QgsLayoutItemPicture, with the specified parent layout.
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.
Qgis::PictureFormat originalMode() const
Returns the original set picture mode (image format).
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.
Qgis::PictureFormat mode() const
Returns the current picture mode (image format), FormatUnknown if given picture format is unknown.
NorthMode
Method for syncing rotation to a map's North direction.
@ GridNorth
Align to grid north.
@ TrueNorth
Align to true north.
friend class TestQgsCompositionConverter
QColor svgFillColor() const
Returns the fill color used for parametrized SVG files.
ResizeMode
Controls how pictures are scaled within the item's frame.
@ FrameToImageSize
Sets size of frame to match original size of image without scaling.
@ 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.
Contains settings and helpers relating to a render of a QgsLayoutItem.
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...
QgsLayoutItem(QgsLayout *layout, bool manageZValue=true)
Constructor for QgsLayoutItem, with the specified parent layout.
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:50
A container for the context for various read/write operations on objects.
#define SIP_FACTORY
Definition qgis_sip.h:84