QGIS API Documentation 3.32.0-Lima (311a8cb8a6)
qgslayoutitemhtml.h
Go to the documentation of this file.
1/***************************************************************************
2 qgslayoutitemhtml.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 * This program is free software; you can redistribute it and/or modify *
10 * it under the terms of the GNU General Public License as published by *
11 * the Free Software Foundation; either version 2 of the License, or *
12 * (at your option) any later version. *
13 * *
14 ***************************************************************************/
15
16#ifndef QGSLAYOUTITEMHTML_H
17#define QGSLAYOUTITEMHTML_H
18
19#include "qgis_core.h"
20#include "qgis_sip.h"
21#include "qgslayoutmultiframe.h"
22#include "qgsfeature.h"
23#include "qgsdistancearea.h"
24#include <QUrl>
25
26class QgsWebPage;
27class QImage;
29class QgsVectorLayer;
31
37class CORE_EXPORT QgsLayoutItemHtml: public QgsLayoutMultiFrame
38{
39 Q_OBJECT
40
41 public:
42
45 {
47 ManualHtml
48 };
49
56
57 ~QgsLayoutItemHtml() override;
58
59 int type() const override;
60 QIcon icon() const override;
61
65 static QgsLayoutItemHtml *create( QgsLayout *layout ) SIP_FACTORY;
66
72 static QgsLayoutItemHtml *createFromLabel( QgsLayoutItemLabel *label ) SIP_FACTORY;
73
80 void setContentMode( ContentMode mode ) { mContentMode = mode; }
81
88 ContentMode contentMode() const { return mContentMode; }
89
97 void setUrl( const QUrl &url );
98
105 QUrl url() const { return mUrl; }
106
116 void setHtml( const QString &html );
117
124 QString html() const { return mHtml; }
125
133 bool evaluateExpressions() const { return mEvaluateExpressions; }
134
142 void setEvaluateExpressions( bool evaluateExpressions );
143
149 bool useSmartBreaks() const { return mUseSmartBreaks; }
150
156 void setUseSmartBreaks( bool useSmartBreaks );
157
168 void setMaxBreakDistance( double distance );
169
178 double maxBreakDistance() const { return mMaxBreakDistance; }
179
189 void setUserStylesheet( const QString &stylesheet );
190
197 QString userStylesheet() const { return mUserStylesheet; }
198
204 void setUserStylesheetEnabled( bool enabled );
205
211 bool userStylesheetEnabled() const { return mEnableUserStylesheet; }
212
213 QString displayName() const override;
214 QSizeF totalSize() const override;
215 void render( QgsLayoutItemRenderContext &context, const QRectF &renderExtent, int frameIndex ) override;
216
217 //overridden to break frames without dividing lines of text
218 double findNearbyPageBreak( double yPos ) override;
219
220 public slots:
221
230 void loadHtml( bool useCache = false, const QgsExpressionContext *context = nullptr );
231
233 void recalculateFrameSizes() override;
234
236
237 protected:
238
239 bool writePropertiesToElement( QDomElement &elem, QDomDocument &doc, const QgsReadWriteContext &context ) const override;
240 bool readPropertiesFromElement( const QDomElement &itemElem, const QDomDocument &doc, const QgsReadWriteContext &context ) override;
241
242 private:
243 ContentMode mContentMode = QgsLayoutItemHtml::Url;
244 QUrl mUrl;
245 std::unique_ptr< QgsWebPage > mWebPage;
246 QString mHtml;
247 QString mFetchedHtml;
248 QString mLastFetchedUrl;
249 QString mActualFetchedUrl; //may be different if page was redirected
250 QSizeF mSize; //total size in mm
251 double mHtmlUnitsToLayoutUnits = 1.0;
252 QImage mRenderedPage;
253 bool mEvaluateExpressions = true;
254 bool mUseSmartBreaks = true;
255 double mMaxBreakDistance = 10.0;
256
257 QgsFeature mExpressionFeature;
258 QgsVectorLayer *mExpressionLayer = nullptr;
259 QgsDistanceArea mDistanceArea;
260
261 QString mUserStylesheet;
262 bool mEnableUserStylesheet = false;
263
265 QString mAtlasFeatureJSON;
266
267 QgsNetworkContentFetcher *mFetcher = nullptr;
268
269 double htmlUnitsToLayoutUnits(); //calculate scale factor
270
271 //renders a snapshot of the page to a cached image
272 void renderCachedImage();
273
274 //fetches html content from a url and returns it as a string
275 QString fetchHtml( const QUrl &url );
276
278 void setExpressionContext( const QgsFeature &feature, QgsVectorLayer *layer );
279
281 double maxFrameWidth() const;
282
283 void refreshExpressionContext();
284
285 QgsLayoutItemHtml( const QgsLayoutItemHtml & ) = delete;
286 QgsLayoutItemHtml &operator=( const QgsLayoutItemHtml & ) = delete;
287};
288
290#ifndef SIP_RUN
291class JavascriptExecutorLoop : public QEventLoop
292{
293 Q_OBJECT
294 public slots:
295
296 void done();
297 void execIfNotDone();
298 void reportError( const QString &error );
299
300 private:
301
302 bool mDone = false;
303
304};
305#endif
307
308#endif // QGSLAYOUTITEMHTML_H
A general purpose distance and area calculator, capable of performing ellipsoid based calculations.
Expression contexts are used to encapsulate the parameters around which a QgsExpression should be eva...
The feature class encapsulates a single feature including its unique ID, geometry and a list of field...
Definition: qgsfeature.h:56
A layout multiframe subclass for HTML content.
bool userStylesheetEnabled() const
Returns whether user stylesheets are enabled for the HTML content.
ContentMode contentMode() const
Returns the source mode for item's HTML content.
ContentMode
Source modes for the HTML content to render in the item.
@ Url
Using this mode item fetches its content via a url.
QString userStylesheet() const
Returns the user stylesheet CSS rules used while rendering the HTML content.
QString html() const
Returns the HTML source displayed in the item if the item is using the QgsLayoutItemHtml::ManualHtml ...
double maxBreakDistance() const
Returns the maximum distance allowed when calculating where to place page breaks in the html.
bool evaluateExpressions() const
Returns whether html item will evaluate QGIS expressions prior to rendering the HTML content.
QUrl url() const
Returns the URL of the content displayed in the item if the item is using the QgsLayoutItemHtml::Url ...
void setContentMode(ContentMode mode)
Sets the source mode for item's HTML content.
bool useSmartBreaks() const
Returns whether html item is using smart breaks.
A layout item subclass for text labels.
Contains settings and helpers relating to a render of a QgsLayoutItem.
Definition: qgslayoutitem.h:44
Abstract base class for layout items with the ability to distribute the content to several frames (Qg...
virtual bool writePropertiesToElement(QDomElement &element, QDomDocument &document, const QgsReadWriteContext &context) const
Stores multiframe state within an XML DOM element.
virtual QSizeF totalSize() const =0
Returns the total size of the multiframe's content, in layout units.
virtual int type() const =0
Returns unique multiframe type id.
virtual QIcon icon() const
Returns the item's icon.
virtual double findNearbyPageBreak(double yPos)
Finds the optimal position to break a frame at.
virtual void recalculateFrameSizes()
Recalculates the portion of the multiframe item which is shown in each of its component frames.
virtual bool readPropertiesFromElement(const QDomElement &element, const QDomDocument &document, const QgsReadWriteContext &context)
Sets multiframe state from a DOM element.
virtual QString displayName() const
Returns the multiframe display name.
virtual void refreshDataDefinedProperty(QgsLayoutObject::DataDefinedProperty property=QgsLayoutObject::AllProperties)
Refreshes a data defined property for the multi frame by reevaluating the property's value and redraw...
virtual void render(QgsLayoutItemRenderContext &context, const QRectF &renderExtent, int frameIndex)=0
Renders a portion of the multiframe's content into a render context.
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
HTTP network content fetcher.
The class is used as a container of context for various read/write operations on other objects.
Represents a vector layer which manages a vector based data sets.
QWebPage subclass which redirects JavaScript errors and console output to the QGIS message log.
Definition: qgswebpage.h:218
#define SIP_TRANSFERTHIS
Definition: qgis_sip.h:53
#define SIP_FACTORY
Definition: qgis_sip.h:76