Skip to content

Commit 437aa23

Browse files
committed
[composer] Simplify and consolidate loading of templates
On behalf of Faunalia, sponsored by ENEL (cherry-picked from 656e56e)
1 parent e2a03df commit 437aa23

File tree

4 files changed

+28
-63
lines changed

4 files changed

+28
-63
lines changed

src/app/composer/qgscomposer.cpp

Lines changed: 20 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -877,6 +877,21 @@ void QgsComposer::setTitle( const QString& title )
877877
}
878878
}
879879

880+
bool QgsComposer::loadFromTemplate( const QDomDocument& templateDoc, bool clearExisting )
881+
{
882+
// provide feedback, since composer will be hidden when loading template (much faster)
883+
QScopedPointer< QDialog > dlg( new QgsBusyIndicatorDialog( tr( "Loading template into composer..." ), this ) );
884+
dlg->setStyleSheet( mQgis->styleSheet() );
885+
dlg->show();
886+
887+
setUpdatesEnabled( false );
888+
bool result = mComposition->loadFromTemplate( templateDoc, nullptr, false, clearExisting );
889+
setUpdatesEnabled( true );
890+
891+
dlg->close();
892+
return result;
893+
}
894+
880895
void QgsComposer::updateStatusCursorPos( QPointF cursorPosition )
881896
{
882897
if ( !mComposition )
@@ -3040,11 +3055,9 @@ void QgsComposer::on_mActionSaveAsTemplate_triggered()
30403055

30413056
void QgsComposer::on_mActionLoadFromTemplate_triggered()
30423057
{
3043-
loadTemplate( false );
3044-
}
3058+
if ( !mComposition )
3059+
return;
30453060

3046-
void QgsComposer::loadTemplate( const bool newComposer )
3047-
{
30483061
QSettings settings;
30493062
QString openFileDir = settings.value( "UI/lastComposerTemplateDir", QDir::homePath() ).toString();
30503063
QString openFileString = QFileDialog::getOpenFileName( nullptr, tr( "Load template" ), openFileDir, "*.qpt" );
@@ -3064,48 +3077,10 @@ void QgsComposer::loadTemplate( const bool newComposer )
30643077
return;
30653078
}
30663079

3067-
QgsComposer* c = nullptr;
3068-
QgsComposition* comp = nullptr;
3069-
3070-
if ( newComposer )
3080+
QDomDocument templateDoc;
3081+
if ( templateDoc.setContent( &templateFile ) )
30713082
{
3072-
QString newTitle;
3073-
if ( !mQgis->uniqueComposerTitle( this, newTitle, true ) )
3074-
{
3075-
return;
3076-
}
3077-
c = mQgis->createNewComposer( newTitle );
3078-
if ( !c )
3079-
{
3080-
QMessageBox::warning( this, tr( "Composer error" ), tr( "Error, could not create new composer" ) );
3081-
return;
3082-
}
3083-
comp = c->composition();
3084-
}
3085-
else
3086-
{
3087-
c = this;
3088-
comp = mComposition;
3089-
}
3090-
3091-
if ( comp )
3092-
{
3093-
QDomDocument templateDoc;
3094-
if ( templateDoc.setContent( &templateFile ) )
3095-
{
3096-
// provide feedback, since composer will be hidden when loading template (much faster)
3097-
QDialog* dlg = new QgsBusyIndicatorDialog( tr( "Loading template into composer..." ) );
3098-
dlg->setStyleSheet( mQgis->styleSheet() );
3099-
dlg->show();
3100-
3101-
c->setUpdatesEnabled( false );
3102-
comp->loadFromTemplate( templateDoc, nullptr, false, newComposer );
3103-
c->setUpdatesEnabled( true );
3104-
3105-
dlg->close();
3106-
delete dlg;
3107-
dlg = nullptr;
3108-
}
3083+
loadFromTemplate( templateDoc, false );
31093084
}
31103085
}
31113086

src/app/composer/qgscomposer.h

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -99,9 +99,12 @@ class QgsComposer: public QMainWindow, private Ui::QgsComposerBase
9999
const QString& title() const {return mTitle;}
100100
void setTitle( const QString& title );
101101

102-
//! Load template into current or blank composer
103-
//! @param newComposer whether to create a new composer first
104-
void loadTemplate( const bool newComposer );
102+
/** Loads the contents of a template document into the composer's composition.
103+
* @param templateDoc template document to load
104+
* @param clearExisting set to true to remove all existing composition settings and items before loading template
105+
* @returns true if template load was successful
106+
*/
107+
bool loadFromTemplate( const QDomDocument& templateDoc, bool clearExisting );
105108

106109
protected:
107110
//! Move event

src/app/composer/qgscomposermanager.cpp

Lines changed: 1 addition & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -289,19 +289,8 @@ void QgsComposerManager::on_mAddButton_clicked()
289289
QDomDocument templateDoc;
290290
if ( templateDoc.setContent( &templateFile, false ) )
291291
{
292-
// provide feedback, since composer will be hidden when loading template (much faster)
293-
// (not needed for empty composer)
294-
QDialog* dlg = new QgsBusyIndicatorDialog( tr( "Loading template into composer..." ) );
295-
dlg->setStyleSheet( QgisApp::instance()->styleSheet() );
296-
dlg->show();
297-
298-
newComposer->hide();
299-
loadedOK = newComposer->composition()->loadFromTemplate( templateDoc, nullptr, false );
292+
loadedOK = newComposer->loadFromTemplate( templateDoc, true );
300293
newComposer->activate();
301-
302-
dlg->close();
303-
delete dlg;
304-
dlg = nullptr;
305294
}
306295
}
307296

src/app/qgisapp.cpp

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6137,16 +6137,14 @@ QgsComposer* QgisApp::duplicateComposer( QgsComposer* currentComposer, QString t
61376137

61386138
// hiding composer until template is loaded is much faster, provide feedback to user
61396139
newComposer->hide();
6140-
QApplication::setOverrideCursor( Qt::BusyCursor );
6141-
if ( !newComposer->composition()->loadFromTemplate( currentDoc, nullptr, false ) )
6140+
if ( !newComposer->loadFromTemplate( currentDoc, true ) )
61426141
{
61436142
deleteComposer( newComposer );
61446143
newComposer = nullptr;
61456144
QgsDebugMsg( "Error, composer could not be duplicated" );
61466145
return newComposer;
61476146
}
61486147
newComposer->activate();
6149-
QApplication::restoreOverrideCursor();
61506148

61516149
return newComposer;
61526150
}

0 commit comments

Comments
 (0)