42   mStartDateTime->setDateTimeRange( QDateTime( QDate( 1, 1, 1 ), QTime( 0, 0, 0 ) ), mStartDateTime->maximumDateTime() );
 
   43   mEndDateTime->setDateTimeRange( QDateTime( QDate( 1, 1, 1 ), QTime( 0, 0, 0 ) ), mStartDateTime->maximumDateTime() );
 
   44   mFixedRangeStartDateTime->setDateTimeRange( QDateTime( QDate( 1, 1, 1 ), QTime( 0, 0, 0 ) ), mStartDateTime->maximumDateTime() );
 
   45   mFixedRangeEndDateTime->setDateTimeRange( QDateTime( QDate( 1, 1, 1 ), QTime( 0, 0, 0 ) ), mStartDateTime->maximumDateTime() );
 
   47   connect( mForwardButton, &QPushButton::clicked, 
this, &QgsTemporalControllerWidget::togglePlayForward );
 
   48   connect( mBackButton, &QPushButton::clicked, 
this, &QgsTemporalControllerWidget::togglePlayBackward );
 
   49   connect( mStopButton, &QPushButton::clicked, 
this, &QgsTemporalControllerWidget::togglePause );
 
   54   connect( mLoopingCheckBox, &QCheckBox::toggled, 
this, [ = ]( 
bool state ) { mNavigationObject->
setLooping( state ); } );
 
   56   setWidgetStateFromNavigationMode( mNavigationObject->
navigationMode() );
 
   61     if ( mBlockFrameDurationUpdates )
 
   64     mBlockFrameDurationUpdates++;
 
   65     updateTimeStepInputs( timeStep );
 
   66     mBlockFrameDurationUpdates--;
 
   68   connect( mNavigationOff, &QPushButton::clicked, 
this, &QgsTemporalControllerWidget::mNavigationOff_clicked );
 
   69   connect( mNavigationFixedRange, &QPushButton::clicked, 
this, &QgsTemporalControllerWidget::mNavigationFixedRange_clicked );
 
   70   connect( mNavigationAnimated, &QPushButton::clicked, 
this, &QgsTemporalControllerWidget::mNavigationAnimated_clicked );
 
   79   connect( mStartDateTime, &QDateTimeEdit::dateTimeChanged, 
this, &QgsTemporalControllerWidget::startEndDateTime_changed );
 
   80   connect( mEndDateTime, &QDateTimeEdit::dateTimeChanged, 
this, &QgsTemporalControllerWidget::startEndDateTime_changed );
 
   81   connect( mFixedRangeStartDateTime, &QDateTimeEdit::dateTimeChanged, 
this, &QgsTemporalControllerWidget::fixedRangeStartEndDateTime_changed );
 
   82   connect( mFixedRangeEndDateTime, &QDateTimeEdit::dateTimeChanged, 
this, &QgsTemporalControllerWidget::fixedRangeStartEndDateTime_changed );
 
   83   connect( mStepSpinBox, qOverload<double>( &QDoubleSpinBox::valueChanged ), 
this, &QgsTemporalControllerWidget::updateFrameDuration );
 
   84   connect( mTimeStepsComboBox, qOverload<int>( &QComboBox::currentIndexChanged ), 
this, &QgsTemporalControllerWidget::updateFrameDuration );
 
   85   connect( mSlider, &QSlider::valueChanged, 
this, &QgsTemporalControllerWidget::timeSlider_valueChanged );
 
   87   mStepSpinBox->setClearValue( 1 );
 
   91   connect( mSettings, &QPushButton::clicked, 
this, &QgsTemporalControllerWidget::settings_clicked );
 
   95   mRangeMenu.reset( 
new QMenu( 
this ) );
 
   97   mRangeSetToAllLayersAction = 
new QAction( tr( 
"Set to Full Range" ), mRangeMenu.get() );
 
   99   connect( mRangeSetToAllLayersAction, &QAction::triggered, 
this, &QgsTemporalControllerWidget::mRangeSetToAllLayersAction_triggered );
 
  100   mRangeMenu->addAction( mRangeSetToAllLayersAction );
 
  102   mRangeSetToProjectAction = 
