|
@@ -59,7 +59,7 @@ QgsTemporalControllerWidget::QgsTemporalControllerWidget( QWidget *parent ) |
|
|
return; |
|
|
|
|
|
mBlockFrameDurationUpdates++; |
|
|
setTimeStep( timeStep ); |
|
|
updateTimeStepInputs( timeStep ); |
|
|
mBlockFrameDurationUpdates--; |
|
|
} ); |
|
|
connect( mNavigationOff, &QPushButton::clicked, this, &QgsTemporalControllerWidget::mNavigationOff_clicked ); |
|
@@ -534,6 +534,53 @@ void QgsTemporalControllerWidget::mRangeSetToAllLayersAction_triggered() |
|
|
} |
|
|
|
|
|
void QgsTemporalControllerWidget::setTimeStep( const QgsInterval &timeStep ) |
|
|
{ |
|
|
if ( ! timeStep.isValid() || timeStep.seconds() <= 0 ) |
|
|
return; |
|
|
|
|
|
// Search the time unit the most appropriate : |
|
|
// the one that gives the smallest time step value for double spin box with round value (if possible) and/or the less signifiant digits |
|
|
|
|
|
int selectedUnit = -1; |
|
|
int stringSize = std::numeric_limits<int>::max(); |
|
|
int precision = mStepSpinBox->decimals(); |
|
|
double selectedValue = std::numeric_limits<double>::max(); |
|
|
for ( int i = 0; i < mTimeStepsComboBox->count(); ++i ) |
|
|
{ |
|
|
QgsUnitTypes::TemporalUnit unit = static_cast<QgsUnitTypes::TemporalUnit>( mTimeStepsComboBox->itemData( i ).toInt() ); |
|
|
double value = timeStep.seconds() * QgsUnitTypes::fromUnitToUnitFactor( QgsUnitTypes::TemporalSeconds, unit ); |
|
|
QString string = QString::number( value, 'f', precision ); |
|
|
string.remove( QRegExp( "0+$" ) ); //remove trailing zero |
|
|
string.remove( QRegExp( "[.]+$" ) ); //remove last point if present |
|
|
|
|
|
if ( value >= 1 |
|
|
&& string.size() <= stringSize // less significant digit than currently selected |
|
|
&& value < selectedValue ) // less than currently selected |
|
|
{ |
|
|
selectedUnit = i; |
|
|
selectedValue = value; |
|
|
stringSize = string.size(); |
|
|
} |
|
|
else if ( string != '0' |
|
|
&& string.size() < precision + 2 //round value (ex: 0.xx with precision=3) |
|
|
&& string.size() < stringSize ) //less significant digit than currently selected |
|
|
{ |
|
|
selectedUnit = i ; |
|
|
selectedValue = value ; |
|
|
stringSize = string.size(); |
|
|
} |
|
|
} |
|
|
|
|
|
if ( selectedUnit >= 0 ) |
|
|
{ |
|
|
mStepSpinBox->setValue( selectedValue ); |
|
|
mTimeStepsComboBox->setCurrentIndex( selectedUnit ); |
|
|
} |
|
|
|
|
|
updateFrameDuration(); |
|
|
} |
|
|
|
|
|
void QgsTemporalControllerWidget::updateTimeStepInputs( const QgsInterval &timeStep ) |
|
|
{ |
|
|
if ( ! timeStep.isValid() || timeStep.seconds() <= 0 ) |
|
|
return; |
|
|