From 735d5d2683454cc84cd77f57f0f92e7f517f9e6b Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Fri, 2 Aug 2019 10:57:12 +0200 Subject: [PATCH] [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 + + + + + + + + + + +