QGIS API Documentation  3.16.0-Hannover (43b64b13f3)
qgslayoutitempicture.h
Go to the documentation of this file.
1 /***************************************************************************
2  qgslayoutitempicture.h
3  -------------------
4 begin : October 2017
5 copyright : (C) 2017 by Nyall Dawson
6 email : 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 
26 class QgsLayoutItemMap;
27 class QgsExpression;
29 
35 class CORE_EXPORT QgsLayoutItemPicture: public QgsLayoutItem
36 {
37  Q_OBJECT
38  public:
39 
44  {
45  Zoom,
47  Clip,
49  FrameToImageSize
50  };
51 
55  enum Format
56  {
60  };
61 
63  enum NorthMode
64  {
65  GridNorth = 0,
67  };
68 
73 
74  int type() const override;
75  QIcon icon() const override;
76 
82  static QgsLayoutItemPicture *create( QgsLayout *layout ) SIP_FACTORY;
83 
84 
94  void setPicturePath( const QString &path, Format format = FormatUnknown );
95 
103  QString picturePath() const;
104 
111  double pictureRotation() const { return mPictureRotation; }
112 
123  void setLinkedMap( QgsLayoutItemMap *map );
124 
131  QgsLayoutItemMap *linkedMap() const;
132 
138  NorthMode northMode() const;
139 
145  void setNorthMode( NorthMode mode );
146 
152  double northOffset() const;
153 
159  void setNorthOffset( double offset );
160 
166  ResizeMode resizeMode() const { return mResizeMode; }
167 
173  void setPictureAnchor( QgsLayoutItem::ReferencePoint anchor );
174 
180  QgsLayoutItem::ReferencePoint pictureAnchor() const { return mPictureAnchor; }
181 
187  QColor svgFillColor() const { return mSvgFillColor; }
188 
196  void setSvgFillColor( const QColor &color );
197 
203  QColor svgStrokeColor() const { return mSvgStrokeColor; }
204 
213  void setSvgStrokeColor( const QColor &color );
214 
220  double svgStrokeWidth() const { return mSvgStrokeWidth; }
221 
229  void setSvgStrokeWidth( double width );
230 
235  Format mode() const { return mMode; }
236 
242  void setMode( Format mode );
243 
244  void finalizeRestoreFromXml() override;
245 
252  bool isMissingImage() const;
253 
261  QString evaluatedPath() const;
262 
263  public slots:
264 
270  void setPictureRotation( double rotation );
271 
277  void setResizeMode( QgsLayoutItemPicture::ResizeMode mode );
278 
284  void refreshPicture( const QgsExpressionContext *context = nullptr );
285 
289  void recalculateSize();
290 
292 
293  signals:
295  void pictureRotationChanged( double newRotation );
296 
297  protected:
298 
299  void draw( QgsLayoutItemRenderContext &context ) override;
300  QSizeF applyItemSizeConstraint( QSizeF targetSize ) override;
301  bool writePropertiesToElement( QDomElement &element, QDomDocument &document, const QgsReadWriteContext &context ) const override;
302  bool readPropertiesFromElement( const QDomElement &element, const QDomDocument &document, const QgsReadWriteContext &context ) override;
303 
304  private:
305 
306  QgsLayoutItemPicture() = delete;
307 
309  QRectF boundedSVGRect( double deviceWidth, double deviceHeight );
311  QRectF boundedImageRect( double deviceWidth, double deviceHeight );
312 
314  QSizeF pictureSize();
315 
316  QImage mImage;
317  QSvgRenderer mSVG;
319  QString mSourcePath;
320  Format mMode = FormatUnknown;
321 
322  QSize mDefaultSvgSize;
323 
325  double mPictureRotation = 0;
326 
327  QString mRotationMapUuid;
328 
330  double mPictureWidth = 0.0;
332  double mPictureHeight = 0.0;
333 
335  QgsLayoutItem::ReferencePoint mPictureAnchor = UpperLeft;
336 
337  QColor mSvgFillColor = QColor( 255, 255, 255 );
338  QColor mSvgStrokeColor = QColor( 0, 0, 0 );
339  double mSvgStrokeWidth = 0.2;
340 
341  bool mHasExpressionError = false;
342  bool mLoaded = false;
343  bool mLoadingSvg = false;
344  bool mIsMissingImage = false;
345  QString mEvaluatedPath;
346 
347  QgsLayoutNorthArrowHandler *mNorthArrowHandler = nullptr;
348 
350  void loadPicture( const QVariant &data );
351 
356  QRect clippedImageRect( double &boundRectWidthMM, double &boundRectHeightMM, QSize imageRectPixels );
357 
361  void loadRemotePicture( const QString &url );
362 
366  void loadLocalPicture( const QString &path );
367 
368  void loadPictureUsingCache( const QString &path );
369 
370  QgsLayoutItemPicture( const QgsLayoutItemPicture & ) = delete;
371  QgsLayoutItemPicture &operator=( const QgsLayoutItemPicture & ) = delete;
372 
373  private slots:
374 
375  void updateNorthArrowRotation( double rotation );
376 
377  void shapeChanged();
378 
380  friend class TestQgsCompositionConverter;
381 
382 };
383 
384 #endif // QGSLAYOUTITEMPICTURE_H
QgsExpressionContext
Expression contexts are used to encapsulate the parameters around which a QgsExpression should be eva...
Definition: qgsexpressioncontext.h:370
QgsLayoutItem::applyItemSizeConstraint
virtual QSizeF applyItemSizeConstraint(QSizeF targetSize)
Applies any item-specific size constraint handling to a given targetSize in layout units.
Definition: qgslayoutitem.cpp:1263
QgsLayoutItemPicture::pictureRotationChanged
void pictureRotationChanged(double newRotation)
Emitted on picture rotation change.
QgsLayoutItem::writePropertiesToElement
virtual bool writePropertiesToElement(QDomElement &element, QDomDocument &document, const QgsReadWriteContext &context) const
Stores item state within an XML DOM element.
Definition: qgslayoutitem.cpp:1325
QgsReadWriteContext
The class is used as a container of context for various read/write operations on other objects.
Definition: qgsreadwritecontext.h:35
QgsLayoutItem::icon
virtual QIcon icon() const
Returns the item's icon.
Definition: qgslayoutitem.h:334
QgsLayoutItem::finalizeRestoreFromXml
virtual void finalizeRestoreFromXml()
Called after all pending items have been restored from XML.
Definition: qgslayoutitem.cpp:824
QgsLayoutItemRenderContext
Contains settings and helpers relating to a render of a QgsLayoutItem.
Definition: qgslayoutitem.h:45
QgsLayoutItemPicture::NorthMode
NorthMode
Method for syncing rotation to a map's North direction.
Definition: qgslayoutitempicture.h:64
QgsLayoutItem::refreshDataDefinedProperty
virtual void refreshDataDefinedProperty(QgsLayoutObject::DataDefinedProperty property=QgsLayoutObject::AllProperties)
Refreshes a data defined property for the item by reevaluating the property's value and redrawing the...
Definition: qgslayoutitem.cpp:1081
QgsLayoutItemPicture::svgFillColor
QColor svgFillColor() const
Returns the fill color used for parametrized SVG files.
Definition: qgslayoutitempicture.h:187
QgsLayoutItemPicture::svgStrokeColor
QColor svgStrokeColor() const
Returns the stroke color used for parametrized SVG files.
Definition: qgslayoutitempicture.h:203
QgsLayoutItem::ReferencePoint
ReferencePoint
Fixed position reference point.
Definition: qgslayoutitem.h:202
QgsLayoutItem::readPropertiesFromElement
virtual bool readPropertiesFromElement(const QDomElement &element, const QDomDocument &document, const QgsReadWriteContext &context)
Sets item state from a DOM element.
Definition: qgslayoutitem.cpp:1330
QgsLayoutItem::draw
virtual void draw(QgsLayoutItemRenderContext &context)=0
Draws the item's contents using the specified item render context.
QgsLayoutItemPicture::pictureAnchor
QgsLayoutItem::ReferencePoint pictureAnchor() const
Returns the picture's current anchor, which controls how it is placed within the picture item's frame...
Definition: qgslayoutitempicture.h:180
SIP_FACTORY
#define SIP_FACTORY
Definition: qgis_sip.h:76
QgsLayoutItem::type
int type() const override
Returns a unique graphics item type identifier.
Definition: qgslayoutitem.cpp:124
QgsLayoutItemPicture::pictureRotation
double pictureRotation() const
Returns the rotation used for drawing the picture within the item's frame, in degrees clockwise.
Definition: qgslayoutitempicture.h:111
QgsLayoutObject::AllProperties
@ AllProperties
All properties for item.
Definition: qgslayoutobject.h:135
QgsLayoutItemPicture::Stretch
@ Stretch
Stretches image to fit frame, ignores aspect ratio.
Definition: qgslayoutitempicture.h:46
qgslayoutitem.h
QgsCompositionConverter
QgsCompositionConverter class converts a QGIS 2.x composition to a QGIS 3.x layout.
Definition: qgscompositionconverter.h:55
QgsLayoutItemPicture::ZoomResizeFrame
@ ZoomResizeFrame
Enlarges image to fit frame, then resizes frame to fit resultant image.
Definition: qgslayoutitempicture.h:48
QgsLayoutItemPicture::Format
Format
Format of source image.
Definition: qgslayoutitempicture.h:56
QgsLayoutItemPicture::FormatUnknown
@ FormatUnknown
Invalid or unknown image type.
Definition: qgslayoutitempicture.h:59
QgsLayoutItemPicture::Clip
@ Clip
Draws image at original size and clips any portion which falls outside frame.
Definition: qgslayoutitempicture.h:47
QgsLayoutItemPicture::ResizeMode
ResizeMode
Controls how pictures are scaled within the item's frame.
Definition: qgslayoutitempicture.h:44
QgsLayoutItem
Base class for graphical items within a QgsLayout.
Definition: qgslayoutitem.h:113
QgsLayoutItemPicture::mode
Format mode() const
Returns the current picture mode (image format).
Definition: qgslayoutitempicture.h:235
QgsLayoutItemPicture::FormatSVG
@ FormatSVG
SVG image.
Definition: qgslayoutitempicture.h:57
QgsLayoutNorthArrowHandler
An object which handles north-arrow type behavior for layout items.
Definition: qgslayoutnortharrowhandler.h:33
QgsLayoutItemPicture
A layout item subclass that displays SVG files or raster format images (jpg, png, ....
Definition: qgslayoutitempicture.h:36
QgsLayoutItemMap
Layout graphical items for displaying a map.
Definition: qgslayoutitemmap.h:318
QgsLayoutItemPicture::Zoom
@ Zoom
Enlarges image to fit frame while maintaining aspect ratio of picture.
Definition: qgslayoutitempicture.h:45
QgsLayout
Base class for layouts, which can contain items such as maps, labels, scalebars, etc.
Definition: qgslayout.h:50
QgsLayoutItemPicture::TrueNorth
@ TrueNorth
Align to true north.
Definition: qgslayoutitempicture.h:66
QgsLayoutItemPicture::resizeMode
ResizeMode resizeMode() const
Returns the resize mode used for drawing the picture within the layout item's frame.
Definition: qgslayoutitempicture.h:166
QgsLayoutItemPicture::FormatRaster
@ FormatRaster
Raster image.
Definition: qgslayoutitempicture.h:58
QgsLayoutItemPicture::svgStrokeWidth
double svgStrokeWidth() const
Returns the stroke width (in layout units) used for parametrized SVG files.
Definition: qgslayoutitempicture.h:220
QgsExpression
Class for parsing and evaluation of expressions (formerly called "search strings").
Definition: qgsexpression.h:105
QgsLayoutItem::UpperLeft
@ UpperLeft
Upper left corner of item.
Definition: qgslayoutitem.h:203
QgsLayoutObject::DataDefinedProperty
DataDefinedProperty
Data defined properties for different item types.
Definition: qgslayoutobject.h:133