QGIS API Documentation  3.2.0-Bonn (bc43194)
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  bool containsAdvancedEffects() const override;
263 
264  signals:
266  void pictureRotationChanged( double newRotation );
267 
268  protected:
269 
270  void draw( QgsLayoutItemRenderContext &context ) override;
271  QSizeF applyItemSizeConstraint( const QSizeF &targetSize ) override;
272  bool writePropertiesToElement( QDomElement &element, QDomDocument &document, const QgsReadWriteContext &context ) const override;
273  bool readPropertiesFromElement( const QDomElement &element, const QDomDocument &document, const QgsReadWriteContext &context ) override;
274 
275  private:
276 
277  QgsLayoutItemPicture() = delete;
278 
280  QRectF boundedSVGRect( double deviceWidth, double deviceHeight );
282  QRectF boundedImageRect( double deviceWidth, double deviceHeight );
283 
285  QSizeF pictureSize();
286 
287  QImage mImage;
288  QSvgRenderer mSVG;
290  QString mSourcePath;
291  Format mMode = FormatUnknown;
292 
293  QSize mDefaultSvgSize;
294 
296  double mPictureRotation = 0;
297 
298  QString mRotationMapUuid;
300  QPointer< QgsLayoutItemMap > mRotationMap;
301 
303  NorthMode mNorthMode = GridNorth;
305  double mNorthOffset = 0.0;
306 
308  double mPictureWidth = 0.0;
310  double mPictureHeight = 0.0;
311 
313  QgsLayoutItem::ReferencePoint mPictureAnchor = UpperLeft;
314 
315  QColor mSvgFillColor = QColor( 255, 255, 255 );
316  QColor mSvgStrokeColor = QColor( 0, 0, 0 );
317  double mSvgStrokeWidth = 0.2;
318 
319  bool mHasExpressionError = false;
320  bool mLoaded = false;
321  bool mLoadingSvg = false;
322 
324  void loadPicture( const QString &path );
325 
330  QRect clippedImageRect( double &boundRectWidthMM, double &boundRectHeightMM, QSize imageRectPixels );
331 
335  void loadRemotePicture( const QString &url );
336 
340  void loadLocalPicture( const QString &path );
341 
342  void disconnectMap( QgsLayoutItemMap *map );
343 
344  private slots:
345 
346  void updateMapRotation();
347 
348  void shapeChanged();
349 
351  friend class TestQgsCompositionConverter;
352 
353 };
354 
355 #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.
virtual bool containsAdvancedEffects() const
Returns true if the item contains contents with blend modes or transparency effects which can only be...
double northOffset() const
Returns the offset added to the picture&#39;s rotation from a map&#39;s North.
Stretches image to fit frame, ignores aspect ratio.
QColor svgStrokeColor() const
Returns the stroke color used for parametrized SVG files.
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&#39;s frame, in degrees clockwise...
Format mode() const
Returns the current picture mode (image format).
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...
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.
QgsLayoutItem::ReferencePoint pictureAnchor() const
Returns the picture&#39;s current anchor, which controls how it is placed within the picture item&#39;s frame...
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...
double svgStrokeWidth() const
Returns the stroke width (in layout units) used for parametrized SVG files.
#define SIP_FACTORY
Definition: qgis_sip.h:69
Upper left corner of item.
Base class for layouts, which can contain items such as maps, labels, scalebars, etc.
Definition: qgslayout.h:49
QColor svgFillColor() const
Returns the fill color used for parametrized SVG files.
ResizeMode resizeMode() const
Returns the resize mode used for drawing the picture within the composer item&#39;s frame.
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.
virtual QSizeF applyItemSizeConstraint(const QSizeF &targetSize)
Applies any item-specific size constraint handling to a given targetSize in layout units...
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
Controls how pictures are scaled within the item&#39;s frame.
virtual bool writePropertiesToElement(QDomElement &element, QDomDocument &document, const QgsReadWriteContext &context) const
Stores item state within an XML DOM element.
Draws image at original size and clips any portion which falls outside frame.
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.