36#include <QGraphicsProxyWidget>
42#include "moc_qgshtmlannotation.cpp"
48 mWebPage->mainFrame()->setScrollBarPolicy( Qt::Horizontal, Qt::ScrollBarAlwaysOff );
49 mWebPage->mainFrame()->setScrollBarPolicy( Qt::Vertical, Qt::ScrollBarAlwaysOff );
53 QPalette palette = mWebPage->palette();
54 palette.setBrush( QPalette::Base, Qt::transparent );
55 mWebPage->setPalette( palette );
57 connect( mWebPage->mainFrame(), &QWebFrame::javaScriptWindowObjectCleared,
this, &QgsHtmlAnnotation::javascript );
62 auto c = std::make_unique<QgsHtmlAnnotation>();
64 c->setSourceFile( mHtmlFile );
70 QFile file( htmlFile );
72 if ( !file.open( QIODevice::ReadOnly | QIODevice::Text ) )
78 QTextStream in( &file );
79#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
80 in.setCodec(
"UTF-8" );
82 mHtmlSource = in.readAll();
107 const double scaleFactor = context.
painter()->device()->logicalDpiX() / 96.0;
108 context.
painter()->scale( scaleFactor, scaleFactor );
111 mWebPage->setViewportSize( size.toSize() );
112 mWebPage->mainFrame()->render( context.
painter() );
119 const QSizeF widgetMinSize = QSizeF( 0, 0 );
125 return QSizeF( 0, 0 );
131 QDomElement formAnnotationElem = doc.createElement( QStringLiteral(
"HtmlAnnotationItem" ) );
132 if ( !mHtmlFile.isEmpty() )
134 formAnnotationElem.setAttribute( QStringLiteral(
"htmlfile" ),
sourceFile() );
138 formAnnotationElem.setAttribute( QStringLiteral(
"htmlsource" ), mHtmlSource );
141 _writeXml( formAnnotationElem, doc, context );
142 elem.appendChild( formAnnotationElem );
147 const QDomElement annotationElem = itemElem.firstChildElement( QStringLiteral(
"AnnotationItem" ) );
148 if ( !annotationElem.isNull() )
150 _readXml( annotationElem, context );
154 if ( !
mapLayer() && itemElem.hasAttribute( QStringLiteral(
"vectorLayer" ) ) )
161 mHtmlFile = itemElem.attribute( QStringLiteral(
"htmlfile" ), QString() );
162 if ( !mHtmlFile.isEmpty() )
168 setHtmlSource( itemElem.attribute( QStringLiteral(
"htmlsource" ), QString() ) );
178 if ( feature.
isValid() && vectorLayer )
186 newText = mHtmlSource;
188 mWebPage->mainFrame()->setHtml( newText );
192void QgsHtmlAnnotation::javascript()
194 QWebFrame *frame = mWebPage->mainFrame();
195 frame->addToJavaScriptWindowObject( QStringLiteral(
"layer" ),
mapLayer() );
A collection of stubs to mimic the API of a QWebFrame on systems where QtWebkit is not available.
void appearanceChanged()
Emitted whenever the annotation's appearance changes.
QgsMargins contentsMargin() const
Returns the margins (in millimeters) between the outside of the frame and the annotation content.
void _writeXml(QDomElement &itemElem, QDomDocument &doc, const QgsReadWriteContext &context) const
Writes common annotation properties to a DOM element.
QgsMapLayer * mapLayer() const
Returns the map layer associated with the annotation.
virtual void setAssociatedFeature(const QgsFeature &feature)
Sets the feature associated with the annotation.
QgsFeature associatedFeature() const
Returns the feature associated with the annotation, or an invalid feature if none has been set.
void _readXml(const QDomElement &annotationElem, const QgsReadWriteContext &context)
Reads common annotation properties from a DOM element.
void copyCommonProperties(QgsAnnotation *target) const
Copies common annotation properties to the targe annotation.
QgsAnnotation(QObject *parent=nullptr)
Constructor for QgsAnnotation.
void setMapLayer(QgsMapLayer *layer)
Sets the map layer associated with the annotation.
static QList< QgsExpressionContextScope * > globalProjectLayerScopes(const QgsMapLayer *layer)
Creates a list of three scopes: global, layer's project and layer.
Expression contexts are used to encapsulate the parameters around which a QgsExpression should be eva...
void setFeature(const QgsFeature &feature)
Convenience function for setting a feature for the context.
static QString replaceExpressionText(const QString &action, const QgsExpressionContext *context, const QgsDistanceArea *distanceArea=nullptr)
This function replaces each expression between [% and %] in the string with the result of its evaluat...
The feature class encapsulates a single feature including its unique ID, geometry and a list of field...
bool isValid() const
Returns the validity of this feature.
bool isCanceled() const
Tells whether the operation has been canceled already.
QgsHtmlAnnotation * clone() const override
Clones the annotation, returning a new copy of the annotation reflecting the annotation's current sta...
QString htmlSource() const
Returns html source text.
QgsHtmlAnnotation(QObject *parent=nullptr)
Constructor for QgsHtmlAnnotation.
void writeXml(QDomElement &elem, QDomDocument &doc, const QgsReadWriteContext &context) const override
Writes the annotation state to a DOM element.
void readXml(const QDomElement &itemElem, const QgsReadWriteContext &context) override
Restores the annotation's state from a DOM element.
void setSourceFile(const QString &htmlFile)
Sets the file path for the source HTML file.
QSizeF minimumFrameSize() const override
Returns the minimum frame size for the annotation.
void setHtmlSource(const QString &htmlSource)
Sets the html source directly (not coming from a file).
void setAssociatedFeature(const QgsFeature &feature) override
Sets the feature associated with the annotation.
void renderAnnotation(QgsRenderContext &context, QSizeF size) const override
Renders the annotation's contents to a target /a context at the specified /a size.
QString sourceFile() const
Returns the file path for the source HTML file.
static QgsNetworkAccessManager * instance(Qt::ConnectionType connectionType=Qt::BlockingQueuedConnection)
Returns a pointer to the active QgsNetworkAccessManager for the current thread.
static QgsProject * instance()
Returns the QgsProject singleton instance.
A container for the context for various read/write operations on objects.
Contains information about the context of a rendering operation.
QPainter * painter()
Returns the destination QPainter for the render operation.
QgsFeedback * feedback() const
Returns the feedback object that can be queried regularly during rendering to check if rendering shou...
Scoped object for saving and restoring a QPainter object's state.
Represents a vector layer which manages a vector based dataset.
QWebPage subclass which redirects JavaScript errors and console output to the QGIS message log.
As part of the API refactoring and improvements which landed in the Processing API was substantially reworked from the x version This was done in order to allow much of the underlying Processing framework to be ported into c