QGIS API Documentation  3.4.15-Madeira (e83d02e274)
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;
28 
34 class CORE_EXPORT QgsLayoutItemPicture: public QgsLayoutItem
35 {
36  Q_OBJECT
37  public:
38 
43  {
44  Zoom,
46  Clip,
48  FrameToImageSize
49  };
50 
54  enum Format
55  {
59  };
60 
62  enum NorthMode
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 
90  void setPicturePath( const QString &path );
91 
98  QString picturePath() const;
99 
106  double pictureRotation() const { return mPictureRotation; }
107 
118  void setLinkedMap( QgsLayoutItemMap *map );
119 
126  QgsLayoutItemMap *linkedMap() const;
127 
133  NorthMode northMode() const { return mNorthMode; }
134 
140  void setNorthMode( NorthMode mode );
141 
147  double northOffset() const { return mNorthOffset; }
148 
154  void setNorthOffset( double offset );
155 
161  ResizeMode resizeMode() const { return mResizeMode; }
162 
168  void setPictureAnchor( QgsLayoutItem::ReferencePoint anchor );
169 
175  QgsLayoutItem::ReferencePoint pictureAnchor() const { return mPictureAnchor; }
176 
182  QColor svgFillColor() const { return mSvgFillColor; }
183 
191  void setSvgFillColor( const QColor &color );
192 
198  QColor svgStrokeColor() const { return mSvgStrokeColor; }
199 
208  void setSvgStrokeColor( const QColor &color );
209 
215  double svgStrokeWidth() const { return mSvgStrokeWidth; }
216 
224  void setSvgStrokeWidth( double width );
225 
229  Format mode() const { return mMode; }
230 
231  void finalizeRestoreFromXml() override;
232 
233  public slots:
234 
240  void setPictureRotation( double rotation );
241 
247  void setResizeMode( QgsLayoutItemPicture::ResizeMode mode );
248 
254  void refreshPicture( const QgsExpressionContext *context = nullptr );
255 
259  void recalculateSize();
260 
262 
263  signals:
265  void pictureRotationChanged( double newRotation );
266 
267  protected:
268 
269  void draw( QgsLayoutItemRenderContext &context ) override;
270  QSizeF applyItemSizeConstraint( QSizeF targetSize ) override;
271  bool writePropertiesToElement( QDomElement &element, QDomDocument &document, const QgsReadWriteContext &context ) const override;
272  bool readPropertiesFromElement( const QDomElement &element, const QDomDocument &document, const QgsReadWriteContext &context ) override;
273 
274  private:
275 
276  QgsLayoutItemPicture() = delete;
277 
279  QRectF boundedSVGRect( double deviceWidth, double deviceHeight );
281  QRectF boundedImageRect( double deviceWidth, double deviceHeight );
282 
284  QSizeF pictureSize();
285 
286  QImage mImage;
287  QSvgRenderer mSVG;
289  QString mSourcePath;
290  Format mMode = FormatUnknown;
291 
292  QSize mDefaultSvgSize;
293 
295  double mPictureRotation = 0;
296 
297  QString mRotationMapUuid;
299  QPointer< QgsLayoutItemMap > mRotationMap;
300 
302  NorthMode mNorthMode = GridNorth;
304  double mNorthOffset = 0.0;
305 
307  double mPictureWidth = 0.0;
309  double mPictureHeight = 0.0;
310 
312  QgsLayoutItem::ReferencePoint mPictureAnchor = UpperLeft;
313 
314  QColor mSvgFillColor = QColor( 255, 255, 255 );
315  QColor mSvgStrokeColor = QColor( 0, 0, 0 );
316  double mSvgStrokeWidth = 0.2;
317 
318  bool mHasExpressionError = false;
319  bool mLoaded = false;
320  bool mLoadingSvg = false;
321 
323  void loadPicture( const QString &path );
324 
329  QRect clippedImageRect( double &boundRectWidthMM, double &boundRectHeightMM, QSize imageRectPixels );
330 
334  void loadRemotePicture( const QString &url );
335 
339  void loadLocalPicture( const QString &path );
340 
341  void disconnectMap( QgsLayoutItemMap *map );
342 
343  private slots:
344 
345  void updateMapRotation();
346 
347  void shapeChanged();
348 
350  friend class TestQgsCompositionConverter;
351 
352 };
353 
354 #endif // QGSLAYOUTITEMPICTURE_H
Class for parsing and evaluation of expressions (formerly called "search strings").
The class is used as a container of context for various read/write operations on other objects...
virtual QIcon icon() const
Returns the item&#39;s icon.
Base class for graphical items within a QgsLayout.
int type() const override
Returns a unique graphics item type identifier.
double pictureRotation() const
Returns the rotation used for drawing the picture within the item&#39;s frame, in degrees clockwise...
Stretches image to fit frame, ignores aspect ratio.
virtual bool writePropertiesToElement(QDomElement &element, QDomDocument &document, const QgsReadWriteContext &context) const
Stores item state within an XML DOM element.
A layout item subclass that displays SVG files or raster format images (jpg, png, ...
virtual void refreshDataDefinedProperty(QgsLayoutObject::DataDefinedProperty property=QgsLayoutObject::AllProperties)
Refreshes a data defined property for the item by reevaluating the property&#39;s value and redrawing the...
double svgStrokeWidth() const
Returns the stroke width (in layout units) used for parametrized SVG files.
NorthMode northMode() const
Returns the mode used to align the picture to a map&#39;s North.
ReferencePoint
Fixed position reference point.
Invalid or unknown image type.
Layout graphical items for displaying a map.
virtual bool readPropertiesFromElement(const QDomElement &element, const QDomDocument &document, const QgsReadWriteContext &context)
Sets item state from a DOM element.
Expression contexts are used to encapsulate the parameters around which a QgsExpression should be eva...
QColor svgStrokeColor() const
Returns the stroke color used for parametrized SVG files.
#define SIP_FACTORY
Definition: qgis_sip.h:69
Upper left corner of item.
QgsLayoutItem::ReferencePoint pictureAnchor() const
Returns the picture&#39;s current anchor, which controls how it is placed within the picture item&#39;s frame...
Base class for layouts, which can contain items such as maps, labels, scalebars, etc.
Definition: qgslayout.h:49
Contains settings and helpers relating to a render of a QgsLayoutItem.
Definition: qgslayoutitem.h:43
virtual void finalizeRestoreFromXml()
Called after all pending items have been restored from XML.
Enlarges image to fit frame, then resizes frame to fit resultant image.
QgsCompositionConverter class converts a QGIS 2.x composition to a QGIS 3.x layout.
NorthMode
Method for syncing rotation to a map&#39;s North direction.
Format
Format of source image.
ResizeMode resizeMode() const
Returns the resize mode used for drawing the picture within the composer item&#39;s frame.
QColor svgFillColor() const
Returns the fill color used for parametrized SVG files.
ResizeMode
Controls how pictures are scaled within the item&#39;s frame.
virtual QSizeF applyItemSizeConstraint(QSizeF targetSize)
Applies any item-specific size constraint handling to a given targetSize in layout units...
Draws image at original size and clips any portion which falls outside frame.
Format mode() const
Returns the current picture mode (image format).
virtual void draw(QgsLayoutItemRenderContext &context)=0
Draws the item&#39;s contents using the specified item render context.
Enlarges image to fit frame while maintaining aspect ratio of picture.
DataDefinedProperty
Data defined properties for different item types.
All properties for item.
double northOffset() const
Returns the offset added to the picture&#39;s rotation from a map&#39;s North.