QGIS API Documentation  3.18.1-Zürich (202f1bf7e5)
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
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.
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).
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:45
Base class for graphical items within a QgsLayout.
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 void refreshDataDefinedProperty(QgsLayoutObject::DataDefinedProperty property=QgsLayoutObject::AllProperties)
Refreshes a data defined property for the item by reevaluating the property's value and redrawing the...
virtual QSizeF applyItemSizeConstraint(QSizeF targetSize)
Applies any item-specific size constraint handling to a given targetSize in layout units.
virtual QIcon icon() const
Returns the item's icon.
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
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