QgsComposerHtml::QgsComposerHtml( QgsComposition* c, bool createUndoCommands ) : QgsComposerMultiFrame( c, createUndoCommands ) , mContentMode( QgsComposerHtml::Url ) , mWebPage( nullptr ) , mLoaded( false ) , mHtmlUnitsToMM( 1.0 ) , mRenderedPage( nullptr ) , mEvaluateExpressions( true ) , mUseSmartBreaks( true ) , mMaxBreakDistance( 10 ) , mExpressionLayer( nullptr ) , mDistanceArea( nullptr ) , mEnableUserStylesheet( false ) , mFetcher( nullptr ) { mDistanceArea = new QgsDistanceArea(); mHtmlUnitsToMM = htmlUnitsToMM(); mWebPage = new QgsWebPage(); mWebPage->setIdentifier( tr( "Composer HTML item" ) ); mWebPage->mainFrame()->setScrollBarPolicy( Qt::Horizontal, Qt::ScrollBarAlwaysOff ); mWebPage->mainFrame()->setScrollBarPolicy( Qt::Vertical, Qt::ScrollBarAlwaysOff ); //This makes the background transparent. Found on http://blog.qt.digia.com/blog/2009/06/30/transparent-qwebview-or-qwebpage/ QPalette palette = mWebPage->palette(); palette.setBrush( QPalette::Base, Qt::transparent ); mWebPage->setPalette( palette ); mWebPage->setNetworkAccessManager( QgsNetworkAccessManager::instance() ); QObject::connect( mWebPage, SIGNAL( loadFinished( bool ) ), this, SLOT( frameLoaded( bool ) ) ); if ( mComposition ) { QObject::connect( mComposition, SIGNAL( itemRemoved( QgsComposerItem* ) ), this, SLOT( handleFrameRemoval( QgsComposerItem* ) ) ); } // data defined strings mDataDefinedNames.insert( QgsComposerObject::SourceUrl, QString( "dataDefinedSourceUrl" ) ); if ( mComposition && mComposition->atlasMode() == QgsComposition::PreviewAtlas ) { //a html item added while atlas preview is enabled needs to have the expression context set, //otherwise fields in the html aren't correctly evaluated until atlas preview feature changes (#9457) setExpressionContext( mComposition->atlasComposition().feature(), mComposition->atlasComposition().coverageLayer() ); } //connect to atlas feature changes //to update the expression context connect( &mComposition->atlasComposition(), SIGNAL( featureChanged( QgsFeature* ) ), this, SLOT( refreshExpressionContext() ) ); mFetcher = new QgsNetworkContentFetcher(); connect( mFetcher, SIGNAL( finished() ), this, SLOT( frameLoaded() ) ); }
QString QgsComposerHtml::fetchHtml( QUrl url ) { QgsNetworkContentFetcher fetcher; //pause until HTML fetch mLoaded = false; fetcher.fetchContent( url ); connect( &fetcher, SIGNAL( finished() ), this, SLOT( frameLoaded() ) ); while ( !mLoaded ) { qApp->processEvents(); } mFetchedHtml = fetcher.contentAsString(); mActualFetchedUrl = fetcher.reply()->url().toString(); return mFetchedHtml; }
void ExtractOneThumbnailJob::execute() { if ( m_wasCanceled || frameName().exists() ) emit completed(); else { DB::ImageInfoPtr info = DB::ImageDB::instance()->info(m_fileName); const int length = info->videoLength(); ImageManager::ExtractOneVideoFrame::extract(m_fileName, length*m_index/10.0, this, SLOT(frameLoaded(QImage))); } }