Skip to content

Commit f4bb247

Browse files
committed
Disable layout designer actions when no layout is set
1 parent 78f2174 commit f4bb247

File tree

2 files changed

+138
-40
lines changed

2 files changed

+138
-40
lines changed

src/app/layout/qgslayoutdesignerdialog.cpp

+136-40
Original file line numberDiff line numberDiff line change
@@ -667,6 +667,8 @@ QgsLayoutDesignerDialog::QgsLayoutDesignerDialog( QWidget *parent, Qt::WindowFla
667667
tabifyDockWidget( mGeneralDock, mItemDock );
668668
tabifyDockWidget( mItemDock, mItemsDock );
669669

670+
toggleActions( false );
671+
670672
//set initial state of atlas controls
671673
mActionAtlasPreview->setEnabled( false );
672674
mActionAtlasPreview->setChecked( false );
@@ -717,6 +719,11 @@ void QgsLayoutDesignerDialog::setMasterLayout( QgsMasterLayoutInterface *layout
717719
{
718720
connect( r, &QgsReport::nameChanged, this, &QgsLayoutDesignerDialog::setWindowTitle );
719721
}
722+
723+
if ( dynamic_cast< QgsPrintLayout * >( layout ) )
724+
{
725+
createAtlasWidget();
726+
}
720727
}
721728

722729
QgsMasterLayoutInterface *QgsLayoutDesignerDialog::masterLayout()
@@ -726,52 +733,55 @@ QgsMasterLayoutInterface *QgsLayoutDesignerDialog::masterLayout()
726733

727734
void QgsLayoutDesignerDialog::setCurrentLayout( QgsLayout *layout )
728735
{
729-
layout->deselectAll();
730-
mLayout = layout;
731-
732-
mView->setCurrentLayout( layout );
733-
734-
// add undo/redo actions which apply to the correct layout undo stack
735-
delete mUndoAction;
736-
delete mRedoAction;
737-
mUndoAction = layout->undoStack()->stack()->createUndoAction( this );
738-
mUndoAction->setIcon( QgsApplication::getThemeIcon( QStringLiteral( "/mActionUndo.svg" ) ) );
739-
mUndoAction->setShortcuts( QKeySequence::Undo );
740-
mRedoAction = layout->undoStack()->stack()->createRedoAction( this );
741-
mRedoAction->setIcon( QgsApplication::getThemeIcon( QStringLiteral( "/mActionRedo.svg" ) ) );
742-
mRedoAction->setShortcuts( QKeySequence::Redo );
743-
menuEdit->insertAction( menuEdit->actions().at( 0 ), mRedoAction );
744-
menuEdit->insertAction( mRedoAction, mUndoAction );
745-
mLayoutToolbar->addAction( mUndoAction );
746-
mLayoutToolbar->addAction( mRedoAction );
747-
748-
connect( mLayout->undoStack(), &QgsLayoutUndoStack::undoRedoOccurredForItems, this, &QgsLayoutDesignerDialog::undoRedoOccurredForItems );
749-
connect( mActionClearGuides, &QAction::triggered, &mLayout->guides(), [ = ]
750-
{
751-
mLayout->guides().clear();
752-
} );
736+
if ( !layout )
737+
{
738+
toggleActions( false );
739+
}
740+
else
741+
{
742+
layout->deselectAll();
743+
mLayout = layout;
744+
745+
mView->setCurrentLayout( layout );
746+
747+
// add undo/redo actions which apply to the correct layout undo stack
748+
delete mUndoAction;
749+
delete mRedoAction;
750+
mUndoAction = layout->undoStack()->stack()->createUndoAction( this );
751+
mUndoAction->setIcon( QgsApplication::getThemeIcon( QStringLiteral( "/mActionUndo.svg" ) ) );
752+
mUndoAction->setShortcuts( QKeySequence::Undo );
753+
mRedoAction = layout->undoStack()->stack()->createRedoAction( this );
754+
mRedoAction->setIcon( QgsApplication::getThemeIcon( QStringLiteral( "/mActionRedo.svg" ) ) );
755+
mRedoAction->setShortcuts( QKeySequence::Redo );
756+
menuEdit->insertAction( menuEdit->actions().at( 0 ), mRedoAction );
757+
menuEdit->insertAction( mRedoAction, mUndoAction );
758+
mLayoutToolbar->addAction( mUndoAction );
759+
mLayoutToolbar->addAction( mRedoAction );
760+
761+
connect( mLayout->undoStack(), &QgsLayoutUndoStack::undoRedoOccurredForItems, this, &QgsLayoutDesignerDialog::undoRedoOccurredForItems );
762+
connect( mActionClearGuides, &QAction::triggered, &mLayout->guides(), [ = ]
763+
{
764+
mLayout->guides().clear();
765+
} );
753766

754-
mActionShowGrid->setChecked( mLayout->renderContext().gridVisible() );
755-
mActionSnapGrid->setChecked( mLayout->snapper().snapToGrid() );
756-
mActionShowGuides->setChecked( mLayout->guides().visible() );
757-
mActionSnapGuides->setChecked( mLayout->snapper().snapToGuides() );
758-
mActionSmartGuides->setChecked( mLayout->snapper().snapToItems() );
759-
mActionShowBoxes->setChecked( mLayout->renderContext().boundingBoxesVisible() );
760-
mActionShowPage->setChecked( mLayout->renderContext().pagesVisible() );
767+
mActionShowGrid->setChecked( mLayout->renderContext().gridVisible() );
768+
mActionSnapGrid->setChecked( mLayout->snapper().snapToGrid() );
769+
mActionShowGuides->setChecked( mLayout->guides().visible() );
770+
mActionSnapGuides->setChecked( mLayout->snapper().snapToGuides() );
771+
mActionSmartGuides->setChecked( mLayout->snapper().snapToItems() );
772+
mActionShowBoxes->setChecked( mLayout->renderContext().boundingBoxesVisible() );
773+
mActionShowPage->setChecked( mLayout->renderContext().pagesVisible() );
761774

762-
mUndoView->setStack( mLayout->undoStack()->stack() );
775+
mUndoView->setStack( mLayout->undoStack()->stack() );
763776

764-
mSelectTool->setLayout( layout );
765-
mItemsTreeView->setCurrentLayout( mLayout );
777+
mSelectTool->setLayout( layout );
778+
mItemsTreeView->setCurrentLayout( mLayout );
766779
#ifdef ENABLE_MODELTEST
767-
new ModelTest( mLayout->itemsModel(), this );
780+
new ModelTest( mLayout->itemsModel(), this );
768781
#endif
769782

770-
createLayoutPropertiesWidget();
771-
772-
if ( qobject_cast< QgsPrintLayout * >( layout ) )
773-
{
774-
createAtlasWidget();
783+
createLayoutPropertiesWidget();
784+
toggleActions( true );
775785
}
776786
}
777787

@@ -1243,6 +1253,9 @@ void QgsLayoutDesignerDialog::sliderZoomChanged( int value )
12431253

12441254
void QgsLayoutDesignerDialog::updateStatusZoom()
12451255
{
1256+
if ( !currentLayout() )
1257+
return;
1258+
12461259
double zoomLevel = 0;
12471260
if ( currentLayout()->units() == QgsUnitTypes::LayoutPixels )
12481261
{
@@ -3053,6 +3066,89 @@ QgsLayoutAtlas *QgsLayoutDesignerDialog::atlas()
30533066
return layout->atlas();
30543067
}
30553068

3069+
void QgsLayoutDesignerDialog::toggleActions( bool layoutAvailable )
3070+
{
3071+
mActionPan->setEnabled( layoutAvailable );
3072+
mActionZoomTool->setEnabled( layoutAvailable );
3073+
mActionSelectMoveItem->setEnabled( layoutAvailable );
3074+
mActionZoomAll->setEnabled( layoutAvailable );
3075+
mActionZoomIn->setEnabled( layoutAvailable );
3076+
mActionZoomOut->setEnabled( layoutAvailable );
3077+
mActionZoomActual->setEnabled( layoutAvailable );
3078+
mActionZoomToWidth->setEnabled( layoutAvailable );
3079+
mActionAddPages->setEnabled( layoutAvailable );
3080+
mActionShowGrid->setEnabled( layoutAvailable );
3081+
mActionSnapGrid->setEnabled( layoutAvailable );
3082+
mActionShowGuides->setEnabled( layoutAvailable );
3083+
mActionSnapGuides->setEnabled( layoutAvailable );
3084+
mActionClearGuides->setEnabled( layoutAvailable );
3085+
mActionLayoutProperties->setEnabled( layoutAvailable );
3086+
mActionShowBoxes->setEnabled( layoutAvailable );
3087+
mActionSmartGuides->setEnabled( layoutAvailable );
3088+
mActionDeselectAll->setEnabled( layoutAvailable );
3089+
mActionSelectAll->setEnabled( layoutAvailable );
3090+
mActionInvertSelection->setEnabled( layoutAvailable );
3091+
mActionSelectNextBelow->setEnabled( layoutAvailable );
3092+
mActionSelectNextAbove->setEnabled( layoutAvailable );
3093+
mActionLockItems->setEnabled( layoutAvailable );
3094+
mActionUnlockAll->setEnabled( layoutAvailable );
3095+
mActionRaiseItems->setEnabled( layoutAvailable );
3096+
mActionLowerItems->setEnabled( layoutAvailable );
3097+
mActionMoveItemsToTop->setEnabled( layoutAvailable );
3098+
mActionMoveItemsToBottom->setEnabled( layoutAvailable );
3099+
mActionAlignLeft->setEnabled( layoutAvailable );
3100+
mActionAlignHCenter->setEnabled( layoutAvailable );
3101+
mActionAlignRight->setEnabled( layoutAvailable );
3102+
mActionAlignTop->setEnabled( layoutAvailable );
3103+
mActionAlignVCenter->setEnabled( layoutAvailable );
3104+
mActionAlignBottom->setEnabled( layoutAvailable );
3105+
mActionDistributeLeft->setEnabled( layoutAvailable );
3106+
mActionDistributeHCenter->setEnabled( layoutAvailable );
3107+
mActionDistributeRight->setEnabled( layoutAvailable );
3108+
mActionDistributeTop->setEnabled( layoutAvailable );
3109+
mActionDistributeVCenter->setEnabled( layoutAvailable );
3110+
mActionDistributeBottom->setEnabled( layoutAvailable );
3111+
mActionResizeNarrowest->setEnabled( layoutAvailable );
3112+
mActionResizeWidest->setEnabled( layoutAvailable );
3113+
mActionResizeShortest->setEnabled( layoutAvailable );
3114+
mActionResizeTallest->setEnabled( layoutAvailable );
3115+
mActionDeleteSelection->setEnabled( layoutAvailable );
3116+
mActionResizeToSquare->setEnabled( layoutAvailable );
3117+
mActionShowPage->setEnabled( layoutAvailable );
3118+
mActionGroupItems->setEnabled( layoutAvailable );
3119+
mActionUngroupItems->setEnabled( layoutAvailable );
3120+
mActionRefreshView->setEnabled( layoutAvailable );
3121+
mActionEditNodesItem->setEnabled( layoutAvailable );
3122+
mActionMoveItemContent->setEnabled( layoutAvailable );
3123+
mActionPasteInPlace->setEnabled( layoutAvailable );
3124+
mActionSaveAsTemplate->setEnabled( layoutAvailable );
3125+
mActionLoadFromTemplate->setEnabled( layoutAvailable );
3126+
mActionDuplicateLayout->setEnabled( layoutAvailable );
3127+
mActionExportAsImage->setEnabled( layoutAvailable );
3128+
mActionExportAsPDF->setEnabled( layoutAvailable );
3129+
mActionExportAsSVG->setEnabled( layoutAvailable );
3130+
mActionCut->setEnabled( layoutAvailable );
3131+
mActionCopy->setEnabled( layoutAvailable );
3132+
mActionPaste->setEnabled( layoutAvailable );
3133+
menuAlign_Items->setEnabled( layoutAvailable );
3134+
menu_Distribute_Items->setEnabled( layoutAvailable );
3135+
menuResize->setEnabled( layoutAvailable );
3136+
3137+
const QList<QAction *> itemActions = mToolsActionGroup->actions();
3138+
for ( QAction *action : itemActions )
3139+
{
3140+
action->setEnabled( layoutAvailable );
3141+
}
3142+
for ( auto it = mItemGroupSubmenus.constBegin(); it != mItemGroupSubmenus.constEnd(); ++it )
3143+
{
3144+
it.value()->setEnabled( layoutAvailable );
3145+
}
3146+
for ( auto it = mItemGroupToolButtons.constBegin(); it != mItemGroupToolButtons.constEnd(); ++it )
3147+
{
3148+
it.value()->setEnabled( layoutAvailable );
3149+
}
3150+
}
3151+
30563152
void QgsLayoutDesignerDialog::selectItems( const QList<QgsLayoutItem *> items )
30573153
{
30583154
for ( QGraphicsItem *item : items )

src/app/layout/qgslayoutdesignerdialog.h

+2
Original file line numberDiff line numberDiff line change
@@ -448,6 +448,8 @@ class QgsLayoutDesignerDialog: public QMainWindow, private Ui::QgsLayoutDesigner
448448
void loadAtlasPredefinedScalesFromProject();
449449

450450
QgsLayoutAtlas *atlas();
451+
452+
void toggleActions( bool layoutAvailable );
451453
};
452454

453455
#endif // QGSLAYOUTDESIGNERDIALOG_H

0 commit comments

Comments
 (0)