[packagechooser] Support multiple selection modes

This commit is contained in:
Adriaan de Groot 2019-08-02 16:25:26 +02:00
parent dc5cdbb38c
commit a32dcdad86
5 changed files with 53 additions and 4 deletions

View File

@ -25,7 +25,7 @@
#include <QLabel>
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

View File

@ -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 );

View File

@ -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,9 +78,36 @@ PackageChooserViewStep::widget()
bool
PackageChooserViewStep::isNextEnabled() const
{
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;
}
bool
PackageChooserViewStep::isBackEnabled() const

View File

@ -23,6 +23,8 @@
#include "utils/PluginFactory.h"
#include "viewpages/ViewStep.h"
#include "PackageModel.h"
#include <QObject>
#include <QUrl>
#include <QVariantMap>
@ -59,6 +61,7 @@ private:
PackageChooserPage* m_widget;
PackageListModel* m_model;
PackageChooserMode m_mode;
};
CALAMARES_PLUGIN_FACTORY_DECLARATION( PackageChooserViewStepFactory )

View File

@ -24,6 +24,14 @@
#include <QPixmap>
#include <QVector>
enum class PackageChooserMode
{
Optional, // zero or one
Exclusive, // exactly one
Multiple, // zero or more
RequiredMultiple // one or more
};
struct PackageItem
{
QString id;