Skip to content

Commit a30dd8a

Browse files
committed
Port composer manager dialog to layouts
Not exposed via GUI yet, but can be shown by entering iface.showLayoutManager() in the Python console
1 parent 66b4b45 commit a30dd8a

13 files changed

+970
-24
lines changed

python/gui/qgisinterface.sip

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -927,6 +927,12 @@ Adds a widget to the user input tool bar.
927927
The composition remains unaffected.
928928
.. versionadded:: 3.0
929929
.. seealso:: :py:func:`openComposer()`
930+
%End
931+
932+
virtual void showLayoutManager() = 0;
933+
%Docstring
934+
Opens the layout manager dialog.
935+
.. versionadded:: 3.0
930936
%End
931937

932938
virtual QgsLayoutDesignerInterface *openLayoutDesigner( QgsLayout *layout ) = 0;

src/app/CMakeLists.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -188,6 +188,7 @@ SET(QGIS_APP_SRCS
188188
layout/qgslayoutlabelwidget.cpp
189189
layout/qgslayoutlegendlayersdialog.cpp
190190
layout/qgslayoutlegendwidget.cpp
191+
layout/qgslayoutmanagerdialog.cpp
191192
layout/qgslayoutmapwidget.cpp
192193
layout/qgslayoutmapgridwidget.cpp
193194
layout/qgslayoutpagepropertieswidget.cpp
@@ -402,6 +403,7 @@ SET (QGIS_APP_MOC_HDRS
402403
layout/qgslayoutlabelwidget.h
403404
layout/qgslayoutlegendwidget.h
404405
layout/qgslayoutlegendlayersdialog.h
406+
layout/qgslayoutmanagerdialog.h
405407
layout/qgslayoutmapwidget.h
406408
layout/qgslayoutmapgridwidget.h
407409
layout/qgslayoutpagepropertieswidget.h

src/app/composer/qgscomposermanager.cpp

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -47,8 +47,8 @@ QgsComposerManager::QgsComposerManager( QWidget *parent, Qt::WindowFlags f ): QD
4747
QgsSettings settings;
4848
restoreGeometry( settings.value( QStringLiteral( "Windows/ComposerManager/geometry" ) ).toByteArray() );
4949

50-
mModel = new QgsLayoutManagerModel( QgsProject::instance()->layoutManager(),
51-
this );
50+
mModel = new QgsComposerManagerModel( QgsProject::instance()->layoutManager(),
51+
this );
5252
mComposerListView->setModel( mModel );
5353

5454
connect( mButtonBox, &QDialogButtonBox::rejected, this, &QWidget::close );
@@ -440,27 +440,27 @@ void QgsComposerManager::renameClicked()
440440
}
441441

442442
//
443-
// QgsLayoutManagerModel
443+
// QgsComposerManagerModel
444444
//
445445

446-
QgsLayoutManagerModel::QgsLayoutManagerModel( QgsLayoutManager *manager, QObject *parent )
446+
QgsComposerManagerModel::QgsComposerManagerModel( QgsLayoutManager *manager, QObject *parent )
447447
: QAbstractListModel( parent )
448448
, mLayoutManager( manager )
449449
{
450-
connect( mLayoutManager, &QgsLayoutManager::compositionAboutToBeAdded, this, &QgsLayoutManagerModel::compositionAboutToBeAdded );
451-
connect( mLayoutManager, &QgsLayoutManager::compositionAdded, this, &QgsLayoutManagerModel::compositionAdded );
452-
connect( mLayoutManager, &QgsLayoutManager::compositionAboutToBeRemoved, this, &QgsLayoutManagerModel::compositionAboutToBeRemoved );
453-
connect( mLayoutManager, &QgsLayoutManager::compositionRemoved, this, &QgsLayoutManagerModel::compositionRemoved );
454-
connect( mLayoutManager, &QgsLayoutManager::compositionRenamed, this, &QgsLayoutManagerModel::compositionRenamed );
450+
connect( mLayoutManager, &QgsLayoutManager::compositionAboutToBeAdded, this, &QgsComposerManagerModel::compositionAboutToBeAdded );
451+
connect( mLayoutManager, &QgsLayoutManager::compositionAdded, this, &QgsComposerManagerModel::compositionAdded );
452+
connect( mLayoutManager, &QgsLayoutManager::compositionAboutToBeRemoved, this, &QgsComposerManagerModel::compositionAboutToBeRemoved );
453+
connect( mLayoutManager, &QgsLayoutManager::compositionRemoved, this, &QgsComposerManagerModel::compositionRemoved );
454+
connect( mLayoutManager, &QgsLayoutManager::compositionRenamed, this, &QgsComposerManagerModel::compositionRenamed );
455455
}
456456

457-
int QgsLayoutManagerModel::rowCount( const QModelIndex &parent ) const
457+
int QgsComposerManagerModel::rowCount( const QModelIndex &parent ) const
458458
{
459459
Q_UNUSED( parent );
460460
return mLayoutManager->compositions().count();
461461
}
462462

463-
QVariant QgsLayoutManagerModel::data( const QModelIndex &index, int role ) const
463+
QVariant QgsComposerManagerModel::data( const QModelIndex &index, int role ) const
464464
{
465465
if ( index.row() < 0 || index.row() >= rowCount( QModelIndex() ) )
466466
return QVariant();
@@ -480,7 +480,7 @@ QVariant QgsLayoutManagerModel::data( const QModelIndex &index, int role ) const
480480
}
481481
}
482482

