Skip to content

Commit

Permalink
Avoid update loop when QgsTemporalNavigationObject::setFrameDuration
Browse files Browse the repository at this point in the history
is called from code
  • Loading branch information
nyalldawson committed Oct 22, 2020
1 parent a4bcdc4 commit fbe8098
Show file tree
Hide file tree
Showing 2 changed files with 14 additions and 3 deletions.
16 changes: 13 additions & 3 deletions src/gui/qgstemporalcontrollerwidget.cpp
Expand Up @@ -53,7 +53,15 @@ QgsTemporalControllerWidget::QgsTemporalControllerWidget( QWidget *parent )
setWidgetStateFromNavigationMode( mNavigationObject->navigationMode() );
connect( mNavigationObject, &QgsTemporalNavigationObject::navigationModeChanged, this, &QgsTemporalControllerWidget::setWidgetStateFromNavigationMode );
connect( mNavigationObject, &QgsTemporalNavigationObject::temporalExtentsChanged, this, &QgsTemporalControllerWidget::setDates );
connect( mNavigationObject, &QgsTemporalNavigationObject::temporalFrameDurationChanged, this, &QgsTemporalControllerWidget::setTimeStep );
connect( mNavigationObject, &QgsTemporalNavigationObject::temporalFrameDurationChanged, this, [ = ]( const QgsInterval & timeStep )
{
if ( mBlockFrameDurationUpdates )
return;

mBlockFrameDurationUpdates++;
setTimeStep( timeStep );
mBlockFrameDurationUpdates--;
} );
connect( mNavigationOff, &QPushButton::clicked, this, &QgsTemporalControllerWidget::mNavigationOff_clicked );
connect( mNavigationFixedRange, &QPushButton::clicked, this, &QgsTemporalControllerWidget::mNavigationFixedRange_clicked );
connect( mNavigationAnimated, &QPushButton::clicked, this, &QgsTemporalControllerWidget::mNavigationAnimated_clicked );
Expand Down Expand Up @@ -287,8 +295,10 @@ void QgsTemporalControllerWidget::updateFrameDuration()
QgsProject::instance()->timeSettings()->setTimeStepUnit( static_cast< QgsUnitTypes::TemporalUnit>( mTimeStepsComboBox->currentData().toInt() ) );
QgsProject::instance()->timeSettings()->setTimeStep( mStepSpinBox->value() );

mNavigationObject->setFrameDuration( QgsInterval( QgsProject::instance()->timeSettings()->timeStep(),
QgsProject::instance()->timeSettings()->timeStepUnit() ) );
if ( !mBlockFrameDurationUpdates )
mNavigationObject->setFrameDuration( QgsInterval( QgsProject::instance()->timeSettings()->timeStep(),
QgsProject::instance()->timeSettings()->timeStepUnit() ) );

mSlider->setRange( 0, mNavigationObject->totalFrameCount() - 1 );
}

Expand Down
1 change: 1 addition & 0 deletions src/gui/qgstemporalcontrollerwidget.h
Expand Up @@ -74,6 +74,7 @@ class GUI_EXPORT QgsTemporalControllerWidget : public QgsPanelWidget, private Ui
QgsTemporalNavigationObject *mNavigationObject = nullptr;

int mBlockSettingUpdates = 0;
int mBlockFrameDurationUpdates = 0;

bool mHasTemporalLayersLoaded = false;

Expand Down

0 comments on commit fbe8098

Please sign in to comment.