From 735d5d2683454cc84cd77f57f0f92e7f517f9e6b Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Fri, 2 Aug 2019 10:57:12 +0200 Subject: [PATCH 01/11] [packagechooser] Add stub of module Package chooser is a **low density** package selector -- unlike netinstall which offers a high density tree view -- for picking zero, one, or more items from a small collection of packages. This can be used, e.g., for "pick exactly one desktop environment", "pick zero or more text editors" which can then be installed by another module. The UI is big and shiny (rather than netinstall's text-based tree view) and isn't suitable for more than a dozen or so items. --- src/modules/packagechooser/CMakeLists.txt | 27 +++++ .../packagechooser/PackageChooserPage.cpp | 33 +++++ .../packagechooser/PackageChooserPage.h | 39 ++++++ .../packagechooser/PackageChooserViewStep.cpp | 113 ++++++++++++++++++ .../packagechooser/PackageChooserViewStep.h | 60 ++++++++++ src/modules/packagechooser/Tests.cpp | 38 ++++++ src/modules/packagechooser/Tests.h | 36 ++++++ src/modules/packagechooser/page_package.ui | 59 +++++++++ 8 files changed, 405 insertions(+) create mode 100644 src/modules/packagechooser/CMakeLists.txt create mode 100644 src/modules/packagechooser/PackageChooserPage.cpp create mode 100644 src/modules/packagechooser/PackageChooserPage.h create mode 100644 src/modules/packagechooser/PackageChooserViewStep.cpp create mode 100644 src/modules/packagechooser/PackageChooserViewStep.h create mode 100644 src/modules/packagechooser/Tests.cpp create mode 100644 src/modules/packagechooser/Tests.h create mode 100644 src/modules/packagechooser/page_package.ui diff --git a/src/modules/packagechooser/CMakeLists.txt b/src/modules/packagechooser/CMakeLists.txt new file mode 100644 index 000000000..0c739012a --- /dev/null +++ b/src/modules/packagechooser/CMakeLists.txt @@ -0,0 +1,27 @@ +find_package( Qt5 COMPONENTS Core Gui Widgets REQUIRED ) + +calamares_add_plugin( packagechooser + TYPE viewmodule + EXPORT_MACRO PLUGINDLLEXPORT_PRO + SOURCES + PackageChooserPage.cpp + PackageChooserViewStep.cpp + UI + page_package.ui + LINK_PRIVATE_LIBRARIES + calamaresui + SHARED_LIB +) + +if( ECM_FOUND AND BUILD_TESTING ) + ecm_add_test( + Tests.cpp + TEST_NAME + packagechooosertest + LINK_LIBRARIES + ${CALAMARES_LIBRARIES} + Qt5::Core + Qt5::Test + ) + calamares_automoc( packagechooosertest) +endif() diff --git a/src/modules/packagechooser/PackageChooserPage.cpp b/src/modules/packagechooser/PackageChooserPage.cpp new file mode 100644 index 000000000..2f83e6728 --- /dev/null +++ b/src/modules/packagechooser/PackageChooserPage.cpp @@ -0,0 +1,33 @@ +/* === This file is part of Calamares - === + * + * Copyright 2019, Adriaan de Groot + * + * Calamares is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Calamares is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Calamares. If not, see . + */ + +#include "PackageChooserPage.h" + +#include "ui_page_package.h" + +#include "utils/Logger.h" +#include "utils/Retranslator.h" + +#include + +PackageChooserPage::PackageChooserPage( QWidget* parent ) + : QWidget( parent ) + , ui( new Ui::PackageChooserPage ) +{ + ui->setupUi( this ); +} diff --git a/src/modules/packagechooser/PackageChooserPage.h b/src/modules/packagechooser/PackageChooserPage.h new file mode 100644 index 000000000..1bc46bef3 --- /dev/null +++ b/src/modules/packagechooser/PackageChooserPage.h @@ -0,0 +1,39 @@ +/* === This file is part of Calamares - === + * + * Copyright 2019, Adriaan de Groot + * + * Calamares is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Calamares is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Calamares. If not, see . + */ + +#ifndef PACKAGECHOOSERPAGE_H +#define PACKAGECHOOSERPAGE_H + +#include + +namespace Ui +{ +class PackageChooserPage; +} + +class PackageChooserPage : public QWidget +{ + Q_OBJECT +public: + explicit PackageChooserPage( QWidget* parent = nullptr ); + +private: + Ui::PackageChooserPage* ui; +}; + +#endif // PACKAGECHOOSERPAGE_H diff --git a/src/modules/packagechooser/PackageChooserViewStep.cpp b/src/modules/packagechooser/PackageChooserViewStep.cpp new file mode 100644 index 000000000..db45bea0b --- /dev/null +++ b/src/modules/packagechooser/PackageChooserViewStep.cpp @@ -0,0 +1,113 @@ +/* === This file is part of Calamares - === + * + * Copyright 2019, Adriaan de Groot + * + * Calamares is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Calamares is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Calamares. If not, see . + */ + +#include "PackageChooserViewStep.h" + +#include "PackageChooserPage.h" + +#include "GlobalStorage.h" +#include "JobQueue.h" + +#include "utils/CalamaresUtilsSystem.h" +#include "utils/Logger.h" +#include "utils/Variant.h" + +#include +#include + +CALAMARES_PLUGIN_FACTORY_DEFINITION( PackageChooserViewStepFactory, registerPlugin< PackageChooserViewStep >(); ) + +PackageChooserViewStep::PackageChooserViewStep( QObject* parent ) + : Calamares::ViewStep( parent ) + , m_widget( nullptr ) +{ + emit nextStatusChanged( false ); +} + + +PackageChooserViewStep::~PackageChooserViewStep() +{ + if ( m_widget && m_widget->parent() == nullptr ) + { + m_widget->deleteLater(); + } +} + + +QString +PackageChooserViewStep::prettyName() const +{ + return tr( "Packages" ); +} + + +QWidget* +PackageChooserViewStep::widget() +{ + if ( !m_widget ) + { + m_widget = new PackageChooserPage( nullptr ); + } + return m_widget; +} + + +bool +PackageChooserViewStep::isNextEnabled() const +{ + return true; +} + + +bool +PackageChooserViewStep::isBackEnabled() const +{ + return true; +} + + +bool +PackageChooserViewStep::isAtBeginning() const +{ + return true; +} + + +bool +PackageChooserViewStep::isAtEnd() const +{ + return true; +} + + +void +PackageChooserViewStep::onLeave() +{ +} + +Calamares::JobList +PackageChooserViewStep::jobs() const +{ + Calamares::JobList l; + return l; +} + +void +PackageChooserViewStep::setConfigurationMap( const QVariantMap& configurationMap ) +{ +} diff --git a/src/modules/packagechooser/PackageChooserViewStep.h b/src/modules/packagechooser/PackageChooserViewStep.h new file mode 100644 index 000000000..a32d4caab --- /dev/null +++ b/src/modules/packagechooser/PackageChooserViewStep.h @@ -0,0 +1,60 @@ +/* === This file is part of Calamares - === + * + * Copyright 2019, Adriaan de Groot + * + * Calamares is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Calamares is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Calamares. If not, see . + */ + +#ifndef PACKAGECHOOSERVIEWSTEP_H +#define PACKAGECHOOSERVIEWSTEP_H + +#include +#include +#include + +#include +#include +#include + +class PLUGINDLLEXPORT PackageChooserViewStep : public Calamares::ViewStep +{ + Q_OBJECT + +public: + explicit PackageChooserViewStep( QObject* parent = nullptr ); + virtual ~PackageChooserViewStep() override; + + QString prettyName() const override; + + QWidget* widget() override; + + bool isNextEnabled() const override; + bool isBackEnabled() const override; + + bool isAtBeginning() const override; + bool isAtEnd() const override; + + void onLeave() override; + + Calamares::JobList jobs() const override; + + void setConfigurationMap( const QVariantMap& configurationMap ) override; + +private: + QWidget* m_widget; +}; + +CALAMARES_PLUGIN_FACTORY_DECLARATION( PackageChooserViewStepFactory ) + +#endif // PACKAGECHOOSERVIEWSTEP_H diff --git a/src/modules/packagechooser/Tests.cpp b/src/modules/packagechooser/Tests.cpp new file mode 100644 index 000000000..c016f1808 --- /dev/null +++ b/src/modules/packagechooser/Tests.cpp @@ -0,0 +1,38 @@ +/* === This file is part of Calamares - === + * + * Copyright 2019, Adriaan de Groot + * + * Calamares is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Calamares is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Calamares. If not, see . + */ + +#include "Tests.h" + +#include + +QTEST_GUILESS_MAIN( PackageChooserTests ) + +PackageChooserTests::PackageChooserTests() {} + +PackageChooserTests::~PackageChooserTests() {} + +void +PackageChooserTests::initTestCase() +{ +} + +void +PackageChooserTests::testBogus() +{ + QVERIFY( true ); +} diff --git a/src/modules/packagechooser/Tests.h b/src/modules/packagechooser/Tests.h new file mode 100644 index 000000000..bc257f5a5 --- /dev/null +++ b/src/modules/packagechooser/Tests.h @@ -0,0 +1,36 @@ +/* === This file is part of Calamares - === + * + * Copyright 2019, Adriaan de Groot + * + * Calamares is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Calamares is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Calamares. If not, see . + */ + +#ifndef PACKAGECHOOSERTESTS_H +#define PACKAGECHOOSERTESTS_H + +#include + +class PackageChooserTests : public QObject +{ + Q_OBJECT +public: + PackageChooserTests(); + ~PackageChooserTests() override; + +private Q_SLOTS: + void initTestCase(); + void testBogus(); +}; + +#endif diff --git a/src/modules/packagechooser/page_package.ui b/src/modules/packagechooser/page_package.ui new file mode 100644 index 000000000..18c2f81fd --- /dev/null +++ b/src/modules/packagechooser/page_package.ui @@ -0,0 +1,59 @@ + + + PackageChooserPage + + + + 0 + 0 + 400 + 300 + + + + Form + + + + + 9 + 19 + 341 + 261 + + + + + + + + + + + + TextLabel + + + + + + + TextLabel + + + + + + + TextLabel + + + + + + + + + + + From 727290f75e9286e6819122295f5955c117f8406b Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Fri, 2 Aug 2019 11:09:12 +0200 Subject: [PATCH 02/11] [packagechooser] Handle translation events (stub) --- src/modules/packagechooser/PackageChooserPage.cpp | 11 +++++++++++ src/modules/packagechooser/PackageChooserPage.h | 3 +++ 2 files changed, 14 insertions(+) diff --git a/src/modules/packagechooser/PackageChooserPage.cpp b/src/modules/packagechooser/PackageChooserPage.cpp index 2f83e6728..5524bd103 100644 --- a/src/modules/packagechooser/PackageChooserPage.cpp +++ b/src/modules/packagechooser/PackageChooserPage.cpp @@ -30,4 +30,15 @@ PackageChooserPage::PackageChooserPage( QWidget* parent ) , ui( new Ui::PackageChooserPage ) { ui->setupUi( this ); + CALAMARES_RETRANSLATE( + updateLabels(); + ) +} + +void +PackageChooserPage::updateLabels() +{ + ui->productName->setText( QString() ); + ui->productScreenshot->hide(); + ui->productDescription->setText( tr( "Please pick a product from the list." ) ); } diff --git a/src/modules/packagechooser/PackageChooserPage.h b/src/modules/packagechooser/PackageChooserPage.h index 1bc46bef3..02c46fc3e 100644 --- a/src/modules/packagechooser/PackageChooserPage.h +++ b/src/modules/packagechooser/PackageChooserPage.h @@ -32,6 +32,9 @@ class PackageChooserPage : public QWidget public: explicit PackageChooserPage( QWidget* parent = nullptr ); +public slots: + void updateLabels(); + private: Ui::PackageChooserPage* ui; }; From d1a85ba5ca5f333e1564d3a5f7a8e29127ccf8ff Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Fri, 2 Aug 2019 13:05:46 +0200 Subject: [PATCH 03/11] [packagechooser] Add a model for the list to use - Model contents currently hard-coded --- src/modules/packagechooser/CMakeLists.txt | 1 + .../packagechooser/PackageChooserPage.cpp | 18 +++- .../packagechooser/PackageChooserPage.h | 4 + .../packagechooser/PackageChooserViewStep.cpp | 35 +++++++ .../packagechooser/PackageChooserViewStep.h | 14 ++- src/modules/packagechooser/PackageModel.cpp | 93 +++++++++++++++++++ src/modules/packagechooser/PackageModel.h | 62 +++++++++++++ 7 files changed, 220 insertions(+), 7 deletions(-) create mode 100644 src/modules/packagechooser/PackageModel.cpp create mode 100644 src/modules/packagechooser/PackageModel.h diff --git a/src/modules/packagechooser/CMakeLists.txt b/src/modules/packagechooser/CMakeLists.txt index 0c739012a..525921602 100644 --- a/src/modules/packagechooser/CMakeLists.txt +++ b/src/modules/packagechooser/CMakeLists.txt @@ -6,6 +6,7 @@ calamares_add_plugin( packagechooser SOURCES PackageChooserPage.cpp PackageChooserViewStep.cpp + PackageModel.cpp UI page_package.ui LINK_PRIVATE_LIBRARIES diff --git a/src/modules/packagechooser/PackageChooserPage.cpp b/src/modules/packagechooser/PackageChooserPage.cpp index 5524bd103..215adeeef 100644 --- a/src/modules/packagechooser/PackageChooserPage.cpp +++ b/src/modules/packagechooser/PackageChooserPage.cpp @@ -30,9 +30,7 @@ PackageChooserPage::PackageChooserPage( QWidget* parent ) , ui( new Ui::PackageChooserPage ) { ui->setupUi( this ); - CALAMARES_RETRANSLATE( - updateLabels(); - ) + CALAMARES_RETRANSLATE( updateLabels(); ) } void @@ -42,3 +40,17 @@ PackageChooserPage::updateLabels() ui->productScreenshot->hide(); ui->productDescription->setText( tr( "Please pick a product from the list." ) ); } + +void +PackageChooserPage::setModel( QAbstractItemModel* model ) +{ + ui->products->setModel( model ); +} + +void +PackageChooserPage::currentChanged( const QModelIndex& current ) +{ + updateLabels(); + cDebug() << "Current updated to" << current.row(); + cDebug() << ui->products->model()->data( current, Qt::DisplayRole ); +} diff --git a/src/modules/packagechooser/PackageChooserPage.h b/src/modules/packagechooser/PackageChooserPage.h index 02c46fc3e..db5540312 100644 --- a/src/modules/packagechooser/PackageChooserPage.h +++ b/src/modules/packagechooser/PackageChooserPage.h @@ -19,6 +19,7 @@ #ifndef PACKAGECHOOSERPAGE_H #define PACKAGECHOOSERPAGE_H +#include #include namespace Ui @@ -32,8 +33,11 @@ class PackageChooserPage : public QWidget public: explicit PackageChooserPage( QWidget* parent = nullptr ); + void setModel( QAbstractItemModel* model ); + public slots: void updateLabels(); + void currentChanged( const QModelIndex& current ); private: Ui::PackageChooserPage* ui; diff --git a/src/modules/packagechooser/PackageChooserViewStep.cpp b/src/modules/packagechooser/PackageChooserViewStep.cpp index db45bea0b..3ff2ac636 100644 --- a/src/modules/packagechooser/PackageChooserViewStep.cpp +++ b/src/modules/packagechooser/PackageChooserViewStep.cpp @@ -19,6 +19,7 @@ #include "PackageChooserViewStep.h" #include "PackageChooserPage.h" +#include "PackageModel.h" #include "GlobalStorage.h" #include "JobQueue.h" @@ -35,6 +36,7 @@ CALAMARES_PLUGIN_FACTORY_DEFINITION( PackageChooserViewStepFactory, registerPlug PackageChooserViewStep::PackageChooserViewStep( QObject* parent ) : Calamares::ViewStep( parent ) , m_widget( nullptr ) + , m_model( nullptr ) { emit nextStatusChanged( false ); } @@ -46,6 +48,7 @@ PackageChooserViewStep::~PackageChooserViewStep() { m_widget->deleteLater(); } + delete m_model; } @@ -62,6 +65,10 @@ PackageChooserViewStep::widget() if ( !m_widget ) { m_widget = new PackageChooserPage( nullptr ); + if ( m_model ) + { + hookupModel(); + } } return m_widget; } @@ -110,4 +117,32 @@ PackageChooserViewStep::jobs() const void PackageChooserViewStep::setConfigurationMap( const QVariantMap& configurationMap ) { + // TODO: use the configurationMap + + if ( !m_model ) + { + + m_model = new PackageListModel( nullptr ); + m_model->addPackage( PackageItem { "kde", "kde", "Plasma", "Plasma Desktop" } ); + m_model->addPackage( + PackageItem { "gnome", "gnome", "GNOME", "GNU Networked Object Modeling Environment Desktop" } ); + + + if ( m_widget ) + { + hookupModel(); + } + } +} + +void +PackageChooserViewStep::hookupModel() +{ + if ( !m_model || !m_widget ) + { + cError() << "Can't hook up model until widget and model both exist."; + return; + } + + m_widget->setModel( m_model ); } diff --git a/src/modules/packagechooser/PackageChooserViewStep.h b/src/modules/packagechooser/PackageChooserViewStep.h index a32d4caab..56fbf5d3a 100644 --- a/src/modules/packagechooser/PackageChooserViewStep.h +++ b/src/modules/packagechooser/PackageChooserViewStep.h @@ -19,14 +19,17 @@ #ifndef PACKAGECHOOSERVIEWSTEP_H #define PACKAGECHOOSERVIEWSTEP_H -#include -#include -#include +#include "PluginDllMacro.h" +#include "utils/PluginFactory.h" +#include "viewpages/ViewStep.h" #include #include #include +class PackageChooserPage; +class PackageListModel; + class PLUGINDLLEXPORT PackageChooserViewStep : public Calamares::ViewStep { Q_OBJECT @@ -52,7 +55,10 @@ public: void setConfigurationMap( const QVariantMap& configurationMap ) override; private: - QWidget* m_widget; + void hookupModel(); + + PackageChooserPage* m_widget; + PackageListModel* m_model; }; CALAMARES_PLUGIN_FACTORY_DECLARATION( PackageChooserViewStepFactory ) diff --git a/src/modules/packagechooser/PackageModel.cpp b/src/modules/packagechooser/PackageModel.cpp new file mode 100644 index 000000000..1f6346666 --- /dev/null +++ b/src/modules/packagechooser/PackageModel.cpp @@ -0,0 +1,93 @@ +/* === This file is part of Calamares - === + * + * Copyright 2019, Adriaan de Groot + * + * Calamares is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Calamares is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Calamares. If not, see . + */ + +#include "PackageModel.h" + +#include "utils/Logger.h" + +PackageItem +PackageItem::fromAppStream( const QString& filename ) +{ + // TODO: implement this + return PackageItem {}; +} + +PackageItem::PackageItem() {} + +PackageItem::PackageItem( const QString& a_id, + const QString& a_package, + const QString& a_name, + const QString& a_description ) + : id( a_id ) + , package( a_package ) + , name( a_name ) + , description( a_description ) +{ +} + + +PackageListModel::PackageListModel( QObject* parent ) + : QAbstractListModel( parent ) +{ +} + +PackageListModel::PackageListModel( PackageList&& items, QObject* parent ) + : QAbstractListModel( parent ) + , m_packages( std::move( items ) ) +{ +} + +PackageListModel::~PackageListModel() {} + +void +PackageListModel::addPackage( PackageItem&& p ) +{ + int c = m_packages.count(); + beginInsertRows( QModelIndex(), c, c ); + m_packages.append( p ); + endInsertRows(); +} + +int +PackageListModel::rowCount( const QModelIndex& index ) const +{ + // For lists, valid indexes have zero children; only the root index has them + return index.isValid() ? 0 : m_packages.count(); +} + +QVariant +PackageListModel::data( const QModelIndex& index, int role ) const +{ + cDebug() << "Data" << m_packages.count() << index.isValid() << ( index.isValid() ? index.row() : -1 ); + if ( !index.isValid() ) + { + return QVariant(); + } + int row = index.row(); + if ( row >= m_packages.count() || row < 0 ) + { + return QVariant(); + } + + if ( role == Qt::DisplayRole ) + { + return m_packages[ row ].name; + } + + return QVariant(); +} diff --git a/src/modules/packagechooser/PackageModel.h b/src/modules/packagechooser/PackageModel.h new file mode 100644 index 000000000..c00e55c0a --- /dev/null +++ b/src/modules/packagechooser/PackageModel.h @@ -0,0 +1,62 @@ +/* === This file is part of Calamares - === + * + * Copyright 2019, Adriaan de Groot + * + * Calamares is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Calamares is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Calamares. If not, see . + */ + +#ifndef PACKAGEMODEL_H +#define PACKAGEMODEL_H + +#include +#include +#include + +struct PackageItem +{ + QString id; + // TODO: may need more than one + QString package; + // TODO: name and description are localized + QString name; + QString description; + // TODO: may be more than one + // QPixmap screenshot; + + PackageItem(); + PackageItem( const QString& id, const QString& package, const QString& name, const QString& description ); + + // TODO: implement this + PackageItem fromAppStream( const QString& filename ); +}; + +using PackageList = QVector< PackageItem >; + +class PackageListModel : public QAbstractListModel +{ +public: + PackageListModel( PackageList&& items, QObject* parent ); + PackageListModel( QObject* parent ); + virtual ~PackageListModel(); + + void addPackage( PackageItem&& p ); + + int rowCount( const QModelIndex& index ) const override; + QVariant data( const QModelIndex& index, int role ) const override; + +private: + PackageList m_packages; +}; + +#endif From f8d159dfa49dbd820ed3a3945e0d46da4e953a61 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Fri, 2 Aug 2019 15:32:14 +0200 Subject: [PATCH 04/11] [packagechooser] Massage layout a bit --- src/modules/packagechooser/page_package.ui | 91 ++++++++++++---------- 1 file changed, 49 insertions(+), 42 deletions(-) diff --git a/src/modules/packagechooser/page_package.ui b/src/modules/packagechooser/page_package.ui index 18c2f81fd..1ba032ed2 100644 --- a/src/modules/packagechooser/page_package.ui +++ b/src/modules/packagechooser/page_package.ui @@ -1,58 +1,65 @@ PackageChooserPage - + 0 0 400 - 300 + 500 + + + 0 + 1 + + Form - - - - 9 - 19 - 341 - 261 - - - - - - - - - - - - TextLabel - - - - - - - TextLabel - - - - - - - TextLabel - - - - - - - + + + + + + + + 0 + 1 + + + + + + + + + + TextLabel + + + + + + + TextLabel + + + + + + + TextLabel + + + + + + + + From dc5cdbb38cad5206b03893beba169506529f507c Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Fri, 2 Aug 2019 16:07:47 +0200 Subject: [PATCH 05/11] [packagechooser] Update other parts of the window on selection --- .../packagechooser/PackageChooserPage.cpp | 44 ++++++++++++++----- .../packagechooser/PackageChooserPage.h | 5 ++- src/modules/packagechooser/PackageModel.cpp | 1 - src/modules/packagechooser/PackageModel.h | 9 +++- 4 files changed, 45 insertions(+), 14 deletions(-) diff --git a/src/modules/packagechooser/PackageChooserPage.cpp b/src/modules/packagechooser/PackageChooserPage.cpp index 215adeeef..a474e7536 100644 --- a/src/modules/packagechooser/PackageChooserPage.cpp +++ b/src/modules/packagechooser/PackageChooserPage.cpp @@ -28,29 +28,51 @@ PackageChooserPage::PackageChooserPage( QWidget* parent ) : QWidget( parent ) , ui( new Ui::PackageChooserPage ) + , m_introduction( QString(), + QString(), + tr( "Package Selection" ), + tr( "Please pick a product from the list. The selected product will be installed." ) ) { ui->setupUi( this ); CALAMARES_RETRANSLATE( updateLabels(); ) } +void +PackageChooserPage::currentChanged( const QModelIndex& index ) +{ + if ( !index.isValid() || !ui->products->selectionModel()->hasSelection() ) + { + ui->productName->setText( m_introduction.name ); + ui->productScreenshot->setPixmap( m_introduction.screenshot ); + ui->productDescription->setText( m_introduction.description ); + } + else + { + ui->productName->setText( QString::number( index.row() ) ); + ui->productScreenshot->hide(); + ui->productDescription->setText( "derp" ); + } +} + void PackageChooserPage::updateLabels() { - ui->productName->setText( QString() ); - ui->productScreenshot->hide(); - ui->productDescription->setText( tr( "Please pick a product from the list." ) ); + if ( ui && ui->products && ui->products->selectionModel() ) + { + currentChanged( ui->products->selectionModel()->currentIndex() ); + } + else + { + currentChanged( QModelIndex() ); + } } void PackageChooserPage::setModel( QAbstractItemModel* model ) { ui->products->setModel( model ); -} - -void -PackageChooserPage::currentChanged( const QModelIndex& current ) -{ - updateLabels(); - cDebug() << "Current updated to" << current.row(); - cDebug() << ui->products->model()->data( current, Qt::DisplayRole ); + connect( ui->products->selectionModel(), + &QItemSelectionModel::selectionChanged, + this, + &PackageChooserPage::updateLabels ); } diff --git a/src/modules/packagechooser/PackageChooserPage.h b/src/modules/packagechooser/PackageChooserPage.h index db5540312..031abad69 100644 --- a/src/modules/packagechooser/PackageChooserPage.h +++ b/src/modules/packagechooser/PackageChooserPage.h @@ -19,6 +19,8 @@ #ifndef PACKAGECHOOSERPAGE_H #define PACKAGECHOOSERPAGE_H +#include "PackageModel.h" + #include #include @@ -36,11 +38,12 @@ public: void setModel( QAbstractItemModel* model ); public slots: + void currentChanged( const QModelIndex& index ); void updateLabels(); - void currentChanged( const QModelIndex& current ); private: Ui::PackageChooserPage* ui; + PackageItem m_introduction; }; #endif // PACKAGECHOOSERPAGE_H diff --git a/src/modules/packagechooser/PackageModel.cpp b/src/modules/packagechooser/PackageModel.cpp index 1f6346666..86e18aa88 100644 --- a/src/modules/packagechooser/PackageModel.cpp +++ b/src/modules/packagechooser/PackageModel.cpp @@ -73,7 +73,6 @@ PackageListModel::rowCount( const QModelIndex& index ) const QVariant PackageListModel::data( const QModelIndex& index, int role ) const { - cDebug() << "Data" << m_packages.count() << index.isValid() << ( index.isValid() ? index.row() : -1 ); if ( !index.isValid() ) { return QVariant(); diff --git a/src/modules/packagechooser/PackageModel.h b/src/modules/packagechooser/PackageModel.h index c00e55c0a..67715e197 100644 --- a/src/modules/packagechooser/PackageModel.h +++ b/src/modules/packagechooser/PackageModel.h @@ -21,6 +21,7 @@ #include #include +#include #include struct PackageItem @@ -32,9 +33,15 @@ struct PackageItem QString name; QString description; // TODO: may be more than one - // QPixmap screenshot; + QPixmap screenshot; + /// @brief Create blank PackageItem PackageItem(); + /** @brief Creates a PackageItem from given strings + * + * This constructor sets all the text members, + * but leaves the screenshot blank. Set that separately. + */ PackageItem( const QString& id, const QString& package, const QString& name, const QString& description ); // TODO: implement this From a32dcdad869d1544e46d6e7651d2768967e2983d Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Fri, 2 Aug 2019 16:25:26 +0200 Subject: [PATCH 06/11] [packagechooser] Support multiple selection modes --- .../packagechooser/PackageChooserPage.cpp | 12 ++++++- .../packagechooser/PackageChooserPage.h | 2 +- .../packagechooser/PackageChooserViewStep.cpp | 32 +++++++++++++++++-- .../packagechooser/PackageChooserViewStep.h | 3 ++ src/modules/packagechooser/PackageModel.h | 8 +++++ 5 files changed, 53 insertions(+), 4 deletions(-) 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; From 86e2e6242f999c79650d60d7d9cddffe5f666ec9 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Fri, 2 Aug 2019 16:26:10 +0200 Subject: [PATCH 07/11] [packagechooser] Warn about weird calling orders --- src/modules/packagechooser/PackageChooserViewStep.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/modules/packagechooser/PackageChooserViewStep.cpp b/src/modules/packagechooser/PackageChooserViewStep.cpp index 2a5cc8073..705958849 100644 --- a/src/modules/packagechooser/PackageChooserViewStep.cpp +++ b/src/modules/packagechooser/PackageChooserViewStep.cpp @@ -70,6 +70,10 @@ PackageChooserViewStep::widget() { hookupModel(); } + else + { + cWarning() << "PackageChooser Widget created before model."; + } } return m_widget; } From 2272d2ab430d866e21c4cd6291a212fbea56a2ed Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Fri, 2 Aug 2019 16:43:10 +0200 Subject: [PATCH 08/11] [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; }; From 7609546d8bebd96d037a1e8eb77c0dc779ca746d Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Fri, 2 Aug 2019 17:02:02 +0200 Subject: [PATCH 09/11] [packagechooser] Add screenshots for example --- src/modules/packagechooser/CMakeLists.txt | 2 ++ .../packagechooser/PackageChooserPage.cpp | 3 +++ src/modules/packagechooser/images/gnome.png | Bin 0 -> 5739 bytes src/modules/packagechooser/images/kde.png | Bin 0 -> 4678 bytes .../packagechooser/images/no-selection.png | Bin 0 -> 4618 bytes src/modules/packagechooser/packagechooser.qrc | 7 +++++++ 6 files changed, 12 insertions(+) create mode 100644 src/modules/packagechooser/images/gnome.png create mode 100644 src/modules/packagechooser/images/kde.png create mode 100644 src/modules/packagechooser/images/no-selection.png create mode 100644 src/modules/packagechooser/packagechooser.qrc diff --git a/src/modules/packagechooser/CMakeLists.txt b/src/modules/packagechooser/CMakeLists.txt index 525921602..483092800 100644 --- a/src/modules/packagechooser/CMakeLists.txt +++ b/src/modules/packagechooser/CMakeLists.txt @@ -7,6 +7,8 @@ calamares_add_plugin( packagechooser PackageChooserPage.cpp PackageChooserViewStep.cpp PackageModel.cpp + RESOURCES + packagechooser.qrc UI page_package.ui LINK_PRIVATE_LIBRARIES diff --git a/src/modules/packagechooser/PackageChooserPage.cpp b/src/modules/packagechooser/PackageChooserPage.cpp index 174f7efe1..23d3b837b 100644 --- a/src/modules/packagechooser/PackageChooserPage.cpp +++ b/src/modules/packagechooser/PackageChooserPage.cpp @@ -33,6 +33,9 @@ PackageChooserPage::PackageChooserPage( PackageChooserMode mode, QWidget* parent tr( "Package Selection" ), tr( "Please pick a product from the list. The selected product will be installed." ) ) { + m_introduction.screenshot = QPixmap( QStringLiteral( ":/images/no-selection.png" ) ); + cDebug() << m_introduction.screenshot; + ui->setupUi( this ); CALAMARES_RETRANSLATE( updateLabels(); ) diff --git a/src/modules/packagechooser/images/gnome.png b/src/modules/packagechooser/images/gnome.png new file mode 100644 index 0000000000000000000000000000000000000000..f9f3901e14aeafc94babdf08bb5ffeb99af836a7 GIT binary patch literal 5739 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 J3*eT){{=a!jIsa# literal 0 HcmV?d00001 diff --git a/src/modules/packagechooser/images/kde.png b/src/modules/packagechooser/images/kde.png new file mode 100644 index 0000000000000000000000000000000000000000..02f3e70ea21282afa79d367f05d602c33cb5ddd3 GIT binary patch literal 4678 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 literal 0 HcmV?d00001 diff --git a/src/modules/packagechooser/images/no-selection.png b/src/modules/packagechooser/images/no-selection.png new file mode 100644 index 0000000000000000000000000000000000000000..f9dbbbac45d0b03667f66be54664fdc5dce71983 GIT binary patch literal 4618 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 literal 0 HcmV?d00001 diff --git a/src/modules/packagechooser/packagechooser.qrc b/src/modules/packagechooser/packagechooser.qrc new file mode 100644 index 000000000..9212c2f93 --- /dev/null +++ b/src/modules/packagechooser/packagechooser.qrc @@ -0,0 +1,7 @@ + + + images/no-selection.png + images/kde.png + images/gnome.png + + From 86d8db6bbf92e77981532d9409a685b953711fe3 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Fri, 2 Aug 2019 17:06:03 +0200 Subject: [PATCH 10/11] [packagechooser] Enforce selection mode on the next-button --- .../packagechooser/PackageChooserPage.cpp | 7 +++++++ .../packagechooser/PackageChooserPage.h | 5 +++++ .../packagechooser/PackageChooserViewStep.cpp | 18 +++++++++--------- 3 files changed, 21 insertions(+), 9 deletions(-) diff --git a/src/modules/packagechooser/PackageChooserPage.cpp b/src/modules/packagechooser/PackageChooserPage.cpp index 23d3b837b..f0f7cb04c 100644 --- a/src/modules/packagechooser/PackageChooserPage.cpp +++ b/src/modules/packagechooser/PackageChooserPage.cpp @@ -80,6 +80,7 @@ PackageChooserPage::updateLabels() { currentChanged( QModelIndex() ); } + emit selectionChanged(); } void @@ -91,3 +92,9 @@ PackageChooserPage::setModel( QAbstractItemModel* model ) this, &PackageChooserPage::updateLabels ); } + +bool +PackageChooserPage::hasSelection() const +{ + return ui && ui->products && ui->products->selectionModel() && ui->products->selectionModel()->hasSelection(); +} diff --git a/src/modules/packagechooser/PackageChooserPage.h b/src/modules/packagechooser/PackageChooserPage.h index 483fd5d0a..8f9fde11f 100644 --- a/src/modules/packagechooser/PackageChooserPage.h +++ b/src/modules/packagechooser/PackageChooserPage.h @@ -37,10 +37,15 @@ public: void setModel( QAbstractItemModel* model ); + bool hasSelection() const; + public slots: void currentChanged( const QModelIndex& index ); void updateLabels(); +signals: + void selectionChanged(); + private: Ui::PackageChooserPage* ui; PackageItem m_introduction; diff --git a/src/modules/packagechooser/PackageChooserViewStep.cpp b/src/modules/packagechooser/PackageChooserViewStep.cpp index e125cdba4..1379f5dd6 100644 --- a/src/modules/packagechooser/PackageChooserViewStep.cpp +++ b/src/modules/packagechooser/PackageChooserViewStep.cpp @@ -37,7 +37,7 @@ PackageChooserViewStep::PackageChooserViewStep( QObject* parent ) : Calamares::ViewStep( parent ) , m_widget( nullptr ) , m_model( nullptr ) - , m_mode( PackageChooserMode::Optional ) + , m_mode( PackageChooserMode::Exclusive ) { emit nextStatusChanged( false ); } @@ -66,6 +66,10 @@ PackageChooserViewStep::widget() if ( !m_widget ) { m_widget = new PackageChooserPage( m_mode, nullptr ); + connect( m_widget, &PackageChooserPage::selectionChanged, [=]() { + emit nextStatusChanged( this->isNextEnabled() ); + } ); + if ( m_model ) { hookupModel(); @@ -96,17 +100,13 @@ PackageChooserViewStep::isNextEnabled() const switch ( m_mode ) { case PackageChooserMode::Optional: - // zero or one - return false; - case PackageChooserMode::Exclusive: - // exactly one - return false; case PackageChooserMode::Multiple: - // zero or more + // zero or one OR zero or more return true; + case PackageChooserMode::Exclusive: case PackageChooserMode::RequiredMultiple: - // one or more - return false; + // exactly one OR one or more + return m_widget->hasSelection(); } NOTREACHED return true; From ab7374628b9eed73650c0b6260b155499e6fe2cd Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Fri, 2 Aug 2019 17:17:53 +0200 Subject: [PATCH 11/11] [packagechooser] Use sample screenshots --- .../packagechooser/PackageChooserViewStep.cpp | 4 ++-- src/modules/packagechooser/PackageModel.cpp | 13 +++++++++++++ src/modules/packagechooser/PackageModel.h | 6 ++++++ 3 files changed, 21 insertions(+), 2 deletions(-) diff --git a/src/modules/packagechooser/PackageChooserViewStep.cpp b/src/modules/packagechooser/PackageChooserViewStep.cpp index 1379f5dd6..9b3c174da 100644 --- a/src/modules/packagechooser/PackageChooserViewStep.cpp +++ b/src/modules/packagechooser/PackageChooserViewStep.cpp @@ -155,9 +155,9 @@ PackageChooserViewStep::setConfigurationMap( const QVariantMap& configurationMap { m_model = new PackageListModel( nullptr ); - m_model->addPackage( PackageItem { "kde", "kde", "Plasma", "Plasma Desktop" } ); + m_model->addPackage( PackageItem { "kde", "kde", "Plasma", "Plasma Desktop", ":/images/kde.png" } ); m_model->addPackage( - PackageItem { "gnome", "gnome", "GNOME", "GNU Networked Object Modeling Environment Desktop" } ); + PackageItem { "gnome", "gnome", "GNOME", "GNU Networked Object Modeling Environment Desktop", ":/images/gnome.png" } ); if ( m_widget ) diff --git a/src/modules/packagechooser/PackageModel.cpp b/src/modules/packagechooser/PackageModel.cpp index fc19fda47..7798b33bd 100644 --- a/src/modules/packagechooser/PackageModel.cpp +++ b/src/modules/packagechooser/PackageModel.cpp @@ -40,6 +40,19 @@ PackageItem::PackageItem( const QString& a_id, { } +PackageItem::PackageItem( const QString& a_id, + const QString& a_package, + const QString& a_name, + const QString& a_description, + const QString& screenshotPath ) + : id( a_id ) + , package( a_package ) + , name( a_name ) + , description( a_description ) + , screenshot( screenshotPath ) +{ +} + PackageListModel::PackageListModel( QObject* parent ) : QAbstractListModel( parent ) diff --git a/src/modules/packagechooser/PackageModel.h b/src/modules/packagechooser/PackageModel.h index 61e2864a9..7db668df4 100644 --- a/src/modules/packagechooser/PackageModel.h +++ b/src/modules/packagechooser/PackageModel.h @@ -52,6 +52,12 @@ struct PackageItem */ PackageItem( const QString& id, const QString& package, const QString& name, const QString& description ); + PackageItem( const QString& id, + const QString& package, + const QString& name, + const QString& description, + const QString& screenshotPath ); + // TODO: implement this PackageItem fromAppStream( const QString& filename ); };