From 2272d2ab430d866e21c4cd6291a212fbea56a2ed Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Fri, 2 Aug 2019 16:43:10 +0200 Subject: [PATCH] [packagechooser] Add selection modes - Introduce different selection modes (most don't work yet) - Use model data in the main widget --- .../packagechooser/PackageChooserPage.cpp | 22 +++++++++------- .../packagechooser/PackageChooserViewStep.cpp | 26 +++++++++---------- src/modules/packagechooser/PackageModel.cpp | 10 ++++++- src/modules/packagechooser/PackageModel.h | 9 ++++++- 4 files changed, 42 insertions(+), 25 deletions(-) diff --git a/src/modules/packagechooser/PackageChooserPage.cpp b/src/modules/packagechooser/PackageChooserPage.cpp index 307b1b861..174f7efe1 100644 --- a/src/modules/packagechooser/PackageChooserPage.cpp +++ b/src/modules/packagechooser/PackageChooserPage.cpp @@ -36,14 +36,14 @@ PackageChooserPage::PackageChooserPage( PackageChooserMode mode, QWidget* parent ui->setupUi( this ); CALAMARES_RETRANSLATE( updateLabels(); ) - switch( mode ) + switch ( mode ) { - case PackageChooserMode::Optional: - case PackageChooserMode::Exclusive: - ui->products->setSelectionMode( QAbstractItemView::SingleSelection ); - case PackageChooserMode::Multiple: - case PackageChooserMode::RequiredMultiple: - ui->products->setSelectionMode( QAbstractItemView::ExtendedSelection ); + case PackageChooserMode::Optional: + case PackageChooserMode::Exclusive: + ui->products->setSelectionMode( QAbstractItemView::SingleSelection ); + case PackageChooserMode::Multiple: + case PackageChooserMode::RequiredMultiple: + ui->products->setSelectionMode( QAbstractItemView::ExtendedSelection ); } } @@ -58,9 +58,11 @@ PackageChooserPage::currentChanged( const QModelIndex& index ) } else { - ui->productName->setText( QString::number( index.row() ) ); - ui->productScreenshot->hide(); - ui->productDescription->setText( "derp" ); + const auto* model = ui->products->model(); + + ui->productName->setText( model->data( index, PackageListModel::NameRole ).toString() ); + ui->productScreenshot->setPixmap( model->data( index, PackageListModel::ScreenshotRole ).value< QPixmap >() ); + ui->productDescription->setText( model->data( index, PackageListModel::DescriptionRole ).toString() ); } } diff --git a/src/modules/packagechooser/PackageChooserViewStep.cpp b/src/modules/packagechooser/PackageChooserViewStep.cpp index 705958849..e125cdba4 100644 --- a/src/modules/packagechooser/PackageChooserViewStep.cpp +++ b/src/modules/packagechooser/PackageChooserViewStep.cpp @@ -93,20 +93,20 @@ PackageChooserViewStep::isNextEnabled() const return true; } - switch( m_mode ) + 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; + 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/PackageModel.cpp b/src/modules/packagechooser/PackageModel.cpp index 86e18aa88..fc19fda47 100644 --- a/src/modules/packagechooser/PackageModel.cpp +++ b/src/modules/packagechooser/PackageModel.cpp @@ -83,10 +83,18 @@ PackageListModel::data( const QModelIndex& index, int role ) const return QVariant(); } - if ( role == Qt::DisplayRole ) + if ( role == Qt::DisplayRole /* Also PackageNameRole */ ) { return m_packages[ row ].name; } + else if ( role == DescriptionRole ) + { + return m_packages[ row ].description; + } + else if ( role == ScreenshotRole ) + { + return m_packages[ row ].screenshot; + } return QVariant(); } diff --git a/src/modules/packagechooser/PackageModel.h b/src/modules/packagechooser/PackageModel.h index 6d150802f..61e2864a9 100644 --- a/src/modules/packagechooser/PackageModel.h +++ b/src/modules/packagechooser/PackageModel.h @@ -27,7 +27,7 @@ enum class PackageChooserMode { Optional, // zero or one - Exclusive, // exactly one + Exclusive, // exactly one Multiple, // zero or more RequiredMultiple // one or more }; @@ -70,6 +70,13 @@ public: int rowCount( const QModelIndex& index ) const override; QVariant data( const QModelIndex& index, int role ) const override; + enum Roles : int + { + NameRole = Qt::DisplayRole, + DescriptionRole = Qt::UserRole, + ScreenshotRole + }; + private: PackageList m_packages; };