From 2d7cd38b45cb82f5c6ec87c8726cd6e006d32a67 Mon Sep 17 00:00:00 2001 From: Nyall Dawson Date: Thu, 1 May 2014 23:00:33 +1000 Subject: [PATCH] [composer] Refresh view action now also reloads html items and refreshes attribute table features. --- python/core/composer/qgscomposition.sip | 9 +++++++++ src/app/composer/qgscomposer.cpp | 1 + src/core/composer/qgscomposerattributetable.cpp | 5 +++++ src/core/composer/qgscomposerhtml.cpp | 1 + src/core/composer/qgscomposition.cpp | 5 +++++ src/core/composer/qgscomposition.h | 9 +++++++++ 6 files changed, 30 insertions(+) diff --git a/python/core/composer/qgscomposition.sip b/python/core/composer/qgscomposition.sip index 92f25aa541c..5d1f72546da 100644 --- a/python/core/composer/qgscomposition.sip +++ b/python/core/composer/qgscomposition.sip @@ -408,6 +408,12 @@ class QgsComposition : QGraphicsScene @note added in version 2.2*/ void updateBounds(); + /**Forces items in the composition to refresh. For instance, this causes maps to redraw + * and rebuild cached images, html items to reload their source url, and attribute tables + * to refresh their contents. + @note added in version 2.3*/ + void refreshItems(); + protected: void init(); @@ -441,4 +447,7 @@ class QgsComposition : QGraphicsScene void composerTableAdded( QgsComposerAttributeTable* table ); /**Is emitted when a composer item has been removed from the scene*/ void itemRemoved( QgsComposerItem* ); + + /**Is emitted when item in the composition must be refreshed*/ + void refreshItemsTriggered(); }; diff --git a/src/app/composer/qgscomposer.cpp b/src/app/composer/qgscomposer.cpp index 519807e2579..b5650e6a999 100644 --- a/src/app/composer/qgscomposer.cpp +++ b/src/app/composer/qgscomposer.cpp @@ -1022,6 +1022,7 @@ void QgsComposer::on_mActionRefreshView_triggered() } } + mComposition->refreshItems(); mComposition->update(); } diff --git a/src/core/composer/qgscomposerattributetable.cpp b/src/core/composer/qgscomposerattributetable.cpp index f4cb695bde2..b9311c34ed2 100644 --- a/src/core/composer/qgscomposerattributetable.cpp +++ b/src/core/composer/qgscomposerattributetable.cpp @@ -66,6 +66,11 @@ QgsComposerAttributeTable::QgsComposerAttributeTable( QgsComposition* compositio } } connect( QgsMapLayerRegistry::instance(), SIGNAL( layerWillBeRemoved( QString ) ), this, SLOT( removeLayer( const QString& ) ) ); + + if ( mComposition ) + { + connect( mComposition, SIGNAL( refreshItemsTriggered() ), this, SLOT( refreshAttributes() ) ); + } } QgsComposerAttributeTable::~QgsComposerAttributeTable() diff --git a/src/core/composer/qgscomposerhtml.cpp b/src/core/composer/qgscomposerhtml.cpp index bb6ee57ba03..c8601cf0ef4 100644 --- a/src/core/composer/qgscomposerhtml.cpp +++ b/src/core/composer/qgscomposerhtml.cpp @@ -36,6 +36,7 @@ QgsComposerHtml::QgsComposerHtml( QgsComposition* c, bool createUndoCommands ): if ( mComposition ) { QObject::connect( mComposition, SIGNAL( itemRemoved( QgsComposerItem* ) ), this, SLOT( handleFrameRemoval( QgsComposerItem* ) ) ); + connect( mComposition, SIGNAL( refreshItemsTriggered() ), this, SLOT( loadHtml() ) ); } } diff --git a/src/core/composer/qgscomposition.cpp b/src/core/composer/qgscomposition.cpp index 2a2c85b6774..21742e2921b 100644 --- a/src/core/composer/qgscomposition.cpp +++ b/src/core/composer/qgscomposition.cpp @@ -181,6 +181,11 @@ void QgsComposition::updateBounds() setSceneRect( compositionBounds() ); } +void QgsComposition::refreshItems() +{ + emit refreshItemsTriggered(); +} + QRectF QgsComposition::compositionBounds() const { //start with an empty rectangle diff --git a/src/core/composer/qgscomposition.h b/src/core/composer/qgscomposition.h index d4d8c9d0b3c..a1ac7960d0d 100644 --- a/src/core/composer/qgscomposition.h +++ b/src/core/composer/qgscomposition.h @@ -464,6 +464,12 @@ class CORE_EXPORT QgsComposition : public QGraphicsScene @note added in version 2.2*/ void updateBounds(); + /**Forces items in the composition to refresh. For instance, this causes maps to redraw + * and rebuild cached images, html items to reload their source url, and attribute tables + * to refresh their contents. + @note added in version 2.3*/ + void refreshItems(); + protected: void init(); @@ -596,6 +602,9 @@ class CORE_EXPORT QgsComposition : public QGraphicsScene /**Is emitted when a composer item has been removed from the scene*/ void itemRemoved( QgsComposerItem* ); + /**Is emitted when item in the composition must be refreshed*/ + void refreshItemsTriggered(); + /**Is emitted when the composition has an updated status bar message for the composer window*/ void statusMsgChanged( QString message ); };