2626#include < QImage>
2727
2828QgsComposerHtml::QgsComposerHtml ( QgsComposition* c, bool createUndoCommands ): QgsComposerMultiFrame( c, createUndoCommands ),
29+ mContentMode( QgsComposerHtml::Url ),
2930 mWebPage( 0 ),
3031 mLoaded( false ),
3132 mHtmlUnitsToMM( 1.0 ),
@@ -45,6 +46,7 @@ QgsComposerHtml::QgsComposerHtml( QgsComposition* c, bool createUndoCommands ):
4546}
4647
4748QgsComposerHtml::QgsComposerHtml (): QgsComposerMultiFrame( 0 , false ),
49+ mContentMode( QgsComposerHtml::Url ),
4850 mWebPage( 0 ),
4951 mLoaded( false ),
5052 mHtmlUnitsToMM( 1.0 ),
@@ -71,15 +73,31 @@ void QgsComposerHtml::setUrl( const QUrl& url )
7173 loadHtml ();
7274}
7375
76+ void QgsComposerHtml::setHtml ( const QString html )
77+ {
78+ mHtml = html;
79+ }
80+
7481void QgsComposerHtml::loadHtml ()
7582{
76- if ( !mWebPage || mUrl .isEmpty () )
83+ if ( !mWebPage || ( mContentMode == QgsComposerHtml::Url && mUrl .isEmpty () ) )
7784 {
7885 return ;
7986 }
8087
8188 mLoaded = false ;
82- mWebPage ->mainFrame ()->load ( mUrl );
89+ // set contents
90+ switch ( mContentMode )
91+ {
92+ case QgsComposerHtml::Url:
93+ mWebPage ->mainFrame ()->load ( mUrl );
94+ break ;
95+ case QgsComposerHtml::ManualHtml:
96+ mWebPage ->mainFrame ()->setHtml ( mHtml );
97+ break ;
98+ }
99+
100+ // pause until HTML loaded
83101 while ( !mLoaded )
84102 {
85103 qApp->processEvents ();
@@ -282,7 +300,9 @@ void QgsComposerHtml::setMaxBreakDistance( double maxBreakDistance )
282300bool QgsComposerHtml::writeXML ( QDomElement& elem, QDomDocument & doc, bool ignoreFrames ) const
283301{
284302 QDomElement htmlElem = doc.createElement ( " ComposerHtml" );
303+ htmlElem.setAttribute ( " contentMode" , QString::number (( int ) mContentMode ) );
285304 htmlElem.setAttribute ( " url" , mUrl .toString () );
305+ htmlElem.setAttribute ( " html" , mHtml );
286306 htmlElem.setAttribute ( " useSmartBreaks" , mUseSmartBreaks ? " true" : " false" );
287307 htmlElem.setAttribute ( " maxBreakDistance" , QString::number ( mMaxBreakDistance ) );
288308
@@ -301,9 +321,15 @@ bool QgsComposerHtml::readXML( const QDomElement& itemElem, const QDomDocument&
301321 return false ;
302322 }
303323
324+ bool contentModeOK;
325+ mContentMode = ( QgsComposerHtml::ContentMode )itemElem.attribute ( " contentMode" ).toInt ( &contentModeOK );
326+ if ( !contentModeOK )
327+ {
328+ mContentMode = QgsComposerHtml::Url;
329+ }
304330 mUseSmartBreaks = itemElem.attribute ( " useSmartBreaks" , " true" ) == " true" ? true : false ;
305331 mMaxBreakDistance = itemElem.attribute ( " maxBreakDistance" , " 10" ).toDouble ();
306-
332+ mHtml = itemElem. attribute ( " html " );
307333 // finally load the set url
308334 QString urlString = itemElem.attribute ( " url" );
309335 if ( !urlString.isEmpty () )
0 commit comments