483-
bool QgsLayoutManagerModel::setData( const QModelIndex &index, const QVariant &value, int role )
483+
bool QgsComposerManagerModel::setData( const QModelIndex &index, const QVariant &value, int role )
484484
{
485485
if ( !index.isValid() || role != Qt::EditRole )
486486
{
@@ -520,7 +520,7 @@ bool QgsLayoutManagerModel::setData( const QModelIndex &index, const QVariant &v
520520
return true;
521521
}
522522

523-
Qt::ItemFlags QgsLayoutManagerModel::flags( const QModelIndex &index ) const
523+
Qt::ItemFlags QgsComposerManagerModel::flags( const QModelIndex &index ) const
524524
{
525525
Qt::ItemFlags flags = QAbstractListModel::flags( index );
526526

@@ -534,36 +534,36 @@ Qt::ItemFlags QgsLayoutManagerModel::flags( const QModelIndex &index ) const
534534
}
535535
}
536536

537-
QgsComposition *QgsLayoutManagerModel::compositionFromIndex( const QModelIndex &index ) const
537+
QgsComposition *QgsComposerManagerModel::compositionFromIndex( const QModelIndex &index ) const
538538
{
539539
return qobject_cast< QgsComposition * >( qvariant_cast<QObject *>( data( index, CompositionRole ) ) );
540540
}
541541

542-
void QgsLayoutManagerModel::compositionAboutToBeAdded( const QString & )
542+
void QgsComposerManagerModel::compositionAboutToBeAdded( const QString & )
543543
{
544544
int row = mLayoutManager->compositions().count();
545545
beginInsertRows( QModelIndex(), row, row );
546546
}
547547

548-
void QgsLayoutManagerModel::compositionAboutToBeRemoved( const QString &name )
548+
void QgsComposerManagerModel::compositionAboutToBeRemoved( const QString &name )
549549
{
550550
QgsComposition *c = mLayoutManager->compositionByName( name );
551551
int row = mLayoutManager->compositions().indexOf( c );
552552
if ( row >= 0 )
553553
beginRemoveRows( QModelIndex(), row, row );
554554
}
555555

556-
void QgsLayoutManagerModel::compositionAdded( const QString & )
556+
void QgsComposerManagerModel::compositionAdded( const QString & )
557557
{
558558
endInsertRows();
559559
}
560560

561-
void QgsLayoutManagerModel::compositionRemoved( const QString & )
561+
void QgsComposerManagerModel::compositionRemoved( const QString & )
562562
{
563563
endRemoveRows();
564564
}
565565

566-
void QgsLayoutManagerModel::compositionRenamed( QgsComposition *composition, const QString & )
566+
void QgsComposerManagerModel::compositionRenamed( QgsComposition *composition, const QString & )
567567
{
568568
int row = mLayoutManager->compositions().indexOf( composition );
569569
QModelIndex index = createIndex( row, 0 );

src/app/composer/qgscomposermanager.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ class QgsComposer;
2626
class QgsComposition;
2727
class QgsLayoutManager;
2828

29-
class QgsLayoutManagerModel : public QAbstractListModel
29+
class QgsComposerManagerModel : public QAbstractListModel
3030
{
3131
Q_OBJECT
3232

@@ -37,7 +37,7 @@ class QgsLayoutManagerModel : public QAbstractListModel
3737
CompositionRole = Qt::UserRole + 1,
3838
};
3939

40-
explicit QgsLayoutManagerModel( QgsLayoutManager *manager, QObject *parent = nullptr );
40+
explicit QgsComposerManagerModel( QgsLayoutManager *manager, QObject *parent = nullptr );
4141

4242
int rowCount( const QModelIndex &parent ) const override;
4343
QVariant data( const QModelIndex &index, int role ) const override;
@@ -93,7 +93,7 @@ class QgsComposerManager: public QDialog, private Ui::QgsComposerManagerBase
9393
QPushButton *mRemoveButton = nullptr;
9494
QPushButton *mRenameButton = nullptr;
9595
QPushButton *mDuplicateButton = nullptr;
96-
QgsLayoutManagerModel *mModel = nullptr;
96+
QgsComposerManagerModel *mModel = nullptr;
9797

9898
#ifdef Q_OS_MAC
9999
void showEvent( QShowEvent *event );

src/app/layout/qgslayoutdesignerdialog.cpp

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -615,6 +615,8 @@ QgsLayout *QgsLayoutDesignerDialog::currentLayout()
615615
void QgsLayoutDesignerDialog::setCurrentLayout( QgsLayout *layout )
616616
{
617617
mLayout = layout;
618+
connect( mLayout, &QgsLayout::destroyed, this, &QgsLayoutDesignerDialog::close );
619+
618620
mView->setCurrentLayout( layout );
619621

620622
// add undo/redo actions which apply to the correct layout undo stack
@@ -1372,7 +1374,10 @@ void QgsLayoutDesignerDialog::showManager()
13721374
// NOTE: Avoid crash where composer that spawned modal manager from toolbar ends up
13731375
// being deleted by user, but event loop tries to return to layout on manager close
13741376
// (does not seem to be an issue for menu action)
1375-
QTimer::singleShot( 0, QgisApp::instance()->actionShowComposerManager(), SLOT( trigger() ) );
1377+
QTimer::singleShot( 0, this, [ = ]
1378+
{
1379+
QgisApp::instance()->showLayoutManager();
1380+
} );
13761381
}
13771382

13781383
void QgsLayoutDesignerDialog::paste()

0 commit comments

Comments
 (0)