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..fdc532d7f 100644 --- a/src/modules/welcome/Config.cpp +++ b/src/modules/welcome/Config.cpp @@ -27,15 +27,16 @@ void RequirementsModel::setRequirementsList( const Calamares::RequirementsList& requirements ) { + CALAMARES_RETRANSLATE_SLOT( &RequirementsModel::retranslate ) + emit beginResetModel(); - m_requierements = requirements; - m_satisfiedRequirements = true; + m_requirements = requirements; auto isUnSatisfied = []( const Calamares::RequirementEntry& e ) { return !e.satisfied; }; auto isMandatoryAndUnSatisfied = []( const Calamares::RequirementEntry& e ) { return e.mandatory && !e.satisfied; }; - m_satisfiedRequirements = std::none_of( m_requierements.begin(), m_requierements.end(), isUnSatisfied ); - m_satisfiedMandatory = std::none_of( m_requierements.begin(), m_requierements.end(), isMandatoryAndUnSatisfied ); + m_satisfiedRequirements = std::none_of( m_requirements.begin(), m_requirements.end(), isUnSatisfied ); + m_satisfiedMandatory = std::none_of( m_requirements.begin(), m_requirements.end(), isMandatoryAndUnSatisfied ); emit satisfiedRequirementsChanged(m_satisfiedRequirements); emit satisfiedMandatoryChanged(); @@ -45,13 +46,13 @@ RequirementsModel::setRequirementsList( const Calamares::RequirementsList& requi int RequirementsModel::rowCount( const QModelIndex& ) const { - return m_requierements.count(); + return m_requirements.count(); } QVariant RequirementsModel::data( const QModelIndex& index, int role ) const { - const auto requirement = m_requierements.at( index.row() ); + const auto requirement = m_requirements.at( index.row() ); switch ( role ) { @@ -91,31 +92,15 @@ Config::Config( QObject* parent ) : QObject( parent ) initLanguages(); CALAMARES_RETRANSLATE_SLOT( &Config::retranslate ) - } void Config::retranslate() { - QString message; - - if ( Calamares::Settings::instance()->isSetupMode() ) - { - message = Calamares::Branding::instance()->welcomeStyleCalamares() - ? tr( "

Welcome to the Calamares setup program for %1.

" ) - : tr( "

Welcome to %1 setup.

" ); - } - else - { - message = Calamares::Branding::instance()->welcomeStyleCalamares() - ? tr( "

Welcome to the Calamares installer for %1.

" ) - : tr( "

Welcome to the %1 installer.

" ); - } - - m_genericWelcomeMessage = message.arg( *Calamares::Branding::VersionedName ); + m_genericWelcomeMessage = genericWelcomeMessage().arg( *Calamares::Branding::VersionedName ); emit genericWelcomeMessageChanged(); -// ui->supportButton->setText( tr( "%1 support" ).arg( *Calamares::Branding::ShortProductName ) ); + m_requirementsModel->retranslate(); } CalamaresUtils::Locale::LabelModel* @@ -223,51 +208,118 @@ Config::setIsNextEnabled( const bool& isNextEnabled ) emit isNextEnabledChanged( m_isNextEnabled ); } -QString Config::donateUrl() const +QString +Config::donateUrl() const { return m_donateUrl; } -void Config::setDonateUrl(const QString& url) +void +Config::setDonateUrl(const QString& url) { m_donateUrl = url; + emit donateUrlChanged(); } -QString Config::knownIssuesUrl() const +QString +Config::knownIssuesUrl() const { return m_knownIssuesUrl; } -void Config::setKnownIssuesUrl(const QString& url) +void +Config::setKnownIssuesUrl(const QString& url) { m_knownIssuesUrl = url; + emit knownIssuesUrlChanged(); } -void Config::setReleaseNotesUrl(const QString& url) +void +Config::setReleaseNotesUrl(const QString& url) { m_releaseNotesUrl = url; + emit releaseNotesUrlChanged(); } -QString Config::releaseNotesUrl() const +QString +Config::releaseNotesUrl() const { return m_releaseNotesUrl; } -QString Config::supportUrl() const +QString +Config::supportUrl() const { return m_supportUrl; } -void Config::setSupportUrl(const QString& url) +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(); +} +QString +Config::genericWelcomeMessage() +{ + QString message; + if ( Calamares::Settings::instance()->isSetupMode() ) + { + message = Calamares::Branding::instance()->welcomeStyleCalamares() + ? tr( "

Welcome to the Calamares setup program for %1.

" ) + : tr( "

Welcome to %1 setup.

" ); + } + else + { + message = Calamares::Branding::instance()->welcomeStyleCalamares() + ? tr( "

Welcome to the Calamares installer for %1.

" ) + : tr( "

Welcome to the %1 installer.

" ); + } + return message; +} diff --git a/src/modules/welcome/Config.h b/src/modules/welcome/Config.h index 71f2120f9..a6de4c5dd 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 @@ -60,7 +61,7 @@ public: if(index > count() || index < 0) return *(new Calamares::RequirementEntry()); - return m_requierements.at(index); + return m_requirements.at(index); } @@ -68,22 +69,32 @@ public: int rowCount(const QModelIndex&) const override; int count() const { - return m_requierements.count(); + return m_requirements.count(); } + QString warningMessage() const + { + return m_warningMessage; + } + + void retranslate(); + QVariant data(const QModelIndex& index, int role) const override; protected: QHash roleNames() const override; private: - Calamares::RequirementsList m_requierements; + Calamares::RequirementsList m_requirements; bool m_satisfiedRequirements = false; bool m_satisfiedMandatory = false; + QString m_warningMessage; + signals: void satisfiedRequirementsChanged(bool value); void satisfiedMandatoryChanged(); + void warningMessageChanged(); }; @@ -99,12 +110,13 @@ class Config : public QObject Q_PROPERTY (int localeIndex READ localeIndex WRITE setLocaleIndex NOTIFY localeIndexChanged) 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 ); @@ -129,6 +141,9 @@ public: QString donateUrl() const; void setDonateUrl(const QString &url); + QString genericWelcomeMessage(); + + public slots: CalamaresUtils::Locale::LabelModel* languagesModel() const; void retranslate(); @@ -144,9 +159,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 +171,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