[packagechooser] Add install-method to pick *packages* module

This commit is contained in:
Adriaan de Groot 2021-04-16 14:53:13 +02:00
parent ed14c49a03
commit 5e77d65424
6 changed files with 85 additions and 45 deletions

View File

@ -15,11 +15,43 @@
#include "GlobalStorage.h" #include "GlobalStorage.h"
#include "JobQueue.h" #include "JobQueue.h"
#include "packages/Globals.h"
#include "utils/Logger.h" #include "utils/Logger.h"
#include "utils/Variant.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 ) : Calamares::ModuleSystem::Config( parent )
, m_model( new PackageListModel( this ) ) , m_model( new PackageListModel( this ) )
, m_mode( PackageChooserMode::Required ) , m_mode( PackageChooserMode::Required )
@ -44,14 +76,14 @@ Config::introductionPackage() const
static PackageItem* defaultIntroduction = nullptr; static PackageItem* defaultIntroduction = nullptr;
if ( !defaultIntroduction ) if ( !defaultIntroduction )
{ {
defaultIntroduction = new PackageItem( const auto name = QT_TR_NOOP( "Package Selection" );
QString(), const auto description
QT_TR_NOOP( "Package Selection" ), = QT_TR_NOOP( "Please pick a product from the list. The selected product will be installed." );
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" ) ); defaultIntroduction->screenshot = QPixmap( QStringLiteral( ":/images/no-selection.png" ) );
// TODO: enable better translation defaultIntroduction->name = CalamaresUtils::Locale::TranslatedString( name, metaObject()->className() );
// defaultIntroduction->name.setContext( metaObject()->className() ); defaultIntroduction->description
// defaultIntroduction->description.setContext( metaObject()->className() ); = CalamaresUtils::Locale::TranslatedString( description, metaObject()->className() );
} }
return *defaultIntroduction; return *defaultIntroduction;
} }
@ -60,10 +92,23 @@ void
Config::updateGlobalStorage( const QStringList& selected ) const Config::updateGlobalStorage( const QStringList& selected ) const
{ {
QString key = QStringLiteral( "packagechooser_%1" ).arg( m_id ); 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" ); m_id = CalamaresUtils::getString( configurationMap, "id" );
if ( m_id.isEmpty() ) if ( m_id.isEmpty() )
{ {
m_id = m_defaultId; m_id = m_defaultId.id();
} }
m_defaultModelIndex = QModelIndex(); m_defaultModelIndex = QModelIndex();

View File

@ -13,15 +13,34 @@
#include "PackageModel.h" #include "PackageModel.h"
#include "modulesystem/Config.h" #include "modulesystem/Config.h"
#include "modulesystem/InstanceKey.h"
#include <memory> #include <memory>
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 class Config : public Calamares::ModuleSystem::Config
{ {
Q_OBJECT Q_OBJECT
public: public:
Config( const QString& defaultId, QObject* parent = nullptr ); Config( const Calamares::ModuleSystem::InstanceKey& defaultId, QObject* parent = nullptr );
~Config() override; ~Config() override;
void setConfigurationMap( const QVariantMap& ) override; void setConfigurationMap( const QVariantMap& ) override;
@ -51,10 +70,14 @@ private:
PackageListModel* m_model = nullptr; PackageListModel* m_model = nullptr;
QModelIndex m_defaultModelIndex; QModelIndex m_defaultModelIndex;
// Configuration /// Selection mode for this module
PackageChooserMode m_mode = PackageChooserMode::Optional; 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_id;
QString m_defaultId; /// Value to use for id if none is set in the config file
Calamares::ModuleSystem::InstanceKey m_defaultId;
}; };

View File

@ -10,6 +10,7 @@
#ifndef PACKAGECHOOSERPAGE_H #ifndef PACKAGECHOOSERPAGE_H
#define PACKAGECHOOSERPAGE_H #define PACKAGECHOOSERPAGE_H
#include "Config.h"
#include "PackageModel.h" #include "PackageModel.h"
#include <QAbstractItemModel> #include <QAbstractItemModel>

View File

@ -37,7 +37,7 @@ CALAMARES_PLUGIN_FACTORY_DEFINITION( PackageChooserViewStepFactory, registerPlug
PackageChooserViewStep::PackageChooserViewStep( QObject* parent ) PackageChooserViewStep::PackageChooserViewStep( QObject* parent )
: Calamares::ViewStep( parent ) : Calamares::ViewStep( parent )
, m_config( new Config( moduleInstanceKey().id(), this ) ) , m_config( new Config( moduleInstanceKey(), this ) )
, m_widget( nullptr ) , m_widget( nullptr )
, m_stepName( nullptr ) , m_stepName( nullptr )
{ {

View File

@ -12,26 +12,6 @@
#include "utils/Logger.h" #include "utils/Logger.h"
#include "utils/Variant.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() {}
PackageItem::PackageItem( const QString& a_id, const QString& a_name, const QString& a_description ) PackageItem::PackageItem( const QString& a_id, const QString& a_name, const QString& a_description )

View File

@ -18,15 +18,6 @@
#include <QPixmap> #include <QPixmap>
#include <QVector> #include <QVector>
enum class PackageChooserMode
{
Optional, // zero or one
Required, // exactly one
OptionalMultiple, // zero or more
RequiredMultiple // one or more
};
const NamedEnumTable< PackageChooserMode >& packageChooserModeNames();
struct PackageItem struct PackageItem
{ {