diff --git a/src/modules/packagechooser/Config.cpp b/src/modules/packagechooser/Config.cpp index aa383d3c8..78c417908 100644 --- a/src/modules/packagechooser/Config.cpp +++ b/src/modules/packagechooser/Config.cpp @@ -15,11 +15,43 @@ #include "GlobalStorage.h" #include "JobQueue.h" +#include "packages/Globals.h" #include "utils/Logger.h" #include "utils/Variant.h" +const NamedEnumTable< PackageChooserMode >& +packageChooserModeNames() +{ + static const NamedEnumTable< PackageChooserMode > names { + { "optional", PackageChooserMode::Optional }, + { "required", PackageChooserMode::Required }, + { "optionalmultiple", PackageChooserMode::OptionalMultiple }, + { "requiredmultiple", PackageChooserMode::RequiredMultiple }, + // and a bunch of aliases + { "zero-or-one", PackageChooserMode::Optional }, + { "radio", PackageChooserMode::Required }, + { "one", PackageChooserMode::Required }, + { "set", PackageChooserMode::OptionalMultiple }, + { "zero-or-more", PackageChooserMode::OptionalMultiple }, + { "multiple", PackageChooserMode::RequiredMultiple }, + { "one-or-more", PackageChooserMode::RequiredMultiple } + }; + return names; +} -Config::Config( const QString& defaultId, QObject* parent ) +const NamedEnumTable< PackageChooserMethod >& +PackageChooserMethodNames() +{ + static const NamedEnumTable< PackageChooserMethod > names { + { "legacy", PackageChooserMethod::Legacy }, + { "custom", PackageChooserMethod::Legacy }, + { "contextualprocess", PackageChooserMethod::Legacy }, + { "packages", PackageChooserMethod::Packages }, + }; + return names; +} + +Config::Config( const Calamares::ModuleSystem::InstanceKey& defaultId, QObject* parent ) : Calamares::ModuleSystem::Config( parent ) , m_model( new PackageListModel( this ) ) , m_mode( PackageChooserMode::Required ) @@ -44,14 +76,14 @@ Config::introductionPackage() const static PackageItem* defaultIntroduction = nullptr; if ( !defaultIntroduction ) { - defaultIntroduction = new PackageItem( - QString(), - QT_TR_NOOP( "Package Selection" ), - QT_TR_NOOP( "Please pick a product from the list. The selected product will be installed." ) ); + const auto name = QT_TR_NOOP( "Package Selection" ); + const auto description + = QT_TR_NOOP( "Please pick a product from the list. The selected product will be installed." ); + defaultIntroduction = new PackageItem( QString(), name, description ); defaultIntroduction->screenshot = QPixmap( QStringLiteral( ":/images/no-selection.png" ) ); - // TODO: enable better translation - // defaultIntroduction->name.setContext( metaObject()->className() ); - // defaultIntroduction->description.setContext( metaObject()->className() ); + defaultIntroduction->name = CalamaresUtils::Locale::TranslatedString( name, metaObject()->className() ); + defaultIntroduction->description + = CalamaresUtils::Locale::TranslatedString( description, metaObject()->className() ); } return *defaultIntroduction; } @@ -60,10 +92,23 @@ void Config::updateGlobalStorage( const QStringList& selected ) const { QString key = QStringLiteral( "packagechooser_%1" ).arg( m_id ); - QString value = selected.join( ',' ); - Calamares::JobQueue::instance()->globalStorage()->insert( key, value ); - cDebug() << "PackageChooser" << key << "selected" << value; + if ( m_method == PackageChooserMethod::Legacy ) + { + QString value = selected.join( ',' ); + Calamares::JobQueue::instance()->globalStorage()->insert( key, value ); + + cDebug() << "PackageChooser" << key << "selected" << value; + } + else if ( m_method == PackageChooserMethod::Packages ) + { + CalamaresUtils::Packages::setGSPackageAdditions( + Calamares::JobQueue::instance()->globalStorage(), m_defaultId, selected ); + } + else + { + cWarning() << "Unknown packagechooser method" << smash( m_method ); + } } @@ -142,7 +187,7 @@ Config::setConfigurationMap( const QVariantMap& configurationMap ) m_id = CalamaresUtils::getString( configurationMap, "id" ); if ( m_id.isEmpty() ) { - m_id = m_defaultId; + m_id = m_defaultId.id(); } m_defaultModelIndex = QModelIndex(); diff --git a/src/modules/packagechooser/Config.h b/src/modules/packagechooser/Config.h index 6a65c8788..d07b4a010 100644 --- a/src/modules/packagechooser/Config.h +++ b/src/modules/packagechooser/Config.h @@ -13,15 +13,34 @@ #include "PackageModel.h" #include "modulesystem/Config.h" +#include "modulesystem/InstanceKey.h" #include +enum class PackageChooserMode +{ + Optional, // zero or one + Required, // exactly one + OptionalMultiple, // zero or more + RequiredMultiple // one or more +}; + +const NamedEnumTable< PackageChooserMode >& packageChooserModeNames(); + +enum class PackageChooserMethod +{ + Legacy, // use contextualprocess or other custom + Packages, // use the packages module +}; + +const NamedEnumTable< PackageChooserMethod >& PackageChooserMethodNames(); + class Config : public Calamares::ModuleSystem::Config { Q_OBJECT public: - Config( const QString& defaultId, QObject* parent = nullptr ); + Config( const Calamares::ModuleSystem::InstanceKey& defaultId, QObject* parent = nullptr ); ~Config() override; void setConfigurationMap( const QVariantMap& ) override; @@ -51,10 +70,14 @@ private: PackageListModel* m_model = nullptr; QModelIndex m_defaultModelIndex; - // Configuration + /// Selection mode for this module PackageChooserMode m_mode = PackageChooserMode::Optional; + /// How this module stores to GS + PackageChooserMethod m_method = PackageChooserMethod::Legacy; + /// Id (used to identify settings from this module in GS) QString m_id; - QString m_defaultId; + /// Value to use for id if none is set in the config file + Calamares::ModuleSystem::InstanceKey m_defaultId; }; diff --git a/src/modules/packagechooser/PackageChooserPage.h b/src/modules/packagechooser/PackageChooserPage.h index 4f485c890..90c2b28a6 100644 --- a/src/modules/packagechooser/PackageChooserPage.h +++ b/src/modules/packagechooser/PackageChooserPage.h @@ -10,6 +10,7 @@ #ifndef PACKAGECHOOSERPAGE_H #define PACKAGECHOOSERPAGE_H +#include "Config.h" #include "PackageModel.h" #include diff --git a/src/modules/packagechooser/PackageChooserViewStep.cpp b/src/modules/packagechooser/PackageChooserViewStep.cpp index 05d0d3cfd..a15fd0f55 100644 --- a/src/modules/packagechooser/PackageChooserViewStep.cpp +++ b/src/modules/packagechooser/PackageChooserViewStep.cpp @@ -37,7 +37,7 @@ CALAMARES_PLUGIN_FACTORY_DEFINITION( PackageChooserViewStepFactory, registerPlug PackageChooserViewStep::PackageChooserViewStep( QObject* parent ) : Calamares::ViewStep( parent ) - , m_config( new Config( moduleInstanceKey().id(), this ) ) + , m_config( new Config( moduleInstanceKey(), this ) ) , m_widget( nullptr ) , m_stepName( nullptr ) { diff --git a/src/modules/packagechooser/PackageModel.cpp b/src/modules/packagechooser/PackageModel.cpp index 55300f940..05a90f220 100644 --- a/src/modules/packagechooser/PackageModel.cpp +++ b/src/modules/packagechooser/PackageModel.cpp @@ -12,26 +12,6 @@ #include "utils/Logger.h" #include "utils/Variant.h" -const NamedEnumTable< PackageChooserMode >& -packageChooserModeNames() -{ - static const NamedEnumTable< PackageChooserMode > names { - { "optional", PackageChooserMode::Optional }, - { "required", PackageChooserMode::Required }, - { "optionalmultiple", PackageChooserMode::OptionalMultiple }, - { "requiredmultiple", PackageChooserMode::RequiredMultiple }, - // and a bunch of aliases - { "zero-or-one", PackageChooserMode::Optional }, - { "radio", PackageChooserMode::Required }, - { "one", PackageChooserMode::Required }, - { "set", PackageChooserMode::OptionalMultiple }, - { "zero-or-more", PackageChooserMode::OptionalMultiple }, - { "multiple", PackageChooserMode::RequiredMultiple }, - { "one-or-more", PackageChooserMode::RequiredMultiple } - }; - return names; -} - PackageItem::PackageItem() {} PackageItem::PackageItem( const QString& a_id, const QString& a_name, const QString& a_description ) diff --git a/src/modules/packagechooser/PackageModel.h b/src/modules/packagechooser/PackageModel.h index 0da0e4a53..b27c0ed3b 100644 --- a/src/modules/packagechooser/PackageModel.h +++ b/src/modules/packagechooser/PackageModel.h @@ -18,15 +18,6 @@ #include #include -enum class PackageChooserMode -{ - Optional, // zero or one - Required, // exactly one - OptionalMultiple, // zero or more - RequiredMultiple // one or more -}; - -const NamedEnumTable< PackageChooserMode >& packageChooserModeNames(); struct PackageItem {