[packagechooser] Enforce selection mode on the next-button

This commit is contained in:
Adriaan de Groot 2019-08-02 17:06:03 +02:00
parent 7609546d8b
commit 86d8db6bbf
3 changed files with 21 additions and 9 deletions

View File

@ -80,6 +80,7 @@ PackageChooserPage::updateLabels()
{ {
currentChanged( QModelIndex() ); currentChanged( QModelIndex() );
} }
emit selectionChanged();
} }
void void
@ -91,3 +92,9 @@ PackageChooserPage::setModel( QAbstractItemModel* model )
this, this,
&PackageChooserPage::updateLabels ); &PackageChooserPage::updateLabels );
} }
bool
PackageChooserPage::hasSelection() const
{
return ui && ui->products && ui->products->selectionModel() && ui->products->selectionModel()->hasSelection();
}

View File

@ -37,10 +37,15 @@ public:
void setModel( QAbstractItemModel* model ); void setModel( QAbstractItemModel* model );
bool hasSelection() const;
public slots: public slots:
void currentChanged( const QModelIndex& index ); void currentChanged( const QModelIndex& index );
void updateLabels(); void updateLabels();
signals:
void selectionChanged();
private: private:
Ui::PackageChooserPage* ui; Ui::PackageChooserPage* ui;
PackageItem m_introduction; PackageItem m_introduction;

View File

@ -37,7 +37,7 @@ PackageChooserViewStep::PackageChooserViewStep( QObject* parent )
: Calamares::ViewStep( parent ) : Calamares::ViewStep( parent )
, m_widget( nullptr ) , m_widget( nullptr )
, m_model( nullptr ) , m_model( nullptr )
, m_mode( PackageChooserMode::Optional ) , m_mode( PackageChooserMode::Exclusive )
{ {
emit nextStatusChanged( false ); emit nextStatusChanged( false );
} }
@ -66,6 +66,10 @@ PackageChooserViewStep::widget()
if ( !m_widget ) if ( !m_widget )
{ {
m_widget = new PackageChooserPage( m_mode, nullptr ); m_widget = new PackageChooserPage( m_mode, nullptr );
connect( m_widget, &PackageChooserPage::selectionChanged, [=]() {
emit nextStatusChanged( this->isNextEnabled() );
} );
if ( m_model ) if ( m_model )
{ {
hookupModel(); hookupModel();
@ -96,17 +100,13 @@ PackageChooserViewStep::isNextEnabled() const
switch ( m_mode ) switch ( m_mode )
{ {
case PackageChooserMode::Optional: case PackageChooserMode::Optional:
// zero or one
return false;
case PackageChooserMode::Exclusive:
// exactly one
return false;
case PackageChooserMode::Multiple: case PackageChooserMode::Multiple:
// zero or more // zero or one OR zero or more
return true; return true;
case PackageChooserMode::Exclusive:
case PackageChooserMode::RequiredMultiple: case PackageChooserMode::RequiredMultiple:
// one or more // exactly one OR one or more
return false; return m_widget->hasSelection();
} }
NOTREACHED return true; NOTREACHED return true;