Skip to content

Commit 074318e

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

File tree

4 files changed

+28
-63
lines changed

4 files changed

+28
-63
lines changed

src/app/composer/qgscomposer.cpp

+20-45
Original file line numberDiff line numberDiff line change
@@ -907,6 +907,21 @@ void QgsComposer::setTitle( const QString& title )
907907
}
908908
}
909909

910+
bool QgsComposer::loadFromTemplate( const QDomDocument& templateDoc, bool clearExisting )
911+
{
912+
// provide feedback, since composer will be hidden when loading template (much faster)
913+
QScopedPointer< QDialog > dlg( new QgsBusyIndicatorDialog( tr( "Loading template into composer..." ), this ) );
914+
dlg->setStyleSheet( mQgis->styleSheet() );
915+
dlg->show();
916+
917+
setUpdatesEnabled( false );
918+
bool result = mComposition->loadFromTemplate( templateDoc, nullptr, false, clearExisting );
919+
setUpdatesEnabled( true );
920+
921+
dlg->close();
922+
return result;
923+
}
924+
910925
void QgsComposer::updateStatusCursorPos( QPointF cursorPosition )
911926
{
912927
if ( !mComposition )
@@ -3089,11 +3104,9 @@ void QgsComposer::on_mActionSaveAsTemplate_triggered()
30893104

30903105
void QgsComposer::on_mActionLoadFromTemplate_triggered()
30913106
{
3092-
loadTemplate( false );
3093-
}
3107+
if ( !mComposition )
3108+
return;
30943109

3095-
void QgsComposer::loadTemplate( const bool newComposer )
3096-
{
30973110
QSettings settings;
30983111
QString openFileDir = settings.value( "UI/lastComposerTemplateDir", QDir::homePath() ).toString();
30993112
QString openFileString = QFileDialog::getOpenFileName( nullptr, tr( "Load template" ), openFileDir, "*.qpt" );
@@ -3113,48 +3126,10 @@ void QgsComposer::loadTemplate( const bool newComposer )
31133126
return;
31143127
}
31153128

3116-
QgsComposer* c = nullptr;
3117-
QgsComposition* comp = nullptr;
3118-
3119-
if ( newComposer )
3129+
QDomDocument templateDoc;
3130+
if ( templateDoc.setContent( &templateFile ) )
31203131
{
3121-
QString newTitle;
3122-
if ( !mQgis->uniqueComposerTitle( this, newTitle, true ) )
3123-
{
3124-
return;
3125-
}
3126-
c = mQgis->createNewComposer( newTitle );
3127-
if ( !c )
3128-
{
3129-
QMessageBox::warning( this, tr( "Composer error" ), tr( "Error, could not create new composer" ) );
3130-
return;
3131-
}
3132-
comp = c->composition();
3133-
}
3134-
else
3135-
{
3136-
c = this;
3137-
comp = mComposition;
3138-
}
3139-
3140-
if ( comp )
3141-
{
3142-
QDomDocument templateDoc;
3143-
if ( templateDoc.setContent( &templateFile ) )
3144-
{
3145-
// provide feedback, since composer will be hidden when loading template (much faster)
3146-
QDialog* dlg = new QgsBusyIndicatorDialog( tr( "Loading template into composer..." ) );
3147-
dlg->setStyleSheet( mQgis->styleSheet() );
3148-
dlg->show();
3149-
3150-
c->setUpdatesEnabled( false );
3151-
comp->loadFromTemplate( templateDoc, nullptr, false, newComposer );
3152-
c->setUpdatesEnabled( true );
3153-
3154-
dlg->close();
3155-
delete dlg;
3156-
dlg = nullptr;
3157-
}
3132+
loadFromTemplate( templateDoc, false );
31583133
}
31593134
}
31603135

src/app/composer/qgscomposer.h

+6-3
Original file line numberDiff line numberDiff line change
@@ -101,9 +101,12 @@ class QgsComposer: public QMainWindow, private Ui::QgsComposerBase
101101
const QString& title() const {return mTitle;}
102102
void setTitle( const QString& title );
103103

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

108111
protected:
109112
//! Move event

src/app/composer/qgscomposermanager.cpp

+1-12
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

+1-3
Original file line numberDiff line numberDiff line change
@@ -6602,16 +6602,14 @@ QgsComposer* QgisApp::duplicateComposer( QgsComposer* currentComposer, QString t
66026602

66036603
// hiding composer until template is loaded is much faster, provide feedback to user
66046604
newComposer->hide();
6605-
QApplication::setOverrideCursor( Qt::BusyCursor );
6606-
if ( !newComposer->composition()->loadFromTemplate( currentDoc, nullptr, false ) )
6605+
if ( !newComposer->loadFromTemplate( currentDoc, true ) )
66076606
{
66086607
deleteComposer( newComposer );
66096608
newComposer = nullptr;
66106609
QgsDebugMsg( "Error, composer could not be duplicated" );
66116610
return newComposer;
66126611
}
66136612
newComposer->activate();
6614-
QApplication::restoreOverrideCursor();
66156613

66166614
return newComposer;
66176615
}

0 commit comments

Comments
 (0)