From 66028bcf05644f91740e37408980a25aa7d910b8 Mon Sep 17 00:00:00 2001 From: Nyall Dawson Date: Sat, 30 Dec 2017 09:37:33 +1000 Subject: [PATCH] Cleaner way to hide atlas controls when not using a print layout --- src/app/layout/qgslayoutdesignerdialog.cpp | 32 ++++++++++++---------- src/ui/layout/qgslayoutdesignerbase.ui | 2 +- 2 files changed, 19 insertions(+), 15 deletions(-) diff --git a/src/app/layout/qgslayoutdesignerdialog.cpp b/src/app/layout/qgslayoutdesignerdialog.cpp index 4bcf097cbf7..27ab561ec2c 100644 --- a/src/app/layout/qgslayoutdesignerdialog.cpp +++ b/src/app/layout/qgslayoutdesignerdialog.cpp @@ -643,6 +643,9 @@ QgsLayoutDesignerDialog::QgsLayoutDesignerDialog( QWidget *parent, Qt::WindowFla mItemsTreeView = new QgsLayoutItemsListView( mItemsDock, this ); mItemsDock->setWidget( mItemsTreeView ); + mAtlasDock = new QgsDockWidget( tr( "Atlas" ), this ); + mAtlasDock->setObjectName( QStringLiteral( "AtlasDock" ) ); + const QList docks = findChildren(); for ( QDockWidget *dock : docks ) { @@ -654,18 +657,21 @@ QgsLayoutDesignerDialog::QgsLayoutDesignerDialog( QWidget *parent, Qt::WindowFla addDockWidget( Qt::RightDockWidgetArea, mGuideDock ); addDockWidget( Qt::RightDockWidgetArea, mUndoDock ); addDockWidget( Qt::RightDockWidgetArea, mItemsDock ); + addDockWidget( Qt::RightDockWidgetArea, mAtlasDock ); createLayoutPropertiesWidget(); mUndoDock->show(); mItemDock->show(); mGeneralDock->show(); + mAtlasDock->show(); mItemsDock->show(); tabifyDockWidget( mGeneralDock, mUndoDock ); tabifyDockWidget( mItemDock, mUndoDock ); tabifyDockWidget( mGeneralDock, mItemDock ); tabifyDockWidget( mItemDock, mItemsDock ); + tabifyDockWidget( mItemDock, mAtlasDock ); toggleActions( false ); @@ -681,8 +687,6 @@ QgsLayoutDesignerDialog::QgsLayoutDesignerDialog( QWidget *parent, Qt::WindowFla mActionExportAtlasAsImage->setEnabled( false ); mActionExportAtlasAsSVG->setEnabled( false ); mActionExportAtlasAsPDF->setEnabled( false ); - mAtlasToolbar->hide(); - mMenuAtlas->hide(); restoreWindowState(); @@ -724,6 +728,17 @@ void QgsLayoutDesignerDialog::setMasterLayout( QgsMasterLayoutInterface *layout { createAtlasWidget(); } + else + { + // ideally we'd only create mAtlasDock in createAtlasWidget() - + // but if we do that, then it's always brought to the focus + // in tab widgets + mAtlasDock->hide(); + mPanelsMenu->removeAction( mAtlasDock->toggleViewAction() ); + delete mMenuAtlas; + mMenuAtlas = nullptr; + mAtlasToolbar->hide(); + } } QgsMasterLayoutInterface *QgsLayoutDesignerDialog::masterLayout() @@ -2665,25 +2680,14 @@ void QgsLayoutDesignerDialog::createLayoutPropertiesWidget() void QgsLayoutDesignerDialog::createAtlasWidget() { - if ( !mAtlasDock ) - { - mAtlasDock = new QgsDockWidget( tr( "Atlas" ), this ); - mAtlasDock->setObjectName( QStringLiteral( "AtlasDock" ) ); - mPanelsMenu->addAction( mAtlasDock->toggleViewAction() ); - addDockWidget( Qt::RightDockWidgetArea, mAtlasDock ); - tabifyDockWidget( mItemDock, mAtlasDock ); - connect( mAtlasDock, &QDockWidget::visibilityChanged, this, &QgsLayoutDesignerDialog::dockVisibilityChanged ); - } - QgsPrintLayout *printLayout = qobject_cast< QgsPrintLayout * >( mLayout ); QgsLayoutAtlas *atlas = printLayout->atlas(); QgsLayoutAtlasWidget *atlasWidget = new QgsLayoutAtlasWidget( mAtlasDock, printLayout ); atlasWidget->setMessageBar( mMessageBar ); mAtlasDock->setWidget( atlasWidget ); - mAtlasDock->show(); - mMenuAtlas->show(); mAtlasToolbar->show(); + mPanelsMenu->addAction( mAtlasDock->toggleViewAction() ); connect( atlas, &QgsLayoutAtlas::messagePushed, mStatusBar, [ = ]( const QString & message ) { diff --git a/src/ui/layout/qgslayoutdesignerbase.ui b/src/ui/layout/qgslayoutdesignerbase.ui index 436aab2e816..6745cb5a255 100644 --- a/src/ui/layout/qgslayoutdesignerbase.ui +++ b/src/ui/layout/qgslayoutdesignerbase.ui @@ -92,7 +92,7 @@ - + 0