QGIS API Documentation  2.9.0-Master
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
qgscomposerhtml.h
Go to the documentation of this file.
1 /***************************************************************************
2  qgscomposerhtml.h
3  ------------------------------------------------------------
4  begin : July 2012
5  copyright : (C) 2012 by Marco Hugentobler
6  email : marco dot hugentobler at sourcepole dot ch
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 QGSCOMPOSERHTML_H
17 #define QGSCOMPOSERHTML_H
18 
19 #include "qgscomposermultiframe.h"
20 #include <QUrl>
21 
22 class QWebPage;
23 class QImage;
24 class QgsFeature;
25 class QgsVectorLayer;
27 class QgsDistanceArea;
28 
29 class CORE_EXPORT QgsComposerHtml: public QgsComposerMultiFrame
30 {
31  Q_OBJECT
32  public:
33 
37  {
38  Url,
39  ManualHtml
40  };
41 
42  QgsComposerHtml( QgsComposition* c, bool createUndoCommands );
43 
44  //should be private - fix for QGIS 3.0
46 
47  ~QgsComposerHtml();
48 
56  void setContentMode( ContentMode mode ) { mContentMode = mode; }
57 
65  ContentMode contentMode() const { return mContentMode; }
66 
74  void setUrl( const QUrl& url );
75 
82  const QUrl& url() const { return mUrl; }
83 
94  void setHtml( const QString html );
95 
103  QString html() const { return mHtml; }
104 
113  bool evaluateExpressions() const { return mEvaluateExpressions; }
114 
123  void setEvaluateExpressions( bool evaluateExpressions );
124 
130  bool useSmartBreaks() const { return mUseSmartBreaks; }
131 
138  void setUseSmartBreaks( bool useSmartBreaks );
139 
152  void setMaxBreakDistance( double maxBreakDistance );
153 
163  double maxBreakDistance() const { return mMaxBreakDistance; }
164 
175  void setUserStylesheet( const QString stylesheet );
176 
184  QString userStylesheet() const { return mUserStylesheet; }
185 
192  void setUserStylesheetEnabled( const bool stylesheetEnabled );
193 
200  bool userStylesheetEnabled() const { return mEnableUserStylesheet; }
201 
202  virtual QString displayName() const override;
203  QSizeF totalSize() const override;
204  void render( QPainter* p, const QRectF& renderExtent, const int frameIndex ) override;
205  bool writeXML( QDomElement& elem, QDomDocument & doc, bool ignoreFrames = false ) const override;
206  bool readXML( const QDomElement& itemElem, const QDomDocument& doc, bool ignoreFrames = false ) override;
207  void addFrame( QgsComposerFrame* frame, bool recalcFrameSizes = true ) override;
208  //overriden to break frames without dividing lines of text
209  double findNearbyPageBreak( double yPos ) override;
210 
211  public slots:
212 
219  void loadHtml( const bool useCache = false );
220 
222  void recalculateFrameSizes() override;
223  void refreshExpressionContext();
224 
226 
227  private slots:
228  void frameLoaded( bool ok = true );
229 
230  private:
231  ContentMode mContentMode;
232  QUrl mUrl;
233  QWebPage* mWebPage;
234  QString mHtml;
235  QString mFetchedHtml;
236  QString mLastFetchedUrl;
237  QString mActualFetchedUrl; //may be different if page was redirected
238  bool mLoaded;
239  QSizeF mSize; //total size in mm
240  double mHtmlUnitsToMM;
241  QImage* mRenderedPage;
242  bool mEvaluateExpressions;
243  bool mUseSmartBreaks;
244  double mMaxBreakDistance;
245 
246  QgsFeature* mExpressionFeature;
247  QgsVectorLayer* mExpressionLayer;
248  QgsDistanceArea* mDistanceArea;
249 
250  QString mUserStylesheet;
251  bool mEnableUserStylesheet;
252 
253  QgsNetworkContentFetcher* mFetcher;
254 
255  double htmlUnitsToMM(); //calculate scale factor
256 
257  //renders a snapshot of the page to a cached image
258  void renderCachedImage();
259 
260  //fetches html content from a url and returns it as a string
261  QString fetchHtml( QUrl url );
262 
264  void setExpressionContext( QgsFeature* feature, QgsVectorLayer* layer );
265 
267  double maxFrameWidth() const;
268 };
269 
270 #endif // QGSCOMPOSERHTML_H