QGIS API Documentation  3.0.2-Girona (307d082)
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 
99  QString picturePath() const;
100 
107  double pictureRotation() const { return mPictureRotation; }
108 
119  void setLinkedMap( QgsLayoutItemMap *map );
120 
127  QgsLayoutItemMap *linkedMap() const;
128 
134  NorthMode northMode() const { return mNorthMode; }
135 
141  void setNorthMode( NorthMode mode );
142 
148  double northOffset() const { return mNorthOffset; }
149 
155  void setNorthOffset( double offset );
156 
162  ResizeMode resizeMode() const { return mResizeMode; }
163 
169  void setPictureAnchor( QgsLayoutItem::ReferencePoint anchor );
170 
176  QgsLayoutItem::ReferencePoint pictureAnchor() const { return mPictureAnchor; }
177 
183  QColor svgFillColor() const { return mSvgFillColor; }
184 
192  void setSvgFillColor( const QColor &color );
193 
199  QColor svgStrokeColor() const { return mSvgStrokeColor; }
200 
209  void setSvgStrokeColor( const QColor &color );
210 
216  double svgStrokeWidth() const { return mSvgStrokeWidth; }
217 
225  void setSvgStrokeWidth( double width );
226 
230  Format mode() const { return mMode; }
231 
232  void finalizeRestoreFromXml() override;
233 
234  public slots:
235 
241  void setPictureRotation( double rotation );
242 
248  void setResizeMode( QgsLayoutItemPicture::ResizeMode mode );
249 
255  void refreshPicture( const QgsExpressionContext *context = nullptr );
256 
260  void recalculateSize();
261 
263  bool containsAdvancedEffects() const override;
264 
265  signals:
267  void pictureRotationChanged( double newRotation );
268 
269  protected:
270 
271  void draw( QgsLayoutItemRenderContext &context ) override;
272  QSizeF applyItemSizeConstraint( const QSizeF &targetSize ) override;
273  bool writePropertiesToElement( QDomElement &element, QDomDocument &document, const QgsReadWriteContext &context ) const override;
274  bool readPropertiesFromElement( const QDomElement &element, const QDomDocument &document, const QgsReadWriteContext &context ) override;
275 
276  private:
277 
278  QgsLayoutItemPicture() = delete;
279 
281  QRectF boundedSVGRect( double deviceWidth, double deviceHeight );
283  QRectF boundedImageRect( double deviceWidth, double deviceHeight );
284 
286  QSizeF pictureSize();
287 
288  QImage mImage;
289  QSvgRenderer mSVG;
291  QString mSourcePath;
292  Format mMode = FormatUnknown;
293 
294  QSize mDefaultSvgSize;
295 
297  double mPictureRotation = 0;
298 
299  QString mRotationMapUuid;
301  QPointer< QgsLayoutItemMap > mRotationMap;
302 
304  NorthMode mNorthMode = GridNorth;
306  double mNorthOffset = 0.0;
307 
309  double mPictureWidth = 0.0;
311  double mPictureHeight = 0.0;
312 
314  QgsLayoutItem::ReferencePoint mPictureAnchor = UpperLeft;
315 
316  QColor mSvgFillColor = QColor( 255, 255, 255 );
317  QColor mSvgStrokeColor = QColor( 0, 0, 0 );
318  double mSvgStrokeWidth = 0.2;
319 
320  bool mHasExpressionError = false;
321  bool mLoaded = false;
322  bool mLoadingSvg = false;
323 
325  void loadPicture( const QString &path );
326 
331  QRect clippedImageRect( double &boundRectWidthMM, double &boundRectHeightMM, QSize imageRectPixels );
332 
336  void loadRemotePicture( const QString &url );
337 
341  void loadLocalPicture( const QString &path );
342 
343  void disconnectMap( QgsLayoutItemMap *map );
344 
345  private slots:
346 
347  void updateMapRotation();
348 
349  void shapeChanged();
350 
352  friend class TestQgsCompositionConverter;
353 
354 };
355 
356 #endif // QGSLAYOUTITEMPICTURE_H
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).
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 refreshDataDefinedProperty(const QgsLayoutObject::DataDefinedProperty property=QgsLayoutObject::AllProperties)
Refreshes a data defined property for the item by reevaluating the property&#39;s value and redrawing the...
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.