new QAction( tr( 
"Set to Preset Project Range" ), mRangeMenu.get() );
 
  103   connect( mRangeSetToProjectAction, &QAction::triggered, 
this, &QgsTemporalControllerWidget::mRangeSetToProjectAction_triggered );
 
  104   mRangeMenu->addAction( mRangeSetToProjectAction );
 
  106   mRangeMenu->addSeparator();
 
  108   mRangeLayersSubMenu.reset( 
new QMenu( tr( 
"Set to Single Layer's Range" ), mRangeMenu.get() ) );
 
  109   mRangeLayersSubMenu->setEnabled( 
false );
 
  110   mRangeMenu->addMenu( mRangeLayersSubMenu.get() );
 
  111   connect( mRangeMenu.get(), &QMenu::aboutToShow, 
this, &QgsTemporalControllerWidget::aboutToShowRangeMenu );
 
  113   mSetRangeButton->setPopupMode( QToolButton::MenuButtonPopup );
 
  114   mSetRangeButton->setMenu( mRangeMenu.get() );
 
  115   mSetRangeButton->setDefaultAction( mRangeSetToAllLayersAction );
 
  116   mFixedRangeSetRangeButton->setPopupMode( QToolButton::MenuButtonPopup );
 
  117   mFixedRangeSetRangeButton->setMenu( mRangeMenu.get() );
 
  118   mFixedRangeSetRangeButton->setDefaultAction( mRangeSetToAllLayersAction );
 
  122   QgsDateTimeRange range;
 
  127   if ( range.begin().isValid() && range.end().isValid() )
 
  129     whileBlocking( mStartDateTime )->setDateTime( range.begin() );
 
  131     whileBlocking( mFixedRangeStartDateTime )->setDateTime( range.begin() );
 
  132     whileBlocking( mFixedRangeEndDateTime )->setDateTime( range.end() );
 
  157   mStepSpinBox->setDecimals( 3 );
 
  159   mStepSpinBox->setMinimum( 0.001 );
 
  160   mStepSpinBox->setMaximum( std::numeric_limits<int>::max() );
 
  161   mStepSpinBox->setSingleStep( 1 );
 
  162   mStepSpinBox->setValue( 1 );
 
  164   mForwardButton->setToolTip( tr( 
"Play" ) );
 
  165   mBackButton->setToolTip( tr( 
"Reverse" ) );
 
  166   mNextButton->setToolTip( tr( 
"Go to next frame" ) );
 
  167   mPreviousButton->setToolTip( tr( 
"Go to previous frame" ) );
 
  168   mStopButton->setToolTip( tr( 
"Pause" ) );
 
  169   mRewindButton->setToolTip( tr( 
"Rewind to start" ) );
 
  170   mFastForwardButton->setToolTip( tr( 
"Fast forward to end" ) );
 
  172   updateFrameDuration();
 
  186   if ( mSlider->hasFocus() && e->key() == Qt::Key_Space )
 
  190   QWidget::keyPressEvent( e );
 
  193 void QgsTemporalControllerWidget::aboutToShowRangeMenu()
 
  195   QgsDateTimeRange projectRange;
 
  198   mRangeSetToProjectAction->setEnabled( projectRange.begin().isValid() && projectRange.end().isValid() );
 
  200   mRangeLayersSubMenu->clear();
 
  201   for ( 
int i = 0; i < mMapLayerModel->
rowCount(); ++i )
 
  203     QModelIndex index = mMapLayerModel->
index( i, 0 );
 
  208     QIcon icon = qvariant_cast<QIcon>( mMapLayerModel->
data( index, Qt::DecorationRole ) );
 
  209     QString text = mMapLayerModel->
data( index, Qt::DisplayRole ).toString();
 
  211     if ( range.begin().isValid() && range.end().isValid() )
 
  213       QAction *action = 
