[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
|
# Configuration for the "finished" page, which is usually shown only at
|
||||||
# the end of the installation (successful or not).
|
# the end of the installation (successful or not).
|
||||||
---
|
---
|
||||||
# The finished page can hold a "restart system now" checkbox.
|
# Behavior of the "restart system now" button.
|
||||||
# If this is false, no checkbox is shown and the system is not restarted
|
#
|
||||||
# when Calamares exits.
|
# There are four usable values:
|
||||||
restartNowEnabled: true
|
# - never
|
||||||
|
# Does not show the button and does not restart.
|
||||||
# Initial state of the checkbox "restart now". Only relevant when the
|
# This matches the old behavior with restartNowEnabled=false.
|
||||||
# checkbox is shown by restartNowEnabled.
|
# - user-unchecked
|
||||||
restartNowChecked: false
|
# 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
|
# If the checkbox is shown, and the checkbox is checked, then when
|
||||||
# Calamares exits from the finished-page it will run this command.
|
# Calamares exits from the finished-page it will run this command.
|
||||||
|
@ -79,16 +79,13 @@ FinishedPage::FinishedPage( QWidget* parent )
|
|||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
FinishedPage::setRestartNowEnabled( bool enabled )
|
FinishedPage::setRestart( FinishedViewStep::RestartMode mode )
|
||||||
{
|
{
|
||||||
ui->restartCheckBox->setVisible( enabled );
|
using Mode = FinishedViewStep::RestartMode;
|
||||||
}
|
|
||||||
|
|
||||||
|
ui->restartCheckBox->setVisible( mode != Mode::Never );
|
||||||
void
|
ui->restartCheckBox->setEnabled( mode != Mode::Always );
|
||||||
FinishedPage::setRestartNowChecked( bool checked )
|
ui->restartCheckBox->setChecked( ( mode == Mode::Always ) || ( mode == Mode::UserChecked ) );
|
||||||
{
|
|
||||||
ui->restartCheckBox->setChecked( checked );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -138,5 +135,5 @@ FinishedPage::onInstallationFailed( const QString& message, const QString& detai
|
|||||||
"The error message was: %2." )
|
"The error message was: %2." )
|
||||||
.arg( *Calamares::Branding::VersionedName )
|
.arg( *Calamares::Branding::VersionedName )
|
||||||
.arg( message ) );
|
.arg( message ) );
|
||||||
setRestartNowEnabled( false );
|
setRestart( FinishedViewStep::RestartMode::Never );
|
||||||
}
|
}
|
||||||
|
@ -22,6 +22,8 @@
|
|||||||
|
|
||||||
#include <QWidget>
|
#include <QWidget>
|
||||||
|
|
||||||
|
#include "FinishedViewStep.h"
|
||||||
|
|
||||||
namespace Ui
|
namespace Ui
|
||||||
{
|
{
|
||||||
class FinishedPage;
|
class FinishedPage;
|
||||||
@ -33,8 +35,7 @@ class FinishedPage : public QWidget
|
|||||||
public:
|
public:
|
||||||
explicit FinishedPage( QWidget* parent = nullptr );
|
explicit FinishedPage( QWidget* parent = nullptr );
|
||||||
|
|
||||||
void setRestartNowEnabled( bool enabled );
|
void setRestart( FinishedViewStep::RestartMode mode );
|
||||||
void setRestartNowChecked( bool checked );
|
|
||||||
void setRestartNowCommand( const QString& command );
|
void setRestartNowCommand( const QString& command );
|
||||||
|
|
||||||
void setUpRestart();
|
void setUpRestart();
|
||||||
|
@ -20,9 +20,13 @@
|
|||||||
|
|
||||||
#include "FinishedViewStep.h"
|
#include "FinishedViewStep.h"
|
||||||
#include "FinishedPage.h"
|
#include "FinishedPage.h"
|
||||||
|
|
||||||
|
#include "Branding.h"
|
||||||
#include "JobQueue.h"
|
#include "JobQueue.h"
|
||||||
|
#include "Settings.h"
|
||||||
|
|
||||||
#include "utils/Logger.h"
|
#include "utils/Logger.h"
|
||||||
|
#include "utils/NamedEnum.h"
|
||||||
#include "utils/Variant.h"
|
#include "utils/Variant.h"
|
||||||
|
|
||||||
#include <QtDBus/QDBusConnection>
|
#include <QtDBus/QDBusConnection>
|
||||||
@ -30,8 +34,20 @@
|
|||||||
#include <QtDBus/QDBusReply>
|
#include <QtDBus/QDBusReply>
|
||||||
#include <QVariantMap>
|
#include <QVariantMap>
|
||||||
|
|
||||||
#include "Branding.h"
|
static const NamedEnumTable< FinishedViewStep::RestartMode >&
|
||||||
#include "Settings.h"
|
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 )
|
FinishedViewStep::FinishedViewStep( QObject* parent )
|
||||||
: Calamares::ViewStep( parent )
|
: Calamares::ViewStep( parent )
|
||||||
@ -157,13 +173,26 @@ FinishedViewStep::onInstallationFailed( const QString& message, const QString& d
|
|||||||
void
|
void
|
||||||
FinishedViewStep::setConfigurationMap( const QVariantMap& configurationMap )
|
FinishedViewStep::setConfigurationMap( const QVariantMap& configurationMap )
|
||||||
{
|
{
|
||||||
bool restartNowEnabled = CalamaresUtils::getBool( configurationMap, "restartNowEnabled", false );
|
RestartMode mode = RestartMode::Never;
|
||||||
m_widget->setRestartNowEnabled( restartNowEnabled );
|
|
||||||
|
|
||||||
bool restartNowChecked = restartNowEnabled && CalamaresUtils::getBool( configurationMap, "restartNowChecked", false );
|
QString restartMode = CalamaresUtils::getString( configurationMap, "restartNowMode" );
|
||||||
m_widget->setRestartNowChecked( restartNowChecked );
|
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" );
|
QString restartNowCommand = CalamaresUtils::getString( configurationMap, "restartNowCommand" );
|
||||||
if ( restartNowCommand.isEmpty() )
|
if ( restartNowCommand.isEmpty() )
|
||||||
|
@ -34,6 +34,14 @@ class PLUGINDLLEXPORT FinishedViewStep : public Calamares::ViewStep
|
|||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
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 );
|
explicit FinishedViewStep( QObject* parent = nullptr );
|
||||||
virtual ~FinishedViewStep() override;
|
virtual ~FinishedViewStep() override;
|
||||||
|
|
||||||
|
@ -1,14 +1,37 @@
|
|||||||
# Configuration for the "finished" page, which is usually shown only at
|
# Configuration for the "finished" page, which is usually shown only at
|
||||||
# the end of the installation (successful or not).
|
# the end of the installation (successful or not).
|
||||||
---
|
---
|
||||||
|
# DEPRECATED
|
||||||
|
#
|
||||||
# The finished page can hold a "restart system now" checkbox.
|
# The finished page can hold a "restart system now" checkbox.
|
||||||
# If this is false, no checkbox is shown and the system is not restarted
|
# If this is false, no checkbox is shown and the system is not restarted
|
||||||
# when Calamares exits.
|
# when Calamares exits.
|
||||||
restartNowEnabled: true
|
# restartNowEnabled: true
|
||||||
|
|
||||||
|
# DEPRECATED
|
||||||
|
#
|
||||||
# Initial state of the checkbox "restart now". Only relevant when the
|
# Initial state of the checkbox "restart now". Only relevant when the
|
||||||
# checkbox is shown by restartNowEnabled.
|
# 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
|
# If the checkbox is shown, and the checkbox is checked, then when
|
||||||
# Calamares exits from the finished-page it will run this command.
|
# Calamares exits from the finished-page it will run this command.
|
||||||
|
Loading…
Reference in New Issue
Block a user