Skip to content

Commit ab11dfb

Browse files
committedMar 21, 2017
[composer] Don't load HTML for labels on project load
Instead defer to composer load. Also make sure html is reloaded when composition is force refreshed.
1 parent 9cba265 commit ab11dfb

File tree

2 files changed

+12
-17
lines changed

2 files changed

+12
-17
lines changed
 

‎src/core/composer/qgscomposerlabel.cpp

Lines changed: 10 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,6 @@ QgsComposerLabel::QgsComposerLabel( QgsComposition *composition )
5151
, mFontColor( QColor( 0, 0, 0 ) )
5252
, mHAlignment( Qt::AlignLeft )
5353
, mVAlignment( Qt::AlignTop )
54-
, mExpressionLayer( nullptr )
5554
, mDistanceArea( nullptr )
5655
{
5756
mDistanceArea = new QgsDistanceArea();
@@ -79,7 +78,8 @@ QgsComposerLabel::QgsComposerLabel( QgsComposition *composition )
7978
{
8079
//connect to atlas feature changes
8180
//to update the expression context
82-
connect( &mComposition->atlasComposition(), SIGNAL( featureChanged( QgsFeature * ) ), this, SLOT( refreshExpressionContext() ) );
81+
connect( &mComposition->atlasComposition(), &QgsAtlasComposition::featureChanged, this, &QgsComposerLabel::refreshExpressionContext );
82+
connect( mComposition, &QgsComposition::refreshItemsTriggered, this, &QgsComposerLabel::contentChanged );
8383
}
8484

8585
mWebPage = new QgsWebPage( this );
@@ -96,7 +96,7 @@ QgsComposerLabel::QgsComposerLabel( QgsComposition *composition )
9696
mWebPage->mainFrame()->setScrollBarPolicy( Qt::Horizontal, Qt::ScrollBarAlwaysOff );
9797
mWebPage->mainFrame()->setScrollBarPolicy( Qt::Vertical, Qt::ScrollBarAlwaysOff );
9898

99-
connect( mWebPage, SIGNAL( loadFinished( bool ) ), SLOT( loadingHtmlFinished( bool ) ) );
99+
connect( mWebPage, &QWebPage::loadFinished, this, &QgsComposerLabel::loadingHtmlFinished );
100100
}
101101

102102
QgsComposerLabel::~QgsComposerLabel()
@@ -131,6 +131,11 @@ void QgsComposerLabel::paint( QPainter *painter, const QStyleOptionGraphicsItem
131131

132132
if ( mHtmlState )
133133
{
134+
if ( mFirstRender )
135+
{
136+
contentChanged();
137+
mFirstRender = false;
138+
}
134139
painter->scale( 1.0 / mHtmlUnitsToMM / 10.0, 1.0 / mHtmlUnitsToMM / 10.0 );
135140
mWebPage->setViewportSize( QSize( painterRect.width() * mHtmlUnitsToMM * 10.0, painterRect.height() * mHtmlUnitsToMM * 10.0 ) );
136141
mWebPage->settings()->setUserStyleSheetUrl( createStylesheetUrl() );
@@ -178,12 +183,12 @@ void QgsComposerLabel::contentChanged()
178183
QEventLoop loop;
179184

180185
//Connect timeout and webpage loadFinished signals to loop
181-
connect( mWebPage, SIGNAL( loadFinished( bool ) ), &loop, SLOT( quit() ) );
186+
connect( mWebPage, &QWebPage::loadFinished, &loop, &QEventLoop::quit );
182187

183188
// Start a 20 second timeout in case html loading will never complete
184189
QTimer timeoutTimer;
185190
timeoutTimer.setSingleShot( true );
186-
connect( &timeoutTimer, SIGNAL( timeout() ), &loop, SLOT( quit() ) );
191+
connect( &timeoutTimer, &QTimer::timeout, &loop, &QEventLoop::quit );
187192
timeoutTimer.start( 20000 );
188193

189194
// Pause until html is loaded
@@ -243,9 +248,6 @@ void QgsComposerLabel::setHtmlState( int state )
243248

244249
void QgsComposerLabel::refreshExpressionContext()
245250
{
246-
mExpressionLayer = nullptr;
247-
mExpressionFeature.reset();
248-
249251
if ( !mComposition )
250252
return;
251253

@@ -280,12 +282,6 @@ QString QgsComposerLabel::displayText() const
280282
replaceDateText( displayText );
281283

282284
QgsExpressionContext context = createExpressionContext();
283-
//overwrite layer/feature if they have been set via setExpressionContext
284-
//TODO remove when setExpressionContext is removed
285-
if ( mExpressionFeature.get() )
286-
context.setFeature( *mExpressionFeature );
287-
if ( mExpressionLayer )
288-
context.setFields( mExpressionLayer->fields() );
289285

290286
return QgsExpression::replaceExpressionText( displayText, &context, mDistanceArea );
291287
}
@@ -464,7 +460,6 @@ bool QgsComposerLabel::readXml( const QDomElement &itemElem, const QDomDocument
464460
_readXml( composerItemElem, doc );
465461
}
466462
emit itemChanged();
467-
contentChanged();
468463
return true;
469464
}
470465

‎src/core/composer/qgscomposerlabel.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -162,6 +162,8 @@ class CORE_EXPORT QgsComposerLabel: public QgsComposerItem
162162
void loadingHtmlFinished( bool );
163163

164164
private:
165+
bool mFirstRender = true;
166+
165167
// Text
166168
QString mText;
167169

@@ -200,8 +202,6 @@ class CORE_EXPORT QgsComposerLabel: public QgsComposerItem
200202
//! Creates an encoded stylesheet url using the current font and label appearance settings
201203
QUrl createStylesheetUrl() const;
202204

203-
std::unique_ptr<QgsFeature> mExpressionFeature;
204-
QgsVectorLayer *mExpressionLayer = nullptr;
205205
QgsDistanceArea *mDistanceArea = nullptr;
206206

207207
QgsWebPage *mWebPage = nullptr;

0 commit comments

Comments
 (0)
Please sign in to comment.