--- a/src/libcalamaresui/ViewManager.h +++ b/src/libcalamaresui/ViewManager.h @@ -146,6 +146,8 @@ * have any pages before the current one. */ void back(); + + void goBackTo( int index ); bool backEnabled() const { return m_backEnabled; ///< Is the back-button to be enabled --- a/src/libcalamaresui/ViewManager.cpp +++ b/src/libcalamaresui/ViewManager.cpp @@ -468,6 +468,37 @@ } void +ViewManager::goBackTo( int index ) +{ + if ( !currentStepValid() || index < 0 || index >= m_currentStep ) + { + return; + } + for ( int i = index; i <= m_currentStep; ++i ) + { + if ( stepIsExecute( m_steps, i ) ) + { + return; + } + } + + ViewStep* step = m_steps.at( m_currentStep ); + m_currentStep = index; + m_stack->setCurrentIndex( m_currentStep ); + step->onLeave(); + m_steps.at( m_currentStep )->onActivate(); + emit currentStepChanged(); + + UPDATE_NEXT_BUTTON_PROPERTY( m_steps.at( m_currentStep ), m_steps.at( m_currentStep )->isNextEnabled() ); + UPDATE_BUTTON_PROPERTY( backEnabled, + ( m_currentStep == 0 && m_steps.first()->isAtBeginning() ) + ? false + : m_steps.at( m_currentStep )->isBackEnabled() ); + + updateButtonLabels(); +} + +void ViewManager::back() { if ( !currentStepValid() )