29 #include <QDomElement>
33 #include <QGraphicsProxyWidget>
40 :
QgsAnnotationItem( canvas ), mWidgetContainer( 0 ), mWebView( 0 ), mVectorLayer( vlayer ),
41 mHasAssociatedFeature( hasFeature ), mFeatureId( feature )
43 mWebView =
new QWebView();
46 mWidgetContainer =
new QGraphicsProxyWidget(
this );
47 mWidgetContainer->setWidget( mWebView );
49 QObject::connect( mWebView->page()->mainFrame(), SIGNAL( javaScriptWindowObjectCleared() ),
this, SLOT( javascript() ) );
53 QObject::connect( mVectorLayer, SIGNAL( layerModified() ),
this, SLOT( setFeatureForMapPosition() ) );
54 QObject::connect(
mMapCanvas, SIGNAL( renderComplete( QPainter* ) ),
this, SLOT( setFeatureForMapPosition() ) );
55 QObject::connect(
mMapCanvas, SIGNAL( layersChanged() ),
this, SLOT( updateVisibility() ) );
58 setFeatureForMapPosition();
68 QFile
file( htmlFile );
70 if ( !file.open( QIODevice::ReadOnly | QIODevice::Text ) )
76 QTextStream in( &file );
77 in.setCodec(
"UTF-8" );
78 mHtmlSource = in.readAll();
82 setFeatureForMapPosition();
88 setFeatureForMapPosition();
100 if ( !painter || !mWidgetContainer )
114 if ( data( 1 ).toString() ==
"composer" )
129 QSizeF widgetMinSize = mWebView->minimumSize();
134 return QSizeF( 0, 0 );
140 QDomElement documentElem = doc.documentElement();
141 if ( documentElem.isNull() )
146 QDomElement formAnnotationElem = doc.createElement(
"HtmlAnnotationItem" );
149 formAnnotationElem.setAttribute(
"vectorLayer", mVectorLayer->
id() );
151 formAnnotationElem.setAttribute(
"hasFeature", mHasAssociatedFeature );
152 formAnnotationElem.setAttribute(
"feature", mFeatureId );
153 formAnnotationElem.setAttribute(
"htmlfile",
htmlPage() );
156 documentElem.appendChild( formAnnotationElem );
162 if ( itemElem.hasAttribute(
"vectorLayer" ) )
167 QObject::connect( mVectorLayer, SIGNAL( layerModified() ),
this, SLOT( setFeatureForMapPosition() ) );
168 QObject::connect(
mMapCanvas, SIGNAL( renderComplete( QPainter* ) ),
this, SLOT( setFeatureForMapPosition() ) );
169 QObject::connect(
mMapCanvas, SIGNAL( layersChanged() ),
this, SLOT( updateVisibility() ) );
172 mHasAssociatedFeature = itemElem.attribute(
"hasFeature",
"0" ).toInt();
173 mFeatureId = itemElem.attribute(
"feature",
"0" ).toInt();
174 mHtmlFile = itemElem.attribute(
"htmlfile",
"" );
175 QDomElement annotationElem = itemElem.firstChildElement(
"AnnotationItem" );
176 if ( !annotationElem.isNull() )
188 void QgsHtmlAnnotationItem::setFeatureForMapPosition()
204 bool featureFound =
false;
206 while ( fit.nextFeature( currentFeature ) )
208 currentFeatureId = currentFeature.
id();
213 mHasAssociatedFeature = featureFound;
214 mFeatureId = currentFeatureId;
215 mFeature = currentFeature;
218 mWebView->setHtml( newtext );
221 void QgsHtmlAnnotationItem::updateVisibility()
228 setVisible( visible );
231 void QgsHtmlAnnotationItem::javascript()
233 QWebFrame *frame = mWebView->page()->mainFrame();
234 frame->addToJavaScriptWindowObject(
"canvas",
mMapCanvas );
235 frame->addToJavaScriptWindowObject(
"layer", mVectorLayer );