diff --git a/src/modules/welcome/CMakeLists.txt b/src/modules/welcome/CMakeLists.txt index 3298ba716..9700b1601 100644 --- a/src/modules/welcome/CMakeLists.txt +++ b/src/modules/welcome/CMakeLists.txt @@ -12,8 +12,6 @@ else() add_definitions( -DWITHOUT_LIBPARTED ) endif() -include_directories( ${PROJECT_BINARY_DIR}/src/libcalamaresui ) - set( CHECKER_SOURCES checker/CheckerContainer.cpp checker/GeneralRequirements.cpp diff --git a/src/modules/welcome/Config.cpp b/src/modules/welcome/Config.cpp index 1df4e1cab..2fa0ce156 100644 --- a/src/modules/welcome/Config.cpp +++ b/src/modules/welcome/Config.cpp @@ -27,9 +27,10 @@ void RequirementsModel::setRequirementsList( const Calamares::RequirementsList& requirements ) { + CALAMARES_RETRANSLATE_SLOT( &RequirementsModel::retranslate ) + emit beginResetModel(); m_requierements = requirements; - m_satisfiedRequirements = true; auto isUnSatisfied = []( const Calamares::RequirementEntry& e ) { return !e.satisfied; }; auto isMandatoryAndUnSatisfied = []( const Calamares::RequirementEntry& e ) { return e.mandatory && !e.satisfied; }; @@ -115,7 +116,7 @@ Config::retranslate() m_genericWelcomeMessage = message.arg( *Calamares::Branding::VersionedName ); emit genericWelcomeMessageChanged(); -// ui->supportButton->setText( tr( "%1 support" ).arg( *Calamares::Branding::ShortProductName ) ); + m_requirementsModel->retranslate(); } CalamaresUtils::Locale::LabelModel* @@ -231,6 +232,7 @@ QString Config::donateUrl() const void Config::setDonateUrl(const QString& url) { m_donateUrl = url; + emit donateUrlChanged(); } QString Config::knownIssuesUrl() const @@ -241,11 +243,13 @@ QString Config::knownIssuesUrl() const void Config::setKnownIssuesUrl(const QString& url) { m_knownIssuesUrl = url; + emit knownIssuesUrlChanged(); } void Config::setReleaseNotesUrl(const QString& url) { m_releaseNotesUrl = url; + emit releaseNotesUrlChanged(); } QString Config::releaseNotesUrl() const @@ -261,13 +265,46 @@ QString Config::supportUrl() const void Config::setSupportUrl(const QString& url) { m_supportUrl = url; + emit supportUrlChanged(); } +void RequirementsModel::retranslate() +{ + if ( !m_satisfiedRequirements ) + { + QString message; + const bool setup = Calamares::Settings::instance()->isSetupMode(); + if ( !m_satisfiedMandatory ) + { + message = setup ? tr( "This computer does not satisfy the minimum " + "requirements for setting up %1.
" + "Setup cannot continue. " + "Details..." ) + : tr( "This computer does not satisfy the minimum " + "requirements for installing %1.
" + "Installation cannot continue. " + "Details..." ); + }else + { + message = setup ? tr( "This computer does not satisfy some of the " + "recommended requirements for setting up %1.
" + "Setup can continue, but some features " + "might be disabled." ) + : tr( "This computer does not satisfy some of the " + "recommended requirements for installing %1.
" + "Installation can continue, but some features " + "might be disabled." ); + } + m_warningMessage = message.arg( *Calamares::Branding::ShortVersionedName ); + }else + { + m_warningMessage = tr( "This program will ask you some questions and " + "set up %2 on your computer." ) + .arg( *Calamares::Branding::ProductName ); + } - - - - + emit warningMessageChanged(); +} diff --git a/src/modules/welcome/Config.h b/src/modules/welcome/Config.h index 71f2120f9..2c7674ecd 100644 --- a/src/modules/welcome/Config.h +++ b/src/modules/welcome/Config.h @@ -32,6 +32,7 @@ class RequirementsModel : public QAbstractListModel Q_PROPERTY(bool satisfiedRequirements READ satisfiedRequirements NOTIFY satisfiedRequirementsChanged FINAL) Q_PROPERTY(bool satisfiedMandatory READ satisfiedMandatory NOTIFY satisfiedMandatoryChanged FINAL) + Q_PROPERTY( QString warningMessage READ warningMessage NOTIFY warningMessageChanged FINAL ) public: enum Roles : short @@ -71,6 +72,13 @@ public: return m_requierements.count(); } + QString warningMessage() const + { + return m_warningMessage; + } + + void retranslate(); + QVariant data(const QModelIndex& index, int role) const override; protected: @@ -81,9 +89,12 @@ private: bool m_satisfiedRequirements = false; bool m_satisfiedMandatory = false; + QString m_warningMessage; + signals: void satisfiedRequirementsChanged(bool value); void satisfiedMandatoryChanged(); + void warningMessageChanged(); }; @@ -101,10 +112,12 @@ class Config : public QObject Q_PROPERTY( QString genericWelcomeMessage MEMBER m_genericWelcomeMessage NOTIFY genericWelcomeMessageChanged FINAL ) Q_PROPERTY( QString warningMessage MEMBER m_warningMessage CONSTANT FINAL ) - Q_PROPERTY(QString supportUrl MEMBER m_supportUrl CONSTANT FINAL) - Q_PROPERTY(QString knownIssuesUrl MEMBER m_knownIssuesUrl CONSTANT FINAL) - Q_PROPERTY(QString releaseNotesUrl MEMBER m_releaseNotesUrl CONSTANT FINAL) - Q_PROPERTY(QString donateUrl MEMBER m_donateUrl CONSTANT FINAL) + Q_PROPERTY( QString supportUrl MEMBER m_supportUrl NOTIFY supportUrlChanged FINAL ) + Q_PROPERTY( QString knownIssuesUrl MEMBER m_knownIssuesUrl NOTIFY knownIssuesUrlChanged FINAL ) + Q_PROPERTY( QString releaseNotesUrl MEMBER m_releaseNotesUrl NOTIFY releaseNotesUrlChanged FINAL ) + Q_PROPERTY (QString donateUrl MEMBER m_donateUrl NOTIFY donateUrlChanged FINAL ) + + Q_PROPERTY( bool isNextEnabled MEMBER m_isNextEnabled NOTIFY isNextEnabledChanged FINAL ) public: Config( QObject* parent = nullptr ); @@ -144,9 +157,7 @@ private: bool m_isNextEnabled = false; CalamaresUtils::Locale::LabelModel* m_languages; - QString m_genericWelcomeMessage = tr("This program will ask you some questions and set up your installation"); - - QString m_warningMessage = tr("This program does not satisfy the minimum requirements for installing.\nInstallation can not continue"); + QString m_genericWelcomeMessage; QString m_supportUrl; QString m_knownIssuesUrl; @@ -158,6 +169,11 @@ signals: void localeIndexChanged( int localeIndex ); void isNextEnabledChanged( bool isNextEnabled ); void genericWelcomeMessageChanged(); + void supportUrlChanged(); + void knownIssuesUrlChanged(); + void releaseNotesUrlChanged(); + void donateUrlChanged(); + }; #endif diff --git a/src/modules/welcomeq/WelcomeQmlViewStep.cpp b/src/modules/welcomeq/WelcomeQmlViewStep.cpp index ef49dea32..0961ce67f 100644 --- a/src/modules/welcomeq/WelcomeQmlViewStep.cpp +++ b/src/modules/welcomeq/WelcomeQmlViewStep.cpp @@ -41,7 +41,7 @@ CALAMARES_PLUGIN_FACTORY_DEFINITION( WelcomeQmlViewStepFactory, registerPlugin< WelcomeQmlViewStep::WelcomeQmlViewStep( QObject* parent ) : Calamares::QmlViewStep(parent ) - , m_config( new Config( ) ) // the qml singleton takes ownership and deletes it + , m_config( new Config( this ) ) // the qml singleton takes ownership and deletes it // , m_nextEnabled( false ) , m_requirementsChecker( new GeneralRequirements( this ) ) @@ -98,10 +98,46 @@ WelcomeQmlViewStep::jobs() const return Calamares::JobList(); } +/** @brief Look up a URL for a button + * + * Looks up @p key in @p map; if it is a *boolean* value, then + * assume an old-style configuration, and fetch the string from + * the branding settings @p e. If it is a string, not a boolean, + * use it as-is. If not found, or a weird type, returns empty. + * + * This allows switching the showKnownIssuesUrl and similar settings + * in welcome.conf from a boolean (deferring to branding) to an + * actual string for immediate use. Empty strings, as well as + * "false" as a setting, will hide the buttons as before. + */ +static QString +jobOrBrandingSetting( Calamares::Branding::StringEntry e, const QVariantMap& map, const QString& key ) +{ + if ( !map.contains( key ) ) + { + return QString(); + } + auto v = map.value( key ); + if ( v.type() == QVariant::Bool ) + { + return v.toBool() ? ( *e ) : QString(); + } + if ( v.type() == QVariant::String ) + { + return v.toString(); + } + + return QString(); +} + void WelcomeQmlViewStep::setConfigurationMap( const QVariantMap& configurationMap ) { using Calamares::Branding; + m_config->setSupportUrl( jobOrBrandingSetting( Branding::SupportUrl, configurationMap, "showSupportUrl" ) ); + m_config->setKnownIssuesUrl( jobOrBrandingSetting( Branding::KnownIssuesUrl, configurationMap, "showKnownIssuesUrl" ) ); + m_config->setReleaseNotesUrl( jobOrBrandingSetting( Branding::ReleaseNotesUrl, configurationMap, "showReleaseNotesUrl" ) ); + m_config->setDonateUrl( CalamaresUtils::getString( configurationMap, "showDonateUrl" ) ); // TODO: expand Config class and set the remaining fields // with the configurationMap all those properties can be accesed withouth having to declare a property, get and setter for each