@@ -2938,6 +2938,9 @@ void QgisApp::setupConnections()
2938
2938
2939
2939
// setup undo/redo actions
2940
2940
connect ( mUndoWidget , SIGNAL ( undoStackChanged () ), this , SLOT ( updateUndoActions () ) );
2941
+
2942
+ connect ( mPrintComposersMenu , &QMenu::aboutToShow, this , &QgisApp::composerMenuAboutToShow );
2943
+ connect ( QgsProject::instance ()->layoutManager (), &QgsLayoutManager::compositionAboutToBeRemoved, this , &QgisApp::compositionAboutToBeRemoved );
2941
2944
}
2942
2945
2943
2946
void QgisApp::createCanvasTools ()
@@ -6980,40 +6983,35 @@ QgsComposer *QgisApp::createNewComposer( QString title )
6980
6983
{
6981
6984
title = tr ( " Composer %1" ).arg ( mLastComposerId );
6982
6985
}
6983
- // create new composer object
6984
- QgsComposer *newComposerObject = new QgsComposer ( this , title );
6986
+ // create new composition object
6987
+ QgsComposition *composition = new QgsComposition ( QgsProject::instance () );
6988
+ composition->setName ( title );
6989
+ QgsProject::instance ()->layoutManager ()->addComposition ( composition );
6990
+
6991
+ QgsComposer *newComposerObject = new QgsComposer ( composition );
6992
+ connect ( newComposerObject, &QgsComposer::aboutToClose, this , [this , newComposerObject]
6993
+ {
6994
+ emit composerWillBeRemoved ( newComposerObject->view () );
6995
+ mPrintComposers .remove ( newComposerObject );
6996
+ emit composerRemoved ( newComposerObject->view () );
6997
+ } );
6985
6998
6986
6999
// add it to the map of existing print composers
6987
7000
mPrintComposers .insert ( newComposerObject );
6988
- // and place action into print composers menu
6989
- mPrintComposersMenu ->addAction ( newComposerObject->windowAction () );
7001
+
6990
7002
newComposerObject->open ();
6991
7003
emit composerAdded ( newComposerObject->view () );
6992
7004
connect ( newComposerObject, &QgsComposer::atlasPreviewFeatureChanged, this , &QgisApp::refreshMapCanvas );
6993
- markDirty ();
7005
+
6994
7006
return newComposerObject;
6995
7007
}
6996
7008
6997
7009
void QgisApp::deleteComposer ( QgsComposer *c )
6998
7010
{
6999
7011
emit composerWillBeRemoved ( c->view () );
7000
7012
mPrintComposers .remove ( c );
7001
- mPrintComposersMenu ->removeAction ( c->windowAction () );
7002
- markDirty ();
7003
7013
emit composerRemoved ( c->view () );
7004
-
7005
- // save a reference to the composition
7006
- QgsComposition *composition = c->composition ();
7007
-
7008
- // first, delete the composer. This must occur before deleting the composition as some of the cleanup code in
7009
- // composer or in composer item widgets may require the composition to still be around
7010
7014
delete c;
7011
-
7012
- // next, delete the composition
7013
- if ( composition )
7014
- {
7015
- delete composition;
7016
- }
7017
7015
}
7018
7016
7019
7017
QgsComposer *QgisApp::duplicateComposer ( QgsComposer *currentComposer, QString title )
@@ -7057,48 +7055,6 @@ QgsComposer *QgisApp::duplicateComposer( QgsComposer *currentComposer, QString t
7057
7055
return newComposer;
7058
7056
}
7059
7057
7060
- bool QgisApp::loadComposersFromProject ( const QDomDocument &doc )
7061
- {
7062
- if ( doc.isNull () )
7063
- {
7064
- return false ;
7065
- }
7066
-
7067
- // restore each composer
7068
- QDomNodeList composerNodes = doc.elementsByTagName ( QStringLiteral ( " Composer" ) );
7069
- for ( int i = 0 ; i < composerNodes.size (); ++i )
7070
- {
7071
- QString title ( composerNodes.at ( i ).toElement ().attribute ( QStringLiteral ( " title" ) ) );
7072
- showStatusMessage ( tr ( " Loading composer %1" ).arg ( title ) );
7073
- showProgress ( i, composerNodes.size () );
7074
- ++mLastComposerId ;
7075
-
7076
- QTime t;
7077
- t.start ();
7078
- QgsComposer *composer = new QgsComposer ( this , tr ( " Composer %1" ).arg ( mLastComposerId ) );
7079
- composer->readXml ( composerNodes.at ( i ).toElement (), doc );
7080
- mPrintComposers .insert ( composer );
7081
- mPrintComposersMenu ->addAction ( composer->windowAction () );
7082
- #ifndef Q_OS_MACX
7083
- composer->setWindowState ( Qt::WindowMinimized );
7084
- #endif
7085
- composer->zoomFull ();
7086
- QgsComposerView *composerView = composer->view ();
7087
- if ( composerView )
7088
- {
7089
- composerView->updateRulers ();
7090
- }
7091
- emit composerAdded ( composer->view () );
7092
- connect ( composer, &QgsComposer::atlasPreviewFeatureChanged, this , &QgisApp::refreshMapCanvas );
7093
-
7094
- QgsDebugMsg ( QString ( " Loaded composer %1: %2ms" ).arg ( title ).arg ( t.elapsed () ) );
7095
- }
7096
-
7097
- showProgress ( 0 , 0 );
7098
-
7099
- return true ;
7100
- }
7101
-
7102
7058
void QgisApp::deletePrintComposers ()
7103
7059
{
7104
7060
QSet<QgsComposer *>::iterator it = mPrintComposers .begin ();
@@ -7108,28 +7064,20 @@ void QgisApp::deletePrintComposers()
7108
7064
emit composerWillBeRemoved ( c->view () );
7109
7065
it = mPrintComposers .erase ( it );
7110
7066
emit composerRemoved ( c->view () );
7111
-
7112
- // save a reference to the composition
7113
- QgsComposition *composition = c->composition ();
7114
-
7115
- // first, delete the composer. This must occur before deleting the composition as some of the cleanup code in
7116
- // composer or in composer item widgets may require the composition to still be around
7117
7067
delete ( c );
7118
-
7119
- // next, delete the composition
7120
- if ( composition )
7121
- {
7122
- delete composition;
7123
- }
7124
7068
}
7125
7069
mLastComposerId = 0 ;
7126
- markDirty ();
7127
7070
}
7128
7071
7129
- void QgisApp::on_mPrintComposersMenu_aboutToShow ()
7072
+ void QgisApp::composerMenuAboutToShow ()
7130
7073
{
7131
- QList<QAction *> acts = mPrintComposersMenu ->actions ();
7132
7074
mPrintComposersMenu ->clear ();
7075
+ QList<QAction *> acts;
7076
+ Q_FOREACH ( QgsComposition *c, QgsProject::instance ()->layoutManager ()->compositions () )
7077
+ {
7078
+
7079
+
7080
+ }
7133
7081
if ( acts.size () > 1 )
7134
7082
{
7135
7083
// sort actions by text
@@ -7138,6 +7086,21 @@ void QgisApp::on_mPrintComposersMenu_aboutToShow()
7138
7086
mPrintComposersMenu ->addActions ( acts );
7139
7087
}
7140
7088
7089
+ void QgisApp::compositionAboutToBeRemoved ( const QString &name )
7090
+ {
7091
+ Q_FOREACH ( QgsComposer *composer, mPrintComposers )
7092
+ {
7093
+ if ( composer->composition ()->name () == name )
7094
+ {
7095
+ emit composerWillBeRemoved ( composer->view () );
7096
+ mPrintComposers .remove ( composer );
7097
+ emit composerRemoved ( composer->view () );
7098
+ delete composer;
7099
+ return ;
7100
+ }
7101
+ }
7102
+ }
7103
+
7141
7104
void QgisApp::showPinnedLabels ( bool show )
7142
7105
{
7143
7106
qobject_cast<QgsMapToolPinLabels *>( mMapTools .mPinLabels )->showPinnedLabels ( show );
0 commit comments