Skip to content

Commit

Permalink
[composer] Simplify and consolidate loading of templates
Browse files Browse the repository at this point in the history
On behalf of Faunalia, sponsored by ENEL

(cherry-picked from 656e56e)
  • Loading branch information
nyalldawson committed Jul 19, 2016
1 parent d094fa2 commit 074318e
Show file tree
Hide file tree
Showing 4 changed files with 28 additions and 63 deletions.
65 changes: 20 additions & 45 deletions src/app/composer/qgscomposer.cpp
Expand Up @@ -907,6 +907,21 @@ void QgsComposer::setTitle( const QString& title )
}
}

bool QgsComposer::loadFromTemplate( const QDomDocument& templateDoc, bool clearExisting )
{
// provide feedback, since composer will be hidden when loading template (much faster)
QScopedPointer< QDialog > dlg( new QgsBusyIndicatorDialog( tr( "Loading template into composer..." ), this ) );
dlg->setStyleSheet( mQgis->styleSheet() );
dlg->show();

setUpdatesEnabled( false );
bool result = mComposition->loadFromTemplate( templateDoc, nullptr, false, clearExisting );
setUpdatesEnabled( true );

dlg->close();
return result;
}

void QgsComposer::updateStatusCursorPos( QPointF cursorPosition )
{
if ( !mComposition )
Expand Down Expand Up @@ -3089,11 +3104,9 @@ void QgsComposer::on_mActionSaveAsTemplate_triggered()

void QgsComposer::on_mActionLoadFromTemplate_triggered()
{
loadTemplate( false );
}
if ( !mComposition )
return;

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

QgsComposer* c = nullptr;
QgsComposition* comp = nullptr;

if ( newComposer )
QDomDocument templateDoc;
if ( templateDoc.setContent( &templateFile ) )
{
QString newTitle;
if ( !mQgis->uniqueComposerTitle( this, newTitle, true ) )
{
return;
}
c = mQgis->createNewComposer( newTitle );
if ( !c )
{
QMessageBox::warning( this, tr( "Composer error" ), tr( "Error, could not create new composer" ) );
return;
}
comp = c->composition();
}
else
{
c = this;
comp = mComposition;
}

if ( comp )
{
QDomDocument templateDoc;
if ( templateDoc.setContent( &templateFile ) )
{
// provide feedback, since composer will be hidden when loading template (much faster)
QDialog* dlg = new QgsBusyIndicatorDialog( tr( "Loading template into composer..." ) );
dlg->setStyleSheet( mQgis->styleSheet() );
dlg->show();

c->setUpdatesEnabled( false );
comp->loadFromTemplate( templateDoc, nullptr, false, newComposer );
c->setUpdatesEnabled( true );

dlg->close();
delete dlg;
dlg = nullptr;
}
loadFromTemplate( templateDoc, false );
}
}

Expand Down
9 changes: 6 additions & 3 deletions src/app/composer/qgscomposer.h
Expand Up @@ -101,9 +101,12 @@ class QgsComposer: public QMainWindow, private Ui::QgsComposerBase
const QString& title() const {return mTitle;}
void setTitle( const QString& title );

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

protected:
//! Move event
Expand Down
13 changes: 1 addition & 12 deletions src/app/composer/qgscomposermanager.cpp
Expand Up @@ -289,19 +289,8 @@ void QgsComposerManager::on_mAddButton_clicked()
QDomDocument templateDoc;
if ( templateDoc.setContent( &templateFile, false ) )
{
// provide feedback, since composer will be hidden when loading template (much faster)
// (not needed for empty composer)
QDialog* dlg = new QgsBusyIndicatorDialog( tr( "Loading template into composer..." ) );
dlg->setStyleSheet( QgisApp::instance()->styleSheet() );
dlg->show();

newComposer->hide();
loadedOK = newComposer->composition()->loadFromTemplate( templateDoc, nullptr, false );
loadedOK = newComposer->loadFromTemplate( templateDoc, true );
newComposer->activate();

dlg->close();
delete dlg;
dlg = nullptr;
}
}

Expand Down
4 changes: 1 addition & 3 deletions src/app/qgisapp.cpp
Expand Up @@ -6602,16 +6602,14 @@ QgsComposer* QgisApp::duplicateComposer( QgsComposer* currentComposer, QString t

// hiding composer until template is loaded is much faster, provide feedback to user
newComposer->hide();
QApplication::setOverrideCursor( Qt::BusyCursor );
if ( !newComposer->composition()->loadFromTemplate( currentDoc, nullptr, false ) )
if ( !newComposer->loadFromTemplate( currentDoc, true ) )
{
deleteComposer( newComposer );
newComposer = nullptr;
QgsDebugMsg( "Error, composer could not be duplicated" );
return newComposer;
}
newComposer->activate();
QApplication::restoreOverrideCursor();

return newComposer;
}
Expand Down

0 comments on commit 074318e

Please sign in to comment.