From 9b07d954f5e9ca32bff8150c056688ac4fb34a96 Mon Sep 17 00:00:00 2001 From: Nyall Dawson Date: Thu, 25 Mar 2021 12:36:33 +1000 Subject: [PATCH] Don't force users to hit apply to setup static wms-t settings after toggling dynamic temporal control Not the nicest code approach, but I honestly can't think of any other way to handle this... --- .../qgsmaplayerconfigwidget.sip.in | 3 +++ src/gui/qgsmaplayerconfigwidget.h | 14 ++++++++++++++ .../qgsrasterlayertemporalpropertieswidget.cpp | 10 ++++++++++ .../qgsrasterlayertemporalpropertieswidget.h | 3 +++ src/providers/wms/qgswmstsettingswidget.cpp | 18 ++++++++++++++++++ src/ui/qgswmstsettingswidgetbase.ui | 8 ++++---- 6 files changed, 52 insertions(+), 4 deletions(-) diff --git a/python/gui/auto_generated/qgsmaplayerconfigwidget.sip.in b/python/gui/auto_generated/qgsmaplayerconfigwidget.sip.in index c36266ea0345..94b3b8940f01 100644 --- a/python/gui/auto_generated/qgsmaplayerconfigwidget.sip.in +++ b/python/gui/auto_generated/qgsmaplayerconfigwidget.sip.in @@ -60,6 +60,9 @@ Called when changes to the layer need to be made. Will be called when live update is enabled. %End + signals: + + protected: }; diff --git a/src/gui/qgsmaplayerconfigwidget.h b/src/gui/qgsmaplayerconfigwidget.h index d53c4ad0eb8d..cf5cbd2efc95 100644 --- a/src/gui/qgsmaplayerconfigwidget.h +++ b/src/gui/qgsmaplayerconfigwidget.h @@ -67,6 +67,20 @@ class GUI_EXPORT QgsMapLayerConfigWidget : public QgsPanelWidget */ virtual void apply() = 0; + signals: + +#ifndef SIP_RUN + + /** + * Emitted whenever the dynamic temporal control option is toggled in the associated layer + * properties dialog. + * + * \note Not available in Python bindings + * \since QGIS 3.20 + */ + void dynamicTemporalControlToggled( bool enabled ); +#endif + protected: QgsMapLayer *mLayer = nullptr; QgsMapCanvas *mMapCanvas = nullptr; diff --git a/src/gui/raster/qgsrasterlayertemporalpropertieswidget.cpp b/src/gui/raster/qgsrasterlayertemporalpropertieswidget.cpp index 47e6d51837f2..b8dbf68a10c9 100644 --- a/src/gui/raster/qgsrasterlayertemporalpropertieswidget.cpp +++ b/src/gui/raster/qgsrasterlayertemporalpropertieswidget.cpp @@ -38,6 +38,8 @@ QgsRasterLayerTemporalPropertiesWidget::QgsRasterLayerTemporalPropertiesWidget( connect( mModeFixedRangeRadio, &QRadioButton::toggled, mFixedTimeRangeFrame, &QWidget::setEnabled ); + connect( mTemporalGroupBox, &QGroupBox::toggled, this, &QgsRasterLayerTemporalPropertiesWidget::temporalGroupBoxChecked ); + mStartTemporalDateTimeEdit->setDisplayFormat( QStringLiteral( "yyyy-MM-dd HH:mm:ss" ) ); mEndTemporalDateTimeEdit->setDisplayFormat( QStringLiteral( "yyyy-MM-dd HH:mm:ss" ) ); @@ -101,3 +103,11 @@ void QgsRasterLayerTemporalPropertiesWidget::addWidget( QgsMapLayerConfigWidget mExtraWidgets << widget; mExtraWidgetLayout->insertWidget( mExtraWidgetLayout->count() - 1, widget ); } + +void QgsRasterLayerTemporalPropertiesWidget::temporalGroupBoxChecked( bool checked ) +{ + for ( QgsMapLayerConfigWidget *widget : std::as_const( mExtraWidgets ) ) + { + widget->emit dynamicTemporalControlToggled( checked ); + } +} diff --git a/src/gui/raster/qgsrasterlayertemporalpropertieswidget.h b/src/gui/raster/qgsrasterlayertemporalpropertieswidget.h index 42355f80119c..add31c51bb30 100644 --- a/src/gui/raster/qgsrasterlayertemporalpropertieswidget.h +++ b/src/gui/raster/qgsrasterlayertemporalpropertieswidget.h @@ -59,6 +59,9 @@ class GUI_EXPORT QgsRasterLayerTemporalPropertiesWidget : public QWidget, privat */ void addWidget( QgsMapLayerConfigWidget *widget SIP_TRANSFER ); + private slots: + void temporalGroupBoxChecked( bool checked ); + private: /** diff --git a/src/providers/wms/qgswmstsettingswidget.cpp b/src/providers/wms/qgswmstsettingswidget.cpp index 4cf67095ca3b..1d68f07ca927 100644 --- a/src/providers/wms/qgswmstsettingswidget.cpp +++ b/src/providers/wms/qgswmstsettingswidget.cpp @@ -66,6 +66,24 @@ QgsWmstSettingsWidget::QgsWmstSettingsWidget( QgsMapLayer *layer, QgsMapCanvas * "with valid values in order to use it here." ) ); mProjectTemporalRangeLabel->setEnabled( false ); } + + connect( this, &QgsMapLayerConfigWidget::dynamicTemporalControlToggled, this, [ = ]( bool checked ) + { + if ( checked ) + { + mStaticWmstStackedWidget->setCurrentIndex( 0 ); + // why do we hide this widget? well, the second page of the stacked widget is considerably higher + // then the first and we don't want to show a whole bunch of empty vertical space which Qt will give + // in order to accommodate the vertical height of the non-visible second page! + mStaticStackedWidgetFrame->hide(); + } + else + { + mStaticWmstStackedWidget->setCurrentIndex( 1 ); + mStaticStackedWidgetFrame->show(); + } + mStaticWmstStackedWidget->updateGeometry(); + } ); } void QgsWmstSettingsWidget::syncToLayer( QgsMapLayer *layer ) diff --git a/src/ui/qgswmstsettingswidgetbase.ui b/src/ui/qgswmstsettingswidgetbase.ui index a128fee99263..399e19d20313 100644 --- a/src/ui/qgswmstsettingswidgetbase.ui +++ b/src/ui/qgswmstsettingswidgetbase.ui @@ -44,7 +44,7 @@ - 1 + 0 @@ -63,7 +63,7 @@ - <html><head/><body><p>The static WMS-T options are disabled because the layer is set to <span style=" font-weight:600;">Dynamic Temporal Control</span>. To enable them first disable <span style=" font-weight:600;">Dynamic Temporal Control</span> and click Apply.</p></body></html> + <html><head/><body><p>The static WMS-T options are disabled because the layer is set to <span style=" font-weight:600;">Dynamic Temporal Control</span>. To enable them first disable <span style=" font-weight:600;">Dynamic Temporal Control</span>.</p></body></html> true @@ -197,7 +197,7 @@ - 21 + 11 3 57 2020 @@ -345,7 +345,7 @@ - 18 + 8 20 36 2020