[finished] More (display) modes for restarting
- Use a named enum instead of a collection of booleans - Support old-style configuration but complain about it - Update AppImage config as well The new setup allows four different restart modes: never, always, user-unchecked and user-checked. The user-modes are interactive and give the user a choice (defaulting to unchecked-don't-restart and checked-do-restart respectively). The non-interactive versions vary in how they are displayed.
This commit is contained in:
parent
e281a74552
commit
f3c86810a1
@ -1,14 +1,24 @@
|
||||
# Configuration for the "finished" page, which is usually shown only at
|
||||
# the end of the installation (successful or not).
|
||||
---
|
||||
# The finished page can hold a "restart system now" checkbox.
|
||||
# If this is false, no checkbox is shown and the system is not restarted
|
||||
# when Calamares exits.
|
||||
restartNowEnabled: true
|
||||
|
||||
# Initial state of the checkbox "restart now". Only relevant when the
|
||||
# checkbox is shown by restartNowEnabled.
|
||||
restartNowChecked: false
|
||||
# Behavior of the "restart system now" button.
|
||||
#
|
||||
# There are four usable values:
|
||||
# - never
|
||||
# Does not show the button and does not restart.
|
||||
# This matches the old behavior with restartNowEnabled=false.
|
||||
# - user-unchecked
|
||||
# Shows the button, defaults to unchecked, restarts if it is checked.
|
||||
# This matches the old behavior with restartNowEnabled=true and restartNowChecked=false.
|
||||
# - user-checked
|
||||
# Shows the button, defaults to checked, restarts if it is checked.
|
||||
# This matches the old behavior with restartNowEnabled=true and restartNowChecked=true.
|
||||
# - always
|
||||
# Shows the button, checked, but the user cannot change it.
|
||||
# This is new behavior.
|
||||
#
|
||||
# The three combinations of legacy values are still supported.
|
||||
restartNowMode: user-unchecked
|
||||
|
||||
# If the checkbox is shown, and the checkbox is checked, then when
|
||||
# Calamares exits from the finished-page it will run this command.
|
||||
|
@ -79,16 +79,13 @@ FinishedPage::FinishedPage( QWidget* parent )
|
||||
|
||||
|
||||
void
|
||||
FinishedPage::setRestartNowEnabled( bool enabled )
|
||||
FinishedPage::setRestart( FinishedViewStep::RestartMode mode )
|
||||
{
|
||||
ui->restartCheckBox->setVisible( enabled );
|
||||
}
|
||||
using Mode = FinishedViewStep::RestartMode;
|
||||
|
||||
|
||||
void
|
||||
FinishedPage::setRestartNowChecked( bool checked )
|
||||
{
|
||||
ui->restartCheckBox->setChecked( checked );
|
||||
ui->restartCheckBox->setVisible( mode != Mode::Never );
|
||||
ui->restartCheckBox->setEnabled( mode != Mode::Always );
|
||||
ui->restartCheckBox->setChecked( ( mode == Mode::Always ) || ( mode == Mode::UserChecked ) );
|
||||
}
|
||||
|
||||
|
||||
@ -138,5 +135,5 @@ FinishedPage::onInstallationFailed( const QString& message, const QString& detai
|
||||
"The error message was: %2." )
|
||||
.arg( *Calamares::Branding::VersionedName )
|
||||
.arg( message ) );
|
||||
setRestartNowEnabled( false );
|
||||
setRestart( FinishedViewStep::RestartMode::Never );
|
||||
}
|
||||
|
@ -22,6 +22,8 @@
|
||||
|
||||
#include <QWidget>
|
||||
|
||||
#include "FinishedViewStep.h"
|
||||
|
||||
namespace Ui
|
||||
{
|
||||
class FinishedPage;
|
||||
@ -33,8 +35,7 @@ class FinishedPage : public QWidget
|
||||
public:
|
||||
explicit FinishedPage( QWidget* parent = nullptr );
|
||||
|
||||
void setRestartNowEnabled( bool enabled );
|
||||
void setRestartNowChecked( bool checked );
|
||||
void setRestart( FinishedViewStep::RestartMode mode );
|
||||
void setRestartNowCommand( const QString& command );
|
||||
|
||||
void setUpRestart();
|
||||
|
@ -20,9 +20,13 @@
|
||||
|
||||
#include "FinishedViewStep.h"
|
||||
#include "FinishedPage.h"
|
||||
|
||||
#include "Branding.h"
|
||||
#include "JobQueue.h"
|
||||
#include "Settings.h"
|
||||
|
||||
#include "utils/Logger.h"
|
||||
#include "utils/NamedEnum.h"
|
||||
#include "utils/Variant.h"
|
||||
|
||||
#include <QtDBus/QDBusConnection>
|
||||
@ -30,8 +34,20 @@
|
||||
#include <QtDBus/QDBusReply>
|
||||
#include <QVariantMap>
|
||||
|
||||
#include "Branding.h"
|
||||
#include "Settings.h"
|
||||
static const NamedEnumTable< FinishedViewStep::RestartMode >&
|
||||
modeNames()
|
||||
{
|
||||
using Mode = FinishedViewStep::RestartMode;
|
||||
|
||||
static const NamedEnumTable< Mode > names{
|
||||
{ QStringLiteral( "never" ), Mode::Never },
|
||||
{ QStringLiteral( "user-unchecked" ), Mode::UserUnchecked },
|
||||
{ QStringLiteral( "user-checked" ), Mode::UserChecked },
|
||||
{ QStringLiteral( "always" ), Mode::Always }
|
||||
} ;
|
||||
|
||||
return names;
|
||||
}
|
||||
|
||||
FinishedViewStep::FinishedViewStep( QObject* parent )
|
||||
: Calamares::ViewStep( parent )
|
||||
@ -157,13 +173,26 @@ FinishedViewStep::onInstallationFailed( const QString& message, const QString& d
|
||||
void
|
||||
FinishedViewStep::setConfigurationMap( const QVariantMap& configurationMap )
|
||||
{
|
||||
bool restartNowEnabled = CalamaresUtils::getBool( configurationMap, "restartNowEnabled", false );
|
||||
m_widget->setRestartNowEnabled( restartNowEnabled );
|
||||
RestartMode mode = RestartMode::Never;
|
||||
|
||||
bool restartNowChecked = restartNowEnabled && CalamaresUtils::getBool( configurationMap, "restartNowChecked", false );
|
||||
m_widget->setRestartNowChecked( restartNowChecked );
|
||||
QString restartMode = CalamaresUtils::getString( configurationMap, "restartNowMode" );
|
||||
if ( restartMode.isEmpty() )
|
||||
{
|
||||
if ( configurationMap.contains( "restartNowEnabled" ) )
|
||||
cWarning() << "Configuring the finished module with deprecated restartNowEnabled settings";
|
||||
|
||||
if ( restartNowEnabled )
|
||||
bool restartNowEnabled = CalamaresUtils::getBool( configurationMap, "restartNowEnabled", false );
|
||||
bool restartNowChecked = CalamaresUtils::getBool( configurationMap, "restartNowChecked", false );
|
||||
|
||||
if ( !restartNowEnabled )
|
||||
mode = RestartMode::Never;
|
||||
else
|
||||
mode = restartNowChecked ? RestartMode::UserChecked : RestartMode::UserUnchecked;
|
||||
}
|
||||
|
||||
m_widget->setRestart( mode );
|
||||
|
||||
if ( mode != RestartMode::Never )
|
||||
{
|
||||
QString restartNowCommand = CalamaresUtils::getString( configurationMap, "restartNowCommand" );
|
||||
if ( restartNowCommand.isEmpty() )
|
||||
|
@ -34,6 +34,14 @@ class PLUGINDLLEXPORT FinishedViewStep : public Calamares::ViewStep
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
enum class RestartMode
|
||||
{
|
||||
Never=0, ///< @brief Don't show button, just exit
|
||||
UserUnchecked, ///< @brief Show button, starts unchecked
|
||||
UserChecked, ///< @brief Show button, starts checked
|
||||
Always ///< @brief Show button, can't change, checked
|
||||
};
|
||||
|
||||
explicit FinishedViewStep( QObject* parent = nullptr );
|
||||
virtual ~FinishedViewStep() override;
|
||||
|
||||
|
@ -1,14 +1,37 @@
|
||||
# Configuration for the "finished" page, which is usually shown only at
|
||||
# the end of the installation (successful or not).
|
||||
---
|
||||
# DEPRECATED
|
||||
#
|
||||
# The finished page can hold a "restart system now" checkbox.
|
||||
# If this is false, no checkbox is shown and the system is not restarted
|
||||
# when Calamares exits.
|
||||
restartNowEnabled: true
|
||||
# restartNowEnabled: true
|
||||
|
||||
# DEPRECATED
|
||||
#
|
||||
# Initial state of the checkbox "restart now". Only relevant when the
|
||||
# checkbox is shown by restartNowEnabled.
|
||||
restartNowChecked: false
|
||||
# restartNowChecked: false
|
||||
|
||||
# Behavior of the "restart system now" button.
|
||||
#
|
||||
# There are four usable values:
|
||||
# - never
|
||||
# Does not show the button and does not restart.
|
||||
# This matches the old behavior with restartNowEnabled=false.
|
||||
# - user-unchecked
|
||||
# Shows the button, defaults to unchecked, restarts if it is checked.
|
||||
# This matches the old behavior with restartNowEnabled=true and restartNowChecked=false.
|
||||
# - user-checked
|
||||
# Shows the button, defaults to checked, restarts if it is checked.
|
||||
# This matches the old behavior with restartNowEnabled=true and restartNowChecked=true.
|
||||
# - always
|
||||
# Shows the button, checked, but the user cannot change it.
|
||||
# This is new behavior.
|
||||
#
|
||||
# The three combinations of legacy values are still supported.
|
||||
restartNowMode: user-unchecked
|
||||
|
||||
# If the checkbox is shown, and the checkbox is checked, then when
|
||||
# Calamares exits from the finished-page it will run this command.
|
||||
|
Loading…
Reference in New Issue
Block a user