new QAction( icon, text, mRangeLayersSubMenu.get() );
 
  214       connect( action, &QAction::triggered, 
this, [ = ]
 
  217         saveRangeToProject();
 
  219       mRangeLayersSubMenu->addAction( action );
 
  222   mRangeLayersSubMenu->setEnabled( !mRangeLayersSubMenu->actions().isEmpty() );
 
  225 void QgsTemporalControllerWidget::togglePlayForward()
 
  227   mPlayingForward = 
true;
 
  231     mStopButton->setChecked( 
false );
 
  232     mBackButton->setChecked( 
false );
 
  233     mForwardButton->setChecked( 
true );
 
  238     mBackButton->setChecked( 
true );
 
  239     mForwardButton->setChecked( 
false );
 
  240     mNavigationObject->
pause();
 
  244 void QgsTemporalControllerWidget::togglePlayBackward()
 
  246   mPlayingForward = 
false;
 
  250     mStopButton->setChecked( 
false );
 
  251     mBackButton->setChecked( 
true );
 
  252     mForwardButton->setChecked( 
false );
 
  257     mBackButton->setChecked( 
true );
 
  258     mBackButton->setChecked( 
false );
 
  259     mNavigationObject->
pause();
 
  263 void QgsTemporalControllerWidget::togglePause()
 
  267     mStopButton->setChecked( 
true );
 
  268     mBackButton->setChecked( 
false );
 
  269     mForwardButton->setChecked( 
false );
 
  270     mNavigationObject->
pause();
 
  274     mBackButton->setChecked( mPlayingForward ? 
false : 
true );
 
  275     mForwardButton->setChecked( mPlayingForward ? 
false : 
true );
 
  276     if ( mPlayingForward )
 
  287 void QgsTemporalControllerWidget::updateTemporalExtent()
 
  291   const QDateTime start = mStartDateTime->dateTime();
 
  292   const QDateTime end = mEndDateTime->dateTime();
 
  293   const bool isTimeInstant = start == end;
 
  294   QgsDateTimeRange temporalExtent = QgsDateTimeRange( start, end,
 
  301 void QgsTemporalControllerWidget::updateFrameDuration()
 
  303   if ( mBlockSettingUpdates )
 
  311   if ( !mBlockFrameDurationUpdates )
 
  323     mStepSpinBox->setEnabled( 
false );
 
  324     mStepSpinBox->setValue( 1 );
 
  325     mSlider->setTickInterval( 1 );
 
  326     mSlider->setTickPosition( QSlider::TicksBothSides );
 
  330     mStepSpinBox->setEnabled( 
true );
 
  331     mSlider->setTickInterval( 0 );
 
  332     mSlider->setTickPosition( QSlider::NoTicks );
 
  336 void QgsTemporalControllerWidget::setWidgetStateFromProject()
 
  338   mBlockSettingUpdates++;
 
  341   mBlockSettingUpdates--;
 
  345       QStringLiteral( 
"/NavigationMode" ), 0, &ok ) );
 
  349     setWidgetStateFromNavigationMode( mode );
 
  357   const QString startString = 
QgsProject::instance()->
readEntry( QStringLiteral( 
"TemporalControllerWidget" ), QStringLiteral( 
"/StartDateTime" ) );
 
  358   const QString endString = 
