3232#include " qgscomposerlabel.h"
3333#include " qgscomposerlegend.h"
3434#include " qgscomposermap.h"
35+ #include " qgscomposerhtml.h"
3536#include " qgscomposerpicture.h"
3637#include " qgscomposerscalebar.h"
3738#include " qgscomposershape.h"
@@ -2187,7 +2188,7 @@ QString QgsProjectParser::layerIdFromLegendLayer( const QDomElement& legendLayer
21872188 return legendLayerFileList.at ( 0 ).toElement ().attribute ( " layerid" );
21882189}
21892190
2190- QgsComposition* QgsProjectParser::initComposition ( const QString& composerTemplate, QgsMapRenderer* mapRenderer, QList< QgsComposerMap*>& mapList, QList< QgsComposerLabel* >& labelList ) const
2191+ QgsComposition* QgsProjectParser::initComposition ( const QString& composerTemplate, QgsMapRenderer* mapRenderer, QList< QgsComposerMap*>& mapList, QList< QgsComposerLabel* >& labelList, QList< const QgsComposerHtml *>& htmlList ) const
21912192{
21922193 // Create composition from xml
21932194 QDomElement composerElem = composerByName ( composerTemplate );
@@ -2210,15 +2211,40 @@ QgsComposition* QgsProjectParser::initComposition( const QString& composerTempla
22102211 }
22112212
22122213 composition->addItemsFromXML ( compositionElem, *mXMLDoc );
2213- composition->composerItems ( mapList );
2214- composition->composerItems ( labelList );
22152214
2216- QList< QgsComposerPicture* > pictureList;
2217- composition->composerItems ( pictureList );
2218- QList< QgsComposerPicture* >::iterator picIt = pictureList.begin ();
2219- for ( ; picIt != pictureList.end (); ++picIt )
2215+ labelList.clear ();
2216+ mapList.clear ();
2217+ htmlList.clear ();
2218+
2219+ QList<QgsComposerItem* > itemList;
2220+ composition->composerItems ( itemList );
2221+ QList<QgsComposerItem *>::iterator itemIt = itemList.begin ();
2222+ for ( ; itemIt != itemList.end (); ++itemIt )
22202223 {
2221- ( *picIt )->setPictureFile ( convertToAbsolutePath (( *picIt )->pictureFile () ) );
2224+ QgsComposerLabel* label = dynamic_cast < QgsComposerLabel *>( *itemIt );
2225+ if ( label )
2226+ {
2227+ labelList.push_back ( label );
2228+ continue ;
2229+ }
2230+ QgsComposerMap* map = dynamic_cast < QgsComposerMap *>( *itemIt );
2231+ if ( map )
2232+ {
2233+ mapList.push_back ( map );
2234+ continue ;
2235+ }
2236+ QgsComposerPicture* pic = dynamic_cast < QgsComposerPicture *>( *itemIt );
2237+ if ( pic )
2238+ {
2239+ pic->setPictureFile ( convertToAbsolutePath (( pic )->pictureFile () ) );
2240+ continue ;
2241+ }
2242+ const QgsComposerHtml* html = composition->getComposerHtmlByItem ( *itemIt );
2243+ if ( html )
2244+ {
2245+ htmlList.push_back ( html );
2246+ continue ;
2247+ }
22222248 }
22232249
22242250 return composition;
@@ -2294,6 +2320,21 @@ void QgsProjectParser::printCapabilities( QDomElement& parentElement, QDomDocume
22942320 composerTemplateElem.appendChild ( composerLabelElem );
22952321 }
22962322
2323+ // add available composer HTML
2324+ QDomNodeList composerHtmlList = currentComposerElem.elementsByTagName ( " ComposerHtml" );
2325+ for ( int j = 0 ; j < composerHtmlList.size (); ++j )
2326+ {
2327+ QDomElement citem = composerHtmlList.at ( j ).firstChildElement ( " ComposerFrame" ).firstChildElement ( " ComposerItem" );
2328+ QString id = citem.attribute ( " id" );
2329+ if ( id.isEmpty () ) // only export labels with ids for text replacement
2330+ {
2331+ continue ;
2332+ }
2333+ QDomElement composerHtmlElem = doc.createElement ( " ComposerHtml" );
2334+ composerHtmlElem.setAttribute ( " name" , id );
2335+ composerTemplateElem.appendChild ( composerHtmlElem );
2336+ }
2337+
22972338 composerTemplatesElem.appendChild ( composerTemplateElem );
22982339 }
22992340 parentElement.appendChild ( composerTemplatesElem );
0 commit comments