From fbe47ef20c92a906a739d95dfb8f70f4dde6a19a Mon Sep 17 00:00:00 2001 From: Nyall Dawson Date: Wed, 16 Oct 2024 10:56:17 +1000 Subject: [PATCH] Hide Draw on Canvas option from QgsExtentWidget in modal dialogs When widget is shown in a modal dialog, we can't offer the option to draw the extent on the canvas Refs #59063 --- .../gui/auto_generated/qgsextentwidget.sip.in | 2 ++ .../gui/auto_generated/qgsextentwidget.sip.in | 2 ++ src/gui/qgsextentwidget.cpp | 20 +++++++++++++++++-- src/gui/qgsextentwidget.h | 5 +++++ 4 files changed, 27 insertions(+), 2 deletions(-) diff --git a/python/PyQt6/gui/auto_generated/qgsextentwidget.sip.in b/python/PyQt6/gui/auto_generated/qgsextentwidget.sip.in index f1616ef996f..3b8307c421e 100644 --- a/python/PyQt6/gui/auto_generated/qgsextentwidget.sip.in +++ b/python/PyQt6/gui/auto_generated/qgsextentwidget.sip.in @@ -238,6 +238,8 @@ to permit access to the map canvas) virtual void dropEvent( QDropEvent *event ); + virtual void showEvent( QShowEvent *event ); + }; diff --git a/python/gui/auto_generated/qgsextentwidget.sip.in b/python/gui/auto_generated/qgsextentwidget.sip.in index 567d4834bc3..b3fbeb14e68 100644 --- a/python/gui/auto_generated/qgsextentwidget.sip.in +++ b/python/gui/auto_generated/qgsextentwidget.sip.in @@ -238,6 +238,8 @@ to permit access to the map canvas) virtual void dropEvent( QDropEvent *event ); + virtual void showEvent( QShowEvent *event ); + }; diff --git a/src/gui/qgsextentwidget.cpp b/src/gui/qgsextentwidget.cpp index 3b18a3a637b..a058543f527 100644 --- a/src/gui/qgsextentwidget.cpp +++ b/src/gui/qgsextentwidget.cpp @@ -585,8 +585,7 @@ void QgsExtentWidget::setMapCanvas( QgsMapCanvas *canvas, bool drawOnCanvasOptio mCurrentExtentButton->setVisible( true ); mUseCanvasExtentAction->setVisible( true ); - if ( drawOnCanvasOption ) - mDrawOnCanvasAction->setVisible( true ); + mDrawOnCanvasAction->setVisible( drawOnCanvasOption && !mBlockDrawOnCanvas ); mCondensedToolButton->setToolTip( tr( "Set to current map canvas extent" ) ); mCondensedToolButton->setIcon( QgsApplication::getThemeIcon( QStringLiteral( "/mActionMapIdentification.svg" ) ) ); @@ -667,3 +666,20 @@ void QgsExtentWidget::dropEvent( QDropEvent *event ) mCondensedLineEdit->setHighlighted( false ); update(); } + +void QgsExtentWidget::showEvent( QShowEvent * ) +{ + if ( mFirstShow ) + { + // we don't support select on canvas if the dialog is modal + if ( QWidget *parentWindow = window() ) + { + if ( parentWindow->isModal() ) + { + mBlockDrawOnCanvas = true; + mDrawOnCanvasAction->setVisible( false ); + } + } + mFirstShow = false; + } +} diff --git a/src/gui/qgsextentwidget.h b/src/gui/qgsextentwidget.h index fcd3abf5929..ea6615d10ab 100644 --- a/src/gui/qgsextentwidget.h +++ b/src/gui/qgsextentwidget.h @@ -241,6 +241,7 @@ class GUI_EXPORT QgsExtentWidget : public QWidget, private Ui::QgsExtentGroupBox void dragEnterEvent( QDragEnterEvent *event ) override; void dragLeaveEvent( QDragLeaveEvent *event ) override; void dropEvent( QDropEvent *event ) override; + void showEvent( QShowEvent *event ) override; private slots: @@ -292,6 +293,10 @@ class GUI_EXPORT QgsExtentWidget : public QWidget, private Ui::QgsExtentGroupBox bool mHasFixedOutputCrs = false; QRegularExpression mCondensedRe; + + bool mFirstShow = true; + bool mBlockDrawOnCanvas = false; + void setValid( bool valid ); void setExtentToLayerExtent( const QString &layerId );