QgsProject::instance()->
readEntry( QStringLiteral( 
"TemporalControllerWidget" ), QStringLiteral( 
"/EndDateTime" ) );
 
  359   if ( !startString.isEmpty() && !endString.isEmpty() )
 
  361     whileBlocking( mStartDateTime )->setDateTime( QDateTime::fromString( startString, Qt::ISODateWithMs ) );
 
  362     whileBlocking( mEndDateTime )->setDateTime( QDateTime::fromString( endString, Qt::ISODateWithMs ) );
 
  363     whileBlocking( mFixedRangeStartDateTime )->setDateTime( QDateTime::fromString( startString, Qt::ISODateWithMs ) );
 
  364     whileBlocking( mFixedRangeEndDateTime )->setDateTime( QDateTime::fromString( endString, Qt::ISODateWithMs ) );
 
  368     setDatesToProjectTime();
 
  370   updateTemporalExtent();
 
  371   updateFrameDuration();
 
  377 void QgsTemporalControllerWidget::mNavigationOff_clicked()
 
  386 void QgsTemporalControllerWidget::mNavigationFixedRange_clicked()
 
  395 void QgsTemporalControllerWidget::mNavigationAnimated_clicked()
 
  413       mNavigationModeStackedWidget->setCurrentIndex( 0 );
 
  416       mNavigationModeStackedWidget->setCurrentIndex( 1 );
 
  419       mNavigationModeStackedWidget->setCurrentIndex( 2 );
 
  424 void QgsTemporalControllerWidget::onLayersAdded( 
const QList<QgsMapLayer *> &layers )
 
  426   if ( !mHasTemporalLayersLoaded )
 
  430       if ( layer->temporalProperties() )
 
  432         mHasTemporalLayersLoaded |= layer->temporalProperties()->isActive();
 
  434         if ( !mHasTemporalLayersLoaded )
 
  438             if ( layer->isValid() && layer->temporalProperties()->isActive() && !mHasTemporalLayersLoaded )
 
  440               mHasTemporalLayersLoaded = true;
 
  441               firstTemporalLayerLoaded( layer );
 
  442               mNavigationObject->setAvailableTemporalRanges( QgsTemporalUtils::usedTemporalRangesForProject( QgsProject::instance() ) );
 
  447         firstTemporalLayerLoaded( layer );
 
  455 void QgsTemporalControllerWidget::firstTemporalLayerLoaded( 
QgsMapLayer *layer )
 
  457   setDatesToProjectTime();
 
  459   if ( 
QgsMeshLayer *meshLayer = qobject_cast<QgsMeshLayer *>( layer ) )
 
  461     mBlockFrameDurationUpdates++;
 
  462     setTimeStep( meshLayer->firstValidTimeStep() );
 
  463     mBlockFrameDurationUpdates--;
 
  464     updateFrameDuration();
 
  466   else if ( 
QgsRasterLayer *rasterLayer = qobject_cast<QgsRasterLayer *>( layer ) )
 
  468     if ( rasterLayer->dataProvider() && rasterLayer->dataProvider()->temporalCapabilities() )
 
  470       mBlockFrameDurationUpdates++;
 
  471       setTimeStep( rasterLayer->dataProvider()->temporalCapabilities()->defaultInterval() );
 
  472       mBlockFrameDurationUpdates--;
 
  473       updateFrameDuration();
 
  478 void QgsTemporalControllerWidget::onProjectCleared()
 
  480   mHasTemporalLayersLoaded = 
false;
 
  487   const QTime startOfCurrentHour = QTime( QTime::currentTime().hour(), 0, 0 );
 
  488   const QDateTime end = QDateTime( QDate::currentDate(), startOfCurrentHour, Qt::UTC );
 
  489   const QDateTime start = end.addSecs( -24 * 60 * 60 );
 
  493   whileBlocking( mFixedRangeStartDateTime )->setDateTime( start );
 
  496   updateTemporalExtent();
 
  498   mStepSpinBox->setValue( 1 );
 
  501 void QgsTemporalControllerWidget::updateSlider( 
const QgsDateTimeRange &range )
 
  504   updateRangeLabel( range );
 
  507 void QgsTemporalControllerWidget::updateRangeLabel( 
const QgsDateTimeRange &range )
 
  509   QString timeFrameFormat = QStringLiteral( 
"yyyy-MM-dd HH:mm:ss" );
 
  512     timeFrameFormat = QStringLiteral( 
"yyyy-MM-dd HH:mm:ss.zzz" );
 
  516       mCurrentRangeLabel->setText( tr( 
"Current frame: %1 ≤ <i>t</i> < %2" ).arg(
 
  517                                      range.begin().toString( timeFrameFormat ),
 
  518                                      range.end().toString( timeFrameFormat ) ) );
 
  521       mCurrentRangeLabel->setText( tr( 
"Range: %1 ≤ <i>t</i> < %2" ).arg(
 
  522                                      range.begin().toString( timeFrameFormat ),
 
  523                                      range.end().toString( timeFrameFormat ) ) );
 
  526       mCurrentRangeLabel->setText( tr( 
"Temporal navigation disabled" ) );
 
  533   return mNavigationObject;
 
  536 void QgsTemporalControllerWidget::settings_clicked()
 
  538   QgsTemporalMapSettingsWidget *settingsWidget = 
new QgsTemporalMapSettingsWidget( 
this );
 
  539   settingsWidget->setFrameRateValue( mNavigationObject->
framesPerSecond() );
 
  542   connect( settingsWidget, &QgsTemporalMapSettingsWidget::frameRateChanged, 
this, [ = ]( 
double rate )
 
  549   connect( settingsWidget, &QgsTemporalMapSettingsWidget::temporalRangeCumulativeChanged, 
this, [ = ]( 
bool state )
 
  558 void QgsTemporalControllerWidget::timeSlider_valueChanged( 
int value )
 
  563 void QgsTemporalControllerWidget::startEndDateTime_changed()
 
  565   whileBlocking( mFixedRangeStartDateTime )->setDateTime( mStartDateTime->dateTime() );
 
  566   whileBlocking( mFixedRangeEndDateTime )->setDateTime( mEndDateTime->dateTime() );
 
  568   updateTemporalExtent();
 
  569   saveRangeToProject();
 
  572 void QgsTemporalControllerWidget::fixedRangeStartEndDateTime_changed()
 
  574   whileBlocking( mStartDateTime )->setDateTime( mFixedRangeStartDateTime->dateTime() );
 
  575   whileBlocking( mEndDateTime )->setDateTime( mFixedRangeEndDateTime->dateTime() );
 
  577   updateTemporalExtent();
 
  578   saveRangeToProject();
 
  581 void QgsTemporalControllerWidget::mRangeSetToAllLayersAction_triggered()
 
  583   setDatesToAllLayers();
 
  584   saveRangeToProject();
 
  587 void QgsTemporalControllerWidget::setTimeStep( 
const QgsInterval &timeStep )
 
  592   int selectedUnit = -1;
 
  593   double selectedValue = std::numeric_limits<double>::max();
 
  599     int stringSize = std::numeric_limits<int>::max();
 
  600     int precision = mStepSpinBox->decimals();
 
  601     for ( 
int i = 0; i < mTimeStepsComboBox->count(); ++i )
 
  605       QString 
string = QString::number( value, 
'f', 
precision );
 
  606       string.remove( QRegExp( 
"0+$" ) ); 
 
  607       string.remove( QRegExp( 
"[.]+$" ) ); 
 
  610            && 
string.size() <= stringSize 
 
  611            && value < selectedValue ) 
 
  614         selectedValue = value;
 
  615         stringSize = 
string.size();
 
  617       else if ( 
string != 
'0' 
  619                 && 
string.size() < stringSize ) 
 
  622         selectedValue = value ;
 
  623         stringSize = 
string.size();
 
  629     selectedUnit = mTimeStepsComboBox->findData( 
static_cast< int >( timeStep.
originalUnit() ) );
 
  633   if ( selectedUnit >= 0 )
 
  635     mStepSpinBox->setValue( selectedValue );
 
  636     mTimeStepsComboBox->setCurrentIndex( selectedUnit );
 
  639   updateFrameDuration();
 
  642 void QgsTemporalControllerWidget::updateTimeStepInputs( 
const QgsInterval &timeStep )
 
  647   QString timeDisplayFormat = QStringLiteral( 
"yyyy-MM-dd HH:mm:ss" );
 
  650     timeDisplayFormat = QStringLiteral( 
"yyyy-MM-dd HH:mm:ss.zzz" );
 
  652     updateTemporalExtent();
 
  654   mStartDateTime->setDisplayFormat( timeDisplayFormat );
 
  655   mEndDateTime->setDisplayFormat( timeDisplayFormat );
 
  656   mFixedRangeStartDateTime->setDisplayFormat( timeDisplayFormat );
 
  657   mFixedRangeEndDateTime->setDisplayFormat( timeDisplayFormat );
 
  660   if ( timeStep == 
QgsInterval( mStepSpinBox->value(),
 
  667     mTimeStepsComboBox->setCurrentIndex( timeStep.
originalUnit() );
 
  670   updateFrameDuration();
 
  673 void QgsTemporalControllerWidget::mRangeSetToProjectAction_triggered()
 
  675   setDatesToProjectTime();
 
  676   saveRangeToProject();
 
  679 void QgsTemporalControllerWidget::setDates( 
const QgsDateTimeRange &range )
 
  681   if ( range.begin().isValid() && range.end().isValid() )
 
  683     whileBlocking( mStartDateTime )->setDateTime( range.begin() );
 
  685     whileBlocking( mFixedRangeStartDateTime )->setDateTime( range.begin() );
 
  686     whileBlocking( mFixedRangeEndDateTime )->setDateTime( range.end() );
 
  687     updateTemporalExtent();
 
  691 void QgsTemporalControllerWidget::setDatesToAllLayers()
 
  693   QgsDateTimeRange range;
 
  700 void QgsTemporalControllerWidget::setDatesToProjectTime()
 
  702   QgsDateTimeRange range;
 
  709   if ( !range.begin().isValid() || !range.end().isValid() )
 
  719 void QgsTemporalControllerWidget::saveRangeToProject()
 
  722                                       QStringLiteral( 
"/StartDateTime" ), mStartDateTime->dateTime().toTimeSpec( Qt::OffsetFromUTC ).toString( Qt::ISODateWithMs ) );
 
  724                                       QStringLiteral( 
"/EndDateTime" ), mEndDateTime->dateTime().toTimeSpec( Qt::OffsetFromUTC ).toString( Qt::ISODateWithMs ) );
 
static QIcon getThemeIcon(const QString &name, const QColor &fillColor=QColor(), const QColor &strokeColor=QColor())
Helper to get a theme icon.
A representation of the interval between two datetime values.
double originalDuration() const
Returns the original interval duration.
bool isValid() const
Returns true if the interval is valid.
double seconds() const
Returns the interval duration in seconds.
QgsUnitTypes::TemporalUnit originalUnit() const
Returns the original interval temporal unit.
The QgsMapLayerModel class is a model to display layers in widgets.
int rowCount(const QModelIndex &parent=QModelIndex()) const override
QVariant data(const QModelIndex &index, int role=Qt::DisplayRole) const override
QModelIndex index(int row, int column, const QModelIndex &parent=QModelIndex()) const override
@ LayerRole
Stores pointer to the map layer itself.
virtual QgsDateTimeRange calculateTemporalExtent(QgsMapLayer *layer) const
Attempts to calculate the overall temporal extent for the specified layer, using the settings defined...
Base class for all map layer types.
void dataSourceChanged()
Emitted whenever the layer's data source has been changed.
virtual QgsMapLayerTemporalProperties * temporalProperties()
Returns the layer's temporal properties.
Represents a mesh layer supporting display of data on structured or unstructured meshes.
QgsDateTimeRange temporalRange() const
Returns the project's temporal range, which indicates the earliest and latest datetime ranges associa...
void setTimeStepUnit(QgsUnitTypes::TemporalUnit unit)
Sets the project's time step (length of one animation frame) unit, which is used as the default value...
void setFramesPerSecond(double rate)
Sets the project's default animation frame rate, in frames per second.
QgsUnitTypes::TemporalUnit timeStepUnit() const
Returns the project's time step (length of one animation frame) unit, which is used as the default va...
void setIsTemporalRangeCumulative(bool state)
Sets the project's temporal range as cumulative in animation settings.
void setTimeStep(double step)
Sets the project's time step (length of one animation frame), which is used as the default value when...
int readNumEntry(const QString &scope, const QString &key, int def=0, bool *ok=nullptr) const
Reads an integer from the specified scope and key.
static QgsProject * instance()
Returns the QgsProject singleton instance.
void cleared()
Emitted when the project is cleared (and additionally when an open project is cleared just before a n...
QString readEntry(const QString &scope, const QString &key, const QString &def=QString(), bool *ok=nullptr) const
Reads a string from the specified scope and key.
void readProject(const QDomDocument &)
Emitted when a project is being read.
bool writeEntry(const QString &scope, const QString &key, bool value)
Write a boolean value to the project file.
void layersAdded(const QList< QgsMapLayer * > &layers)
Emitted when one or more layers were added to the registry.
const QgsProjectTimeSettings * timeSettings() const
Returns the project's time settings, which contains the project's temporal range and other time based...
Represents a raster layer.
void updateTemporalRange(const QgsDateTimeRange &range)
Signals that a temporal range has changed and needs to be updated in all connected objects.
Implements a temporal controller based on a frame by frame navigation and animation.
void previous()
Jumps back to the previous frame.
double framesPerSecond() const
Returns the animation frame rate, in frames per second.
void setAvailableTemporalRanges(const QList< QgsDateTimeRange > &ranges)
Sets the list of all available temporal ranges which have data available.
void setFrameDuration(const QgsInterval &duration)
Sets the frame duration, which dictates the temporal length of each frame in the animation.
void playForward()
Starts the animation playing in a forward direction up till the end of all frames.
NavigationMode
Represents the current temporal navigation mode.
@ NavigationOff
Temporal navigation is disabled.
@ FixedRange
Temporal navigation relies on a fixed datetime range.
@ Animated
Temporal navigation relies on frames within a datetime range.
long long currentFrameNumber() const
Returns the current frame number.
void rewindToStart()
Rewinds the temporal navigation to start of the temporal extent.
void pause()
Pauses the temporal navigation.
void setCurrentFrameNumber(long long frame)
Sets the current animation frame number.
long long totalFrameCount() const
Returns the total number of frames for the navigation.
void skipToEnd()
Skips the temporal navigation to end of the temporal extent.
void temporalFrameDurationChanged(const QgsInterval &interval)
Emitted whenever the frameDuration interval of the controller changes.
void navigationModeChanged(NavigationMode mode)
Emitted whenever the navigation mode changes.
void setFramesPerSecond(double rate)
Sets the animation frame rate, in frames per second.
void stateChanged(AnimationState state)
Emitted whenever the animation state changes.
AnimationState
Represents the current animation state.
@ Forward
Animation is playing forward.
@ Reverse
Animation is playing in reverse.
@ Idle
Animation is paused.
bool temporalRangeCumulative() const
Returns the animation temporal range cumulative settings.
void next()
Advances to the next frame.
void setTemporalExtents(const QgsDateTimeRange &extents)
Sets the navigation temporal extents, which dictate the earliest and latest date time possible in the...
void setTemporalRangeCumulative(bool state)
Sets the animation temporal range as cumulative.
void setLooping(bool loop)
Sets whether the animation should loop after hitting the end or start frame.
void playBackward()
Starts the animation playing in a reverse direction until the beginning of the time range.
void temporalExtentsChanged(const QgsDateTimeRange &extent)
Emitted whenever the temporalExtent extent changes.
void setNavigationMode(const NavigationMode mode)
Sets the temporal navigation mode.
AnimationState animationState() const
Returns the current animation state.
NavigationMode navigationMode() const
Returns the current temporal navigation mode.
bool isActive() const
Returns true if the temporal property is active.
static QgsDateTimeRange calculateTemporalRangeForProject(QgsProject *project)
Calculates the temporal range for a project.
static QList< QgsDateTimeRange > usedTemporalRangesForProject(QgsProject *project)
Calculates all temporal ranges which are in use for a project.
static Q_INVOKABLE QString toString(QgsUnitTypes::DistanceUnit unit)
Returns a translated string representing a distance unit.
static Q_INVOKABLE double fromUnitToUnitFactor(QgsUnitTypes::DistanceUnit fromUnit, QgsUnitTypes::DistanceUnit toUnit)
Returns the conversion factor between the specified distance units.
TemporalUnit
Temporal units.
@ TemporalUnknownUnit
Unknown time unit.
@ TemporalMilliseconds
Milliseconds.
@ TemporalIrregularStep
Special "irregular step" time unit, used for temporal data which uses irregular, non-real-world unit ...
@ TemporalDecades
Decades.
@ TemporalCenturies
Centuries.
@ TemporalSeconds
Seconds.
@ TemporalMinutes
Minutes.
QgsSignalBlocker< Object > whileBlocking(Object *object)
Temporarily blocks signals from a QObject while calling a single method from the object.