diff --git a/src/modules/packagechooser/PackageChooserPage.cpp b/src/modules/packagechooser/PackageChooserPage.cpp index a474e7536..307b1b861 100644 --- a/src/modules/packagechooser/PackageChooserPage.cpp +++ b/src/modules/packagechooser/PackageChooserPage.cpp @@ -25,7 +25,7 @@ #include -PackageChooserPage::PackageChooserPage( QWidget* parent ) +PackageChooserPage::PackageChooserPage( PackageChooserMode mode, QWidget* parent ) : QWidget( parent ) , ui( new Ui::PackageChooserPage ) , m_introduction( QString(), @@ -35,6 +35,16 @@ PackageChooserPage::PackageChooserPage( QWidget* parent ) { ui->setupUi( this ); CALAMARES_RETRANSLATE( updateLabels(); ) + + switch( mode ) + { + case PackageChooserMode::Optional: + case PackageChooserMode::Exclusive: + ui->products->setSelectionMode( QAbstractItemView::SingleSelection ); + case PackageChooserMode::Multiple: + case PackageChooserMode::RequiredMultiple: + ui->products->setSelectionMode( QAbstractItemView::ExtendedSelection ); + } } void diff --git a/src/modules/packagechooser/PackageChooserPage.h b/src/modules/packagechooser/PackageChooserPage.h index 031abad69..483fd5d0a 100644 --- a/src/modules/packagechooser/PackageChooserPage.h +++ b/src/modules/packagechooser/PackageChooserPage.h @@ -33,7 +33,7 @@ class PackageChooserPage : public QWidget { Q_OBJECT public: - explicit PackageChooserPage( QWidget* parent = nullptr ); + explicit PackageChooserPage( PackageChooserMode mode, QWidget* parent = nullptr ); void setModel( QAbstractItemModel* model ); diff --git a/src/modules/packagechooser/PackageChooserViewStep.cpp b/src/modules/packagechooser/PackageChooserViewStep.cpp index 3ff2ac636..2a5cc8073 100644 --- a/src/modules/packagechooser/PackageChooserViewStep.cpp +++ b/src/modules/packagechooser/PackageChooserViewStep.cpp @@ -37,6 +37,7 @@ PackageChooserViewStep::PackageChooserViewStep( QObject* parent ) : Calamares::ViewStep( parent ) , m_widget( nullptr ) , m_model( nullptr ) + , m_mode( PackageChooserMode::Optional ) { emit nextStatusChanged( false ); } @@ -64,7 +65,7 @@ PackageChooserViewStep::widget() { if ( !m_widget ) { - m_widget = new PackageChooserPage( nullptr ); + m_widget = new PackageChooserPage( m_mode, nullptr ); if ( m_model ) { hookupModel(); @@ -77,7 +78,34 @@ PackageChooserViewStep::widget() bool PackageChooserViewStep::isNextEnabled() const { - return true; + if ( !m_model ) + { + return false; + } + + if ( !m_widget ) + { + // No way to have changed anything + return true; + } + + switch( m_mode ) + { + case PackageChooserMode::Optional: + // zero or one + return false; + case PackageChooserMode::Exclusive: + // exactly one + return false; + case PackageChooserMode::Multiple: + // zero or more + return true; + case PackageChooserMode::RequiredMultiple: + // one or more + return false; + } + + NOTREACHED return true; } diff --git a/src/modules/packagechooser/PackageChooserViewStep.h b/src/modules/packagechooser/PackageChooserViewStep.h index 56fbf5d3a..ed33c3e46 100644 --- a/src/modules/packagechooser/PackageChooserViewStep.h +++ b/src/modules/packagechooser/PackageChooserViewStep.h @@ -23,6 +23,8 @@ #include "utils/PluginFactory.h" #include "viewpages/ViewStep.h" +#include "PackageModel.h" + #include #include #include @@ -59,6 +61,7 @@ private: PackageChooserPage* m_widget; PackageListModel* m_model; + PackageChooserMode m_mode; }; CALAMARES_PLUGIN_FACTORY_DECLARATION( PackageChooserViewStepFactory ) diff --git a/src/modules/packagechooser/PackageModel.h b/src/modules/packagechooser/PackageModel.h index 67715e197..6d150802f 100644 --- a/src/modules/packagechooser/PackageModel.h +++ b/src/modules/packagechooser/PackageModel.h @@ -24,6 +24,14 @@ #include #include +enum class PackageChooserMode +{ + Optional, // zero or one + Exclusive, // exactly one + Multiple, // zero or more + RequiredMultiple // one or more +}; + struct PackageItem { QString id;