diff --git a/src/calamares/testmain.cpp b/src/calamares/testmain.cpp index 0845218eb..8dcf41faa 100644 --- a/src/calamares/testmain.cpp +++ b/src/calamares/testmain.cpp @@ -183,7 +183,7 @@ load_module( const ModuleConfig& moduleConfig ) cDebug() << "Module" << moduleName << "job-configuration:" << configFile; - Calamares::Module* module = Calamares::Module::fromDescriptor( descriptor, name, configFile, moduleDirectory ); + Calamares::Module* module = Calamares::moduleFromDescriptor( descriptor, name, configFile, moduleDirectory ); return module; } diff --git a/src/libcalamares/CMakeLists.txt b/src/libcalamares/CMakeLists.txt index 608768a97..91dce96cd 100644 --- a/src/libcalamares/CMakeLists.txt +++ b/src/libcalamares/CMakeLists.txt @@ -39,6 +39,10 @@ set( libSources # Modules modulesystem/InstanceKey.cpp + modulesystem/Module.cpp + modulesystem/Requirement.cpp + modulesystem/RequirementsChecker.cpp + modulesystem/RequirementsModel.cpp # Network service network/Manager.cpp diff --git a/src/libcalamares/PythonJobApi.cpp b/src/libcalamares/PythonJobApi.cpp index cf7984c87..ecca466fe 100644 --- a/src/libcalamares/PythonJobApi.cpp +++ b/src/libcalamares/PythonJobApi.cpp @@ -65,9 +65,9 @@ mount( const std::string& device_path, const std::string& options ) { return CalamaresUtils::Partition::mount( QString::fromStdString( device_path ), - QString::fromStdString( mount_point ), - QString::fromStdString( filesystem_name ), - QString::fromStdString( options ) ); + QString::fromStdString( mount_point ), + QString::fromStdString( filesystem_name ), + QString::fromStdString( options ) ); } diff --git a/src/libcalamares/modulesystem/InstanceKey.h b/src/libcalamares/modulesystem/InstanceKey.h index 495401903..724827330 100644 --- a/src/libcalamares/modulesystem/InstanceKey.h +++ b/src/libcalamares/modulesystem/InstanceKey.h @@ -94,8 +94,7 @@ private: } }; -QDebug& -operator <<( QDebug& s, const Calamares::ModuleSystem::InstanceKey& i ); +QDebug& operator<<( QDebug& s, const Calamares::ModuleSystem::InstanceKey& i ); } // namespace ModuleSystem } // namespace Calamares diff --git a/src/libcalamaresui/modulesystem/Module.cpp b/src/libcalamares/modulesystem/Module.cpp similarity index 64% rename from src/libcalamaresui/modulesystem/Module.cpp rename to src/libcalamares/modulesystem/Module.cpp index 35b1508f1..9620299ec 100644 --- a/src/libcalamaresui/modulesystem/Module.cpp +++ b/src/libcalamares/modulesystem/Module.cpp @@ -20,30 +20,18 @@ #include "Module.h" #include "CalamaresConfig.h" -#include "CppJobModule.h" -#include "ProcessJobModule.h" #include "Settings.h" -#include "ViewModule.h" #include "utils/Dirs.h" #include "utils/Logger.h" #include "utils/NamedEnum.h" #include "utils/Yaml.h" -#ifdef WITH_PYTHON -#include "PythonJobModule.h" -#endif - -#ifdef WITH_PYTHONQT -#include "PythonQtViewModule.h" -#endif - #include #include #include #include - static const char EMERGENCY[] = "emergency"; namespace Calamares @@ -66,111 +54,6 @@ Module::initFrom( const Calamares::ModuleSystem::Descriptor& moduleDescriptor, c } } -Module* -Module::fromDescriptor( const Calamares::ModuleSystem::Descriptor& moduleDescriptor, - const QString& instanceId, - const QString& configFileName, - const QString& moduleDirectory ) -{ - std::unique_ptr< Module > m; - - QString typeString = moduleDescriptor.value( "type" ).toString(); - QString intfString = moduleDescriptor.value( "interface" ).toString(); - - if ( typeString.isEmpty() || intfString.isEmpty() ) - { - cError() << "Bad module descriptor format" << instanceId; - return nullptr; - } - if ( ( typeString == "view" ) || ( typeString == "viewmodule" ) ) - { - if ( intfString == "qtplugin" ) - { - m.reset( new ViewModule() ); - } - else if ( intfString == "pythonqt" ) - { -#ifdef WITH_PYTHONQT - m.reset( new PythonQtViewModule() ); -#else - cError() << "PythonQt view modules are not supported in this version of Calamares."; -#endif - } - else - { - cError() << "Bad interface" << intfString << "for module type" << typeString; - } - } - else if ( typeString == "job" ) - { - if ( intfString == "qtplugin" ) - { - m.reset( new CppJobModule() ); - } - else if ( intfString == "process" ) - { - m.reset( new ProcessJobModule() ); - } - else if ( intfString == "python" ) - { -#ifdef WITH_PYTHON - m.reset( new PythonJobModule() ); -#else - cError() << "Python modules are not supported in this version of Calamares."; -#endif - } - else - { - cError() << "Bad interface" << intfString << "for module type" << typeString; - } - } - else - { - cError() << "Bad module type" << typeString; - } - - if ( !m ) - { - cError() << "Bad module type (" << typeString << ") or interface string (" << intfString << ") for module " - << instanceId; - return nullptr; - } - - QDir moduleDir( moduleDirectory ); - if ( moduleDir.exists() && moduleDir.isReadable() ) - { - m->m_directory = moduleDir.absolutePath(); - } - else - { - cError() << "Bad module directory" << moduleDirectory << "for" << instanceId; - return nullptr; - } - - m->initFrom( moduleDescriptor, instanceId ); - if ( !m->m_key.isValid() ) - { - cError() << "Module" << instanceId << "invalid ID"; - return nullptr; - } - - m->initFrom( moduleDescriptor ); - if ( !configFileName.isEmpty() ) - { - try - { - m->loadConfigurationFile( configFileName ); - } - catch ( YAML::Exception& e ) - { - cError() << "YAML parser error " << e.what(); - return nullptr; - } - } - return m.release(); -} - - static QStringList moduleConfigurationCandidates( bool assumeBuildDir, const QString& moduleName, const QString& configFileName ) { @@ -211,7 +94,8 @@ moduleConfigurationCandidates( bool assumeBuildDir, const QString& moduleName, c return paths; } -void Module::loadConfigurationFile( const QString& configFileName ) //throws YAML::Exception +void +Module::loadConfigurationFile( const QString& configFileName ) //throws YAML::Exception { QStringList configCandidates = moduleConfigurationCandidates( Settings::instance()->debugMode(), name(), configFileName ); diff --git a/src/libcalamaresui/modulesystem/Module.h b/src/libcalamares/modulesystem/Module.h similarity index 87% rename from src/libcalamaresui/modulesystem/Module.h rename to src/libcalamares/modulesystem/Module.h index 0891f8a25..ba4533fae 100644 --- a/src/libcalamaresui/modulesystem/Module.h +++ b/src/libcalamares/modulesystem/Module.h @@ -20,12 +20,12 @@ #ifndef CALAMARES_MODULE_H #define CALAMARES_MODULE_H -#include "Job.h" -#include "Requirement.h" #include "DllMacro.h" +#include "Job.h" #include "modulesystem/Descriptor.h" #include "modulesystem/InstanceKey.h" +#include "modulesystem/Requirement.h" #include #include @@ -33,6 +33,12 @@ namespace Calamares { +class Module; +Module* moduleFromDescriptor( const ModuleSystem::Descriptor& moduleDescriptor, + const QString& instanceId, + const QString& configFileName, + const QString& moduleDirectory ); + /** * @brief The Module class is a common supertype for Calamares modules. @@ -40,7 +46,7 @@ namespace Calamares * takes care of creating an object of the correct type starting from a module * descriptor structure. */ -class UIDLLEXPORT Module +class DLLEXPORT Module { public: /** @@ -68,18 +74,6 @@ public: PythonQt // Views only, available as enum even if PythonQt isn't used }; - /** - * @brief fromDescriptor creates a new Module object of the correct type. - * @param moduleDescriptor a module descriptor, already parsed into a variant map. - * @param instanceId the instance id of the new module instance. - * @param configFileName the name of the configuration file to read. - * @param moduleDirectory the path to the directory with this module's files. - * @return a pointer to an object of a subtype of Module. - */ - static Module* fromDescriptor( const ModuleSystem::Descriptor& moduleDescriptor, - const QString& instanceId, - const QString& configFileName, - const QString& moduleDirectory ); virtual ~Module(); /** @@ -193,6 +187,11 @@ private: QString m_directory; ModuleSystem::InstanceKey m_key; + + friend Module* Calamares::moduleFromDescriptor( const ModuleSystem::Descriptor& moduleDescriptor, + const QString& instanceId, + const QString& configFileName, + const QString& moduleDirectory ); }; } // namespace Calamares diff --git a/src/libcalamaresui/modulesystem/Requirement.cpp b/src/libcalamares/modulesystem/Requirement.cpp similarity index 100% rename from src/libcalamaresui/modulesystem/Requirement.cpp rename to src/libcalamares/modulesystem/Requirement.cpp diff --git a/src/libcalamaresui/modulesystem/Requirement.h b/src/libcalamares/modulesystem/Requirement.h similarity index 98% rename from src/libcalamaresui/modulesystem/Requirement.h rename to src/libcalamares/modulesystem/Requirement.h index 3f8d1a54b..da3cf29dd 100644 --- a/src/libcalamaresui/modulesystem/Requirement.h +++ b/src/libcalamares/modulesystem/Requirement.h @@ -18,6 +18,8 @@ #ifndef CALAMARES_REQUIREMENT_H #define CALAMARES_REQUIREMENT_H +#include "DllMacro.h" + #include #include #include diff --git a/src/libcalamaresui/modulesystem/RequirementsChecker.cpp b/src/libcalamares/modulesystem/RequirementsChecker.cpp similarity index 98% rename from src/libcalamaresui/modulesystem/RequirementsChecker.cpp rename to src/libcalamares/modulesystem/RequirementsChecker.cpp index 41281c9b9..97a4c912f 100644 --- a/src/libcalamaresui/modulesystem/RequirementsChecker.cpp +++ b/src/libcalamares/modulesystem/RequirementsChecker.cpp @@ -18,18 +18,16 @@ #include "RequirementsChecker.h" -#include "Module.h" -#include "Requirement.h" - +#include "modulesystem/Module.h" +#include "modulesystem/Requirement.h" #include "utils/Logger.h" -#include - #include #include #include #include +#include namespace Calamares { diff --git a/src/libcalamaresui/modulesystem/RequirementsChecker.h b/src/libcalamares/modulesystem/RequirementsChecker.h similarity index 97% rename from src/libcalamaresui/modulesystem/RequirementsChecker.h rename to src/libcalamares/modulesystem/RequirementsChecker.h index 2e1708016..450495dc1 100644 --- a/src/libcalamaresui/modulesystem/RequirementsChecker.h +++ b/src/libcalamares/modulesystem/RequirementsChecker.h @@ -18,14 +18,13 @@ #ifndef CALAMARES_REQUIREMENTSCHECKER_H #define CALAMARES_REQUIREMENTSCHECKER_H -#include "Requirement.h" +#include "modulesystem/Requirement.h" #include #include #include #include - namespace Calamares { @@ -44,7 +43,7 @@ public: RequirementsChecker( QVector< Module* > modules, QObject* parent = nullptr ); virtual ~RequirementsChecker() override; -public slots: +public Q_SLOTS: /// @brief Start checking all the requirements void run(); diff --git a/src/libcalamares/modulesystem/RequirementsModel.cpp b/src/libcalamares/modulesystem/RequirementsModel.cpp new file mode 100644 index 000000000..4001d2d81 --- /dev/null +++ b/src/libcalamares/modulesystem/RequirementsModel.cpp @@ -0,0 +1,81 @@ +/* === This file is part of Calamares - === + * + * Copyright 2019-2020, 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 "RequirementsModel.h" + +namespace Calamares +{ + +void +RequirementsModel::setRequirementsList( const Calamares::RequirementsList& requirements ) +{ + emit beginResetModel(); + m_requirements = requirements; + + auto isUnSatisfied = []( const Calamares::RequirementEntry& e ) { return !e.satisfied; }; + auto isMandatoryAndUnSatisfied = []( const Calamares::RequirementEntry& e ) { return e.mandatory && !e.satisfied; }; + + m_satisfiedRequirements = std::none_of( m_requirements.begin(), m_requirements.end(), isUnSatisfied ); + m_satisfiedMandatory = std::none_of( m_requirements.begin(), m_requirements.end(), isMandatoryAndUnSatisfied ); + + emit satisfiedRequirementsChanged( m_satisfiedRequirements ); + emit satisfiedMandatoryChanged( m_satisfiedMandatory ); + emit endResetModel(); +} + +int +RequirementsModel::rowCount( const QModelIndex& ) const +{ + return m_requirements.count(); +} + +QVariant +RequirementsModel::data( const QModelIndex& index, int role ) const +{ + const auto requirement = m_requirements.at( index.row() ); + + switch ( role ) + { + case Roles::Name: + return requirement.name; + case Roles::Details: + return requirement.enumerationText(); + case Roles::NegatedText: + return requirement.negatedText(); + case Roles::Satisfied: + return requirement.satisfied; + case Roles::Mandatory: + return requirement.mandatory; + default: + return QVariant(); + } +} + +QHash< int, QByteArray > +RequirementsModel::roleNames() const +{ + static QHash< int, QByteArray > roles; + roles[ Roles::Name ] = "name"; + roles[ Roles::Details ] = "details"; + roles[ Roles::NegatedText ] = "negatedText"; + roles[ Roles::Satisfied ] = "satisfied"; + roles[ Roles::Mandatory ] = "mandatory"; + return roles; +} + +} // namespace Calamares diff --git a/src/libcalamares/modulesystem/RequirementsModel.h b/src/libcalamares/modulesystem/RequirementsModel.h new file mode 100644 index 000000000..2acf785e7 --- /dev/null +++ b/src/libcalamares/modulesystem/RequirementsModel.h @@ -0,0 +1,81 @@ +/* === This file is part of Calamares - === + * + * Copyright 2019-2020, 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 CALAMARES_REQUIREMENTSMODEL_H +#define CALAMARES_REQUIREMENTSMODEL_H + +#include "Requirement.h" + +#include "DllMacro.h" + +#include + +namespace Calamares +{ + +class DLLEXPORT RequirementsModel : public QAbstractListModel +{ + Q_OBJECT + Q_PROPERTY( bool satisfiedRequirements READ satisfiedRequirements NOTIFY satisfiedRequirementsChanged FINAL ) + Q_PROPERTY( bool satisfiedMandatory READ satisfiedMandatory NOTIFY satisfiedMandatoryChanged FINAL ) + +public: + using QAbstractListModel::QAbstractListModel; + + enum Roles : short + { + Name, + Satisfied, + Mandatory, + Details, + NegatedText, + HasDetails + }; + // No Q_ENUM because these are exposed through roleNames() + + bool satisfiedRequirements() const { return m_satisfiedRequirements; } + bool satisfiedMandatory() const { return m_satisfiedMandatory; } + + const Calamares::RequirementEntry& getEntry( int index ) const + { + return m_requirements.at( index ); + } + + void setRequirementsList( const Calamares::RequirementsList& requirements ); + + QVariant data( const QModelIndex& index, int role ) const override; + int rowCount( const QModelIndex& ) const override; + int count() const { return m_requirements.count(); } + +signals: + void satisfiedRequirementsChanged( bool value ); + void satisfiedMandatoryChanged( bool value ); + +protected: + QHash< int, QByteArray > roleNames() const override; + +private: + Calamares::RequirementsList m_requirements; + bool m_satisfiedRequirements = false; + bool m_satisfiedMandatory = false; + +}; + +} // namespace Calamares + +#endif diff --git a/src/libcalamares/modulesystem/Tests.cpp b/src/libcalamares/modulesystem/Tests.cpp index e7301a0be..b1fab7ffc 100644 --- a/src/libcalamares/modulesystem/Tests.cpp +++ b/src/libcalamares/modulesystem/Tests.cpp @@ -138,4 +138,5 @@ ModuleSystemTests::testBadFromStringCases() QTEST_GUILESS_MAIN( ModuleSystemTests ) #include "utils/moc-warnings.h" + #include "Tests.moc" diff --git a/src/libcalamares/network/Manager.cpp b/src/libcalamares/network/Manager.cpp index 1d58efba9..6e8a1e93d 100644 --- a/src/libcalamares/network/Manager.cpp +++ b/src/libcalamares/network/Manager.cpp @@ -286,4 +286,5 @@ Manager::asynchronousGet( const QUrl& url, const CalamaresUtils::Network::Reques } // namespace CalamaresUtils #include "utils/moc-warnings.h" + #include "Manager.moc" diff --git a/src/libcalamares/network/Tests.cpp b/src/libcalamares/network/Tests.cpp index 830545b96..dc893a9c9 100644 --- a/src/libcalamares/network/Tests.cpp +++ b/src/libcalamares/network/Tests.cpp @@ -47,6 +47,7 @@ NetworkTests::testPing() using namespace CalamaresUtils::Network; Logger::setupLogLevel( Logger::LOGVERBOSE ); auto& nam = Manager::instance(); - auto canPing_www_kde_org = nam.synchronousPing( QUrl( "https://www.kde.org" ), RequestOptions( RequestOptions::FollowRedirect ) ); + auto canPing_www_kde_org + = nam.synchronousPing( QUrl( "https://www.kde.org" ), RequestOptions( RequestOptions::FollowRedirect ) ); QVERIFY( canPing_www_kde_org ); } diff --git a/src/libcalamares/utils/RAII.h b/src/libcalamares/utils/RAII.h index cff97bcef..4d8210a25 100644 --- a/src/libcalamares/utils/RAII.h +++ b/src/libcalamares/utils/RAII.h @@ -24,14 +24,14 @@ #include /// @brief Convenience to zero out and deleteLater of any QObject-derived-class -template< typename T > +template < typename T > struct cqDeleter { T*& p; ~cqDeleter() { - static_assert( std::is_base_of::value, "Not a QObject-class" ); + static_assert( std::is_base_of< QObject, T >::value, "Not a QObject-class" ); if ( p ) { p->deleteLater(); diff --git a/src/libcalamaresui/CMakeLists.txt b/src/libcalamaresui/CMakeLists.txt index c603ca22d..e813b0009 100644 --- a/src/libcalamaresui/CMakeLists.txt +++ b/src/libcalamaresui/CMakeLists.txt @@ -6,11 +6,9 @@ include_directories( ${CMAKE_SOURCE_DIR}/src/libcalamares ${CMAKE_BINARY_DIR}/sr set( calamaresui_SOURCES modulesystem/CppJobModule.cpp - modulesystem/Module.cpp + modulesystem/ModuleFactory.cpp modulesystem/ModuleManager.cpp modulesystem/ProcessJobModule.cpp - modulesystem/Requirement.cpp - modulesystem/RequirementsChecker.cpp modulesystem/ViewModule.cpp utils/CalamaresUtilsGui.cpp diff --git a/src/libcalamaresui/modulesystem/CppJobModule.h b/src/libcalamaresui/modulesystem/CppJobModule.h index d97443a8a..2fd82433c 100644 --- a/src/libcalamaresui/modulesystem/CppJobModule.h +++ b/src/libcalamaresui/modulesystem/CppJobModule.h @@ -21,8 +21,8 @@ #ifndef CALAMARES_CPPJOBMODULE_H #define CALAMARES_CPPJOBMODULE_H -#include "Module.h" #include "DllMacro.h" +#include "modulesystem/Module.h" class QPluginLoader; @@ -42,12 +42,16 @@ protected: void initFrom( const QVariantMap& moduleDescriptor ) override; private: - friend class Module; //so only the superclass can instantiate explicit CppJobModule(); virtual ~CppJobModule() override; QPluginLoader* m_loader; job_ptr m_job; + + friend Module* Calamares::moduleFromDescriptor( const ModuleSystem::Descriptor& moduleDescriptor, + const QString& instanceId, + const QString& configFileName, + const QString& moduleDirectory ); }; } // namespace Calamares diff --git a/src/libcalamaresui/modulesystem/ModuleFactory.cpp b/src/libcalamaresui/modulesystem/ModuleFactory.cpp new file mode 100644 index 000000000..f3b46eab7 --- /dev/null +++ b/src/libcalamaresui/modulesystem/ModuleFactory.cpp @@ -0,0 +1,154 @@ +/* === This file is part of Calamares - === + * + * Copyright 2014-2015, Teo Mrnjavac + * Copyright 2017-2018, 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 "ModuleFactory.h" + +#include "CalamaresConfig.h" +#include "CppJobModule.h" +#include "ProcessJobModule.h" +#include "ViewModule.h" + +#include "utils/Dirs.h" +#include "utils/Logger.h" +#include "utils/NamedEnum.h" +#include "utils/Yaml.h" + +#ifdef WITH_PYTHON +#include "PythonJobModule.h" +#endif + +#ifdef WITH_PYTHONQT +#include "PythonQtViewModule.h" +#endif + +#include +#include +#include +#include + + +namespace Calamares +{ + +Module* +moduleFromDescriptor( const Calamares::ModuleSystem::Descriptor& moduleDescriptor, + const QString& instanceId, + const QString& configFileName, + const QString& moduleDirectory ) +{ + std::unique_ptr< Module > m; + + QString typeString = moduleDescriptor.value( "type" ).toString(); + QString intfString = moduleDescriptor.value( "interface" ).toString(); + + if ( typeString.isEmpty() || intfString.isEmpty() ) + { + cError() << "Bad module descriptor format" << instanceId; + return nullptr; + } + if ( ( typeString == "view" ) || ( typeString == "viewmodule" ) ) + { + if ( intfString == "qtplugin" ) + { + m.reset( new ViewModule() ); + } + else if ( intfString == "pythonqt" ) + { +#ifdef WITH_PYTHONQT + m.reset( new PythonQtViewModule() ); +#else + cError() << "PythonQt view modules are not supported in this version of Calamares."; +#endif + } + else + { + cError() << "Bad interface" << intfString << "for module type" << typeString; + } + } + else if ( typeString == "job" ) + { + if ( intfString == "qtplugin" ) + { + m.reset( new CppJobModule() ); + } + else if ( intfString == "process" ) + { + m.reset( new ProcessJobModule() ); + } + else if ( intfString == "python" ) + { +#ifdef WITH_PYTHON + m.reset( new PythonJobModule() ); +#else + cError() << "Python modules are not supported in this version of Calamares."; +#endif + } + else + { + cError() << "Bad interface" << intfString << "for module type" << typeString; + } + } + else + { + cError() << "Bad module type" << typeString; + } + + if ( !m ) + { + cError() << "Bad module type (" << typeString << ") or interface string (" << intfString << ") for module " + << instanceId; + return nullptr; + } + + QDir moduleDir( moduleDirectory ); + if ( moduleDir.exists() && moduleDir.isReadable() ) + { + m->m_directory = moduleDir.absolutePath(); + } + else + { + cError() << "Bad module directory" << moduleDirectory << "for" << instanceId; + return nullptr; + } + + m->initFrom( moduleDescriptor, instanceId ); + if ( !m->m_key.isValid() ) + { + cError() << "Module" << instanceId << "invalid ID"; + return nullptr; + } + + m->initFrom( moduleDescriptor ); + if ( !configFileName.isEmpty() ) + { + try + { + m->loadConfigurationFile( configFileName ); + } + catch ( YAML::Exception& e ) + { + cError() << "YAML parser error " << e.what(); + return nullptr; + } + } + return m.release(); +} + + +} // namespace Calamares diff --git a/src/libcalamaresui/modulesystem/ModuleFactory.h b/src/libcalamaresui/modulesystem/ModuleFactory.h new file mode 100644 index 000000000..8184967d2 --- /dev/null +++ b/src/libcalamaresui/modulesystem/ModuleFactory.h @@ -0,0 +1,47 @@ +/* === This file is part of Calamares - === + * + * Copyright 2014-2015, Teo Mrnjavac + * Copyright 2017, 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 CALAMARES_MODULEFACTORY_H +#define CALAMARES_MODULEFACTORY_H + +#include "DllMacro.h" + +#include "modulesystem/Descriptor.h" +#include "modulesystem/Module.h" + +#include + +namespace Calamares +{ + +/** + * @brief fromDescriptor creates a new Module object of the correct type. + * @param moduleDescriptor a module descriptor, already parsed into a variant map. + * @param instanceId the instance id of the new module instance. + * @param configFileName the name of the configuration file to read. + * @param moduleDirectory the path to the directory with this module's files. + * @return a pointer to an object of a subtype of Module. + */ +UIDLLEXPORT Module* moduleFromDescriptor( const ModuleSystem::Descriptor& moduleDescriptor, + const QString& instanceId, + const QString& configFileName, + const QString& moduleDirectory ); +} // namespace Calamares + +#endif // CALAMARES_MODULEFACTORY_H diff --git a/src/libcalamaresui/modulesystem/ModuleManager.cpp b/src/libcalamaresui/modulesystem/ModuleManager.cpp index f88d5999d..8d4b2342f 100644 --- a/src/libcalamaresui/modulesystem/ModuleManager.cpp +++ b/src/libcalamaresui/modulesystem/ModuleManager.cpp @@ -19,11 +19,11 @@ #include "ModuleManager.h" -#include "Module.h" -#include "RequirementsChecker.h" -#include "Settings.h" #include "ViewManager.h" +#include "Settings.h" +#include "modulesystem/Module.h" +#include "modulesystem/RequirementsChecker.h" #include "utils/Logger.h" #include "utils/Yaml.h" #include "viewpages/ExecutionViewStep.h" @@ -285,10 +285,11 @@ ModuleManager::loadModules() } else { - thisModule = Module::fromDescriptor( descriptor, - instanceKey.id(), - configFileName, - m_moduleDirectoriesByModuleName.value( instanceKey.module() ) ); + thisModule + = Calamares::moduleFromDescriptor( descriptor, + instanceKey.id(), + configFileName, + m_moduleDirectoriesByModuleName.value( instanceKey.module() ) ); if ( !thisModule ) { cError() << "Module" << instanceKey.toString() << "cannot be created from descriptor" diff --git a/src/libcalamaresui/modulesystem/ModuleManager.h b/src/libcalamaresui/modulesystem/ModuleManager.h index be485c01d..fdb63cd87 100644 --- a/src/libcalamaresui/modulesystem/ModuleManager.h +++ b/src/libcalamaresui/modulesystem/ModuleManager.h @@ -22,8 +22,7 @@ #include "modulesystem/Descriptor.h" #include "modulesystem/InstanceKey.h" - -#include "Requirement.h" +#include "modulesystem/Requirement.h" #include #include diff --git a/src/libcalamaresui/modulesystem/ProcessJobModule.h b/src/libcalamaresui/modulesystem/ProcessJobModule.h index da2badbd0..87c6e2da8 100644 --- a/src/libcalamaresui/modulesystem/ProcessJobModule.h +++ b/src/libcalamaresui/modulesystem/ProcessJobModule.h @@ -20,9 +20,8 @@ #ifndef CALAMARES_PROCESSJOBMODULE_H #define CALAMARES_PROCESSJOBMODULE_H -#include "Module.h" - #include "DllMacro.h" +#include "modulesystem/Module.h" #include @@ -42,7 +41,6 @@ protected: void initFrom( const QVariantMap& moduleDescriptor ) override; private: - friend class Module; explicit ProcessJobModule(); virtual ~ProcessJobModule() override; @@ -51,6 +49,11 @@ private: std::chrono::seconds m_secondsTimeout; bool m_runInChroot; job_ptr m_job; + + friend Module* Calamares::moduleFromDescriptor( const ModuleSystem::Descriptor& moduleDescriptor, + const QString& instanceId, + const QString& configFileName, + const QString& moduleDirectory ); }; } // namespace Calamares diff --git a/src/libcalamaresui/modulesystem/PythonJobModule.h b/src/libcalamaresui/modulesystem/PythonJobModule.h index 295ab5942..85f25ab74 100644 --- a/src/libcalamaresui/modulesystem/PythonJobModule.h +++ b/src/libcalamaresui/modulesystem/PythonJobModule.h @@ -19,9 +19,8 @@ #ifndef CALAMARES_PYTHONJOBMODULE_H #define CALAMARES_PYTHONJOBMODULE_H -#include "Module.h" - #include "DllMacro.h" +#include "modulesystem/Module.h" namespace Calamares { @@ -39,13 +38,17 @@ protected: void initFrom( const QVariantMap& moduleDescriptor ) override; private: - friend class Module; explicit PythonJobModule(); virtual ~PythonJobModule() override; QString m_scriptFileName; QString m_workingPath; job_ptr m_job; + + friend Module* Calamares::moduleFromDescriptor( const ModuleSystem::Descriptor& moduleDescriptor, + const QString& instanceId, + const QString& configFileName, + const QString& moduleDirectory ); }; } // namespace Calamares diff --git a/src/libcalamaresui/modulesystem/PythonQtViewModule.h b/src/libcalamaresui/modulesystem/PythonQtViewModule.h index 33b8d041b..64cc0f8a9 100644 --- a/src/libcalamaresui/modulesystem/PythonQtViewModule.h +++ b/src/libcalamaresui/modulesystem/PythonQtViewModule.h @@ -19,8 +19,8 @@ #ifndef CALAMARES_PYTHONQTVIEWMODULE_H #define CALAMARES_PYTHONQTVIEWMODULE_H -#include "Module.h" #include "DllMacro.h" +#include "Module.h" namespace Calamares { @@ -40,7 +40,6 @@ protected: void initFrom( const QVariantMap& moduleDescriptor ) override; private: - friend class Module; //so only the superclass can instantiate explicit PythonQtViewModule(); virtual ~PythonQtViewModule(); @@ -48,6 +47,11 @@ private: QString m_scriptFileName; QString m_workingPath; + + friend Module* Calamares::moduleFromDescriptor( const ModuleSystem::Descriptor& moduleDescriptor, + const QString& instanceId, + const QString& configFileName, + const QString& moduleDirectory ); }; } // namespace Calamares diff --git a/src/libcalamaresui/modulesystem/ViewModule.h b/src/libcalamaresui/modulesystem/ViewModule.h index c1ee8ff69..1d24ca811 100644 --- a/src/libcalamaresui/modulesystem/ViewModule.h +++ b/src/libcalamaresui/modulesystem/ViewModule.h @@ -20,8 +20,8 @@ #ifndef CALAMARES_VIEWMODULE_H #define CALAMARES_VIEWMODULE_H -#include "Module.h" #include "DllMacro.h" +#include "modulesystem/Module.h" class QPluginLoader; @@ -45,12 +45,16 @@ protected: void initFrom( const QVariantMap& moduleDescriptor ) override; private: - friend class Module; //so only the superclass can instantiate explicit ViewModule(); virtual ~ViewModule() override; QPluginLoader* m_loader; ViewStep* m_viewStep = nullptr; + + friend Module* Calamares::moduleFromDescriptor( const ModuleSystem::Descriptor& moduleDescriptor, + const QString& instanceId, + const QString& configFileName, + const QString& moduleDirectory ); }; } // namespace Calamares diff --git a/src/modules/welcome/Config.cpp b/src/modules/welcome/Config.cpp index 43987f4b2..1c2b17c38 100644 --- a/src/modules/welcome/Config.cpp +++ b/src/modules/welcome/Config.cpp @@ -23,71 +23,15 @@ #include "utils/Logger.h" #include "utils/Retranslator.h" -void -RequirementsModel::setRequirementsList( const Calamares::RequirementsList& requirements ) -{ - CALAMARES_RETRANSLATE_SLOT( &RequirementsModel::retranslate ) - - emit beginResetModel(); - m_requirements = requirements; - - auto isUnSatisfied = []( const Calamares::RequirementEntry& e ) { return !e.satisfied; }; - auto isMandatoryAndUnSatisfied = []( const Calamares::RequirementEntry& e ) { return e.mandatory && !e.satisfied; }; - - m_satisfiedRequirements = std::none_of( m_requirements.begin(), m_requirements.end(), isUnSatisfied ); - m_satisfiedMandatory = std::none_of( m_requirements.begin(), m_requirements.end(), isMandatoryAndUnSatisfied ); - - emit satisfiedRequirementsChanged( m_satisfiedRequirements ); - emit satisfiedMandatoryChanged(); - emit endResetModel(); -} - -int -RequirementsModel::rowCount( const QModelIndex& ) const -{ - return m_requirements.count(); -} - -QVariant -RequirementsModel::data( const QModelIndex& index, int role ) const -{ - const auto requirement = m_requirements.at( index.row() ); - - switch ( role ) - { - case Roles::Name: - return requirement.name; - case Roles::Details: - return requirement.enumerationText(); - case Roles::NegatedText: - return requirement.negatedText(); - case Roles::Satisfied: - return requirement.satisfied; - case Roles::Mandatory: - return requirement.mandatory; - default: - return QVariant(); - } -} - -QHash< int, QByteArray > -RequirementsModel::roleNames() const -{ - static QHash< int, QByteArray > roles; - roles[ Roles::Name ] = "name"; - roles[ Roles::Details ] = "details"; - roles[ Roles::NegatedText ] = "negatedText"; - roles[ Roles::Satisfied ] = "satisfied"; - roles[ Roles::Mandatory ] = "mandatory"; - return roles; -} - Config::Config( QObject* parent ) : QObject( parent ) - , m_requirementsModel( new RequirementsModel( this ) ) + , m_requirementsModel( new Calamares::RequirementsModel( this ) ) , m_languages( CalamaresUtils::Locale::availableTranslations() ) { - connect( m_requirementsModel, &RequirementsModel::satisfiedRequirementsChanged, this, &Config::setIsNextEnabled ); + connect( m_requirementsModel, + &Calamares::RequirementsModel::satisfiedRequirementsChanged, + this, + &Config::setIsNextEnabled ); initLanguages(); @@ -98,9 +42,46 @@ void Config::retranslate() { m_genericWelcomeMessage = genericWelcomeMessage().arg( *Calamares::Branding::VersionedName ); - emit genericWelcomeMessageChanged(); + emit genericWelcomeMessageChanged( m_genericWelcomeMessage ); - m_requirementsModel->retranslate(); + if ( !m_requirementsModel->satisfiedRequirements() ) + { + QString message; + const bool setup = Calamares::Settings::instance()->isSetupMode(); + + if ( !m_requirementsModel->satisfiedMandatory() ) + { + message = setup ? tr( "This computer does not satisfy the minimum " + "requirements for setting up %1.
" + "Setup cannot continue. " + "Details..." ) + : tr( "This computer does not satisfy the minimum " + "requirements for installing %1.
" + "Installation cannot continue. " + "Details..." ); + } + else + { + message = setup ? tr( "This computer does not satisfy some of the " + "recommended requirements for setting up %1.
" + "Setup can continue, but some features " + "might be disabled." ) + : tr( "This computer does not satisfy some of the " + "recommended requirements for installing %1.
" + "Installation can continue, but some features " + "might be disabled." ); + } + + m_warningMessage = message.arg( *Calamares::Branding::ShortVersionedName ); + } + else + { + m_warningMessage = tr( "This program will ask you some questions and " + "set up %2 on your computer." ) + .arg( *Calamares::Branding::ProductName ); + } + + emit warningMessageChanged( m_warningMessage ); } CalamaresUtils::Locale::LabelModel* @@ -178,7 +159,7 @@ Config::setLanguageIcon( const QString& languageIcon ) } void -Config::setLocaleIndex( const int& index ) +Config::setLocaleIndex( int index ) { if ( index == m_localeIndex || index > CalamaresUtils::Locale::availableTranslations()->rowCount( QModelIndex() ) || index < 0 ) @@ -189,7 +170,7 @@ Config::setLocaleIndex( const int& index ) m_localeIndex = index; const auto& selectedLocale = m_languages->locale( m_localeIndex ).locale(); - cDebug() << "Selected locale" << selectedLocale; + cDebug() << "Index" << index << "Selected locale" << selectedLocale; QLocale::setDefault( selectedLocale ); CalamaresUtils::installTranslator( selectedLocale, Calamares::Branding::instance()->translationsDirectory() ); @@ -197,14 +178,14 @@ Config::setLocaleIndex( const int& index ) emit localeIndexChanged( m_localeIndex ); } -RequirementsModel& +Calamares::RequirementsModel& Config::requirementsModel() const { return *m_requirementsModel; } void -Config::setIsNextEnabled( const bool& isNextEnabled ) +Config::setIsNextEnabled( bool isNextEnabled ) { m_isNextEnabled = isNextEnabled; emit isNextEnabledChanged( m_isNextEnabled ); @@ -262,51 +243,8 @@ Config::setSupportUrl( const QString& url ) emit supportUrlChanged(); } -void -RequirementsModel::retranslate() -{ - if ( !m_satisfiedRequirements ) - { - QString message; - const bool setup = Calamares::Settings::instance()->isSetupMode(); - - if ( !m_satisfiedMandatory ) - { - message = setup ? tr( "This computer does not satisfy the minimum " - "requirements for setting up %1.
" - "Setup cannot continue. " - "Details..." ) - : tr( "This computer does not satisfy the minimum " - "requirements for installing %1.
" - "Installation cannot continue. " - "Details..." ); - } - else - { - message = setup ? tr( "This computer does not satisfy some of the " - "recommended requirements for setting up %1.
" - "Setup can continue, but some features " - "might be disabled." ) - : tr( "This computer does not satisfy some of the " - "recommended requirements for installing %1.
" - "Installation can continue, but some features " - "might be disabled." ); - } - - m_warningMessage = message.arg( *Calamares::Branding::ShortVersionedName ); - } - else - { - m_warningMessage = tr( "This program will ask you some questions and " - "set up %2 on your computer." ) - .arg( *Calamares::Branding::ProductName ); - } - - emit warningMessageChanged(); -} - QString -Config::genericWelcomeMessage() +Config::genericWelcomeMessage() const { QString message; @@ -325,3 +263,9 @@ Config::genericWelcomeMessage() return message; } + +QString +Config::warningMessage() const +{ + return m_warningMessage; +} diff --git a/src/modules/welcome/Config.h b/src/modules/welcome/Config.h index 389a45eec..80e4eeea9 100644 --- a/src/modules/welcome/Config.h +++ b/src/modules/welcome/Config.h @@ -19,79 +19,18 @@ #ifndef WELCOME_CONFIG_H #define WELCOME_CONFIG_H -#include "modulesystem/Requirement.h" #include "locale/LabelModel.h" +#include "modulesystem/Requirement.h" +#include "modulesystem/RequirementsModel.h" #include #include -// TODO: move this (and modulesystem/Requirement) to libcalamares -class RequirementsModel : public QAbstractListModel -{ - Q_OBJECT - Q_PROPERTY( bool satisfiedRequirements READ satisfiedRequirements NOTIFY satisfiedRequirementsChanged FINAL ) - Q_PROPERTY( bool satisfiedMandatory READ satisfiedMandatory NOTIFY satisfiedMandatoryChanged FINAL ) - Q_PROPERTY( QString warningMessage READ warningMessage NOTIFY warningMessageChanged FINAL ) - -public: - using QAbstractListModel::QAbstractListModel; - - enum Roles : short - { - Name, - Satisfied, - Mandatory, - Details, - NegatedText, - HasDetails - }; - - bool satisfiedRequirements() const { return m_satisfiedRequirements; } - - bool satisfiedMandatory() const { return m_satisfiedMandatory; } - - const Calamares::RequirementEntry& getEntry( const int& index ) const - { - if ( index > count() || index < 0 ) - { - return *( new Calamares::RequirementEntry() ); - } - - return m_requirements.at( index ); - } - - void setRequirementsList( const Calamares::RequirementsList& requirements ); - int rowCount( const QModelIndex& ) const override; - int count() const { return m_requirements.count(); } - - QString warningMessage() const { return m_warningMessage; } - - void retranslate(); - - QVariant data( const QModelIndex& index, int role ) const override; - -protected: - QHash< int, QByteArray > roleNames() const override; - -private: - Calamares::RequirementsList m_requirements; - bool m_satisfiedRequirements = false; - bool m_satisfiedMandatory = false; - - QString m_warningMessage; - -signals: - void satisfiedRequirementsChanged( bool value ); - void satisfiedMandatoryChanged(); - void warningMessageChanged(); -}; - - class Config : public QObject { Q_OBJECT Q_PROPERTY( CalamaresUtils::Locale::LabelModel* languagesModel READ languagesModel CONSTANT FINAL ) - Q_PROPERTY( RequirementsModel* requirementsModel MEMBER m_requirementsModel CONSTANT FINAL ) + Q_PROPERTY( Calamares::RequirementsModel* requirementsModel MEMBER m_requirementsModel CONSTANT FINAL ) Q_PROPERTY( QString languageIcon READ languageIcon CONSTANT FINAL ) @@ -99,6 +38,7 @@ class Config : public QObject Q_PROPERTY( int localeIndex READ localeIndex WRITE setLocaleIndex NOTIFY localeIndexChanged ) Q_PROPERTY( QString genericWelcomeMessage MEMBER m_genericWelcomeMessage NOTIFY genericWelcomeMessageChanged FINAL ) + Q_PROPERTY( QString warningMessage READ warningMessage NOTIFY warningMessageChanged FINAL ) Q_PROPERTY( QString supportUrl MEMBER m_supportUrl NOTIFY supportUrlChanged FINAL ) Q_PROPERTY( QString knownIssuesUrl MEMBER m_knownIssuesUrl NOTIFY knownIssuesUrlChanged FINAL ) @@ -109,13 +49,17 @@ class Config : public QObject public: Config( QObject* parent = nullptr ); + + Calamares::RequirementsModel& requirementsModel() const; + void setCountryCode( const QString& countryCode ); + + QString languageIcon() const; void setLanguageIcon( const QString& languageIcon ); - RequirementsModel& requirementsModel() const; - void setIsNextEnabled( const bool& isNextEnabled ); + void setIsNextEnabled( bool isNextEnabled ); - void setLocaleIndex( const int& index ); + void setLocaleIndex( int index ); int localeIndex() const { return m_localeIndex; } QString supportUrl() const; @@ -130,40 +74,44 @@ public: QString donateUrl() const; void setDonateUrl( const QString& url ); - QString genericWelcomeMessage(); - + QString genericWelcomeMessage() const; + QString warningMessage() const; public slots: CalamaresUtils::Locale::LabelModel* languagesModel() const; void retranslate(); - QString languageIcon() const; - -private: - void initLanguages(); - QVariantMap m_configurationMap; - RequirementsModel* m_requirementsModel; - QString m_languageIcon; - QString m_countryCode; - int m_localeIndex = 0; - bool m_isNextEnabled = false; - CalamaresUtils::Locale::LabelModel* m_languages; - - QString m_genericWelcomeMessage; - - QString m_supportUrl; - QString m_knownIssuesUrl; - QString m_releaseNotesUrl; - QString m_donateUrl; signals: void countryCodeChanged( QString countryCode ); void localeIndexChanged( int localeIndex ); void isNextEnabledChanged( bool isNextEnabled ); - void genericWelcomeMessageChanged(); + + void genericWelcomeMessageChanged( QString message ); + void warningMessageChanged( QString message ); + void supportUrlChanged(); void knownIssuesUrlChanged(); void releaseNotesUrlChanged(); void donateUrlChanged(); + +private: + void initLanguages(); + + Calamares::RequirementsModel* m_requirementsModel; + CalamaresUtils::Locale::LabelModel* m_languages; + + QString m_languageIcon; + QString m_countryCode; + int m_localeIndex = 0; + bool m_isNextEnabled = false; + + QString m_genericWelcomeMessage; + QString m_warningMessage; + + QString m_supportUrl; + QString m_knownIssuesUrl; + QString m_releaseNotesUrl; + QString m_donateUrl; }; #endif diff --git a/src/modules/welcome/WelcomeViewStep.cpp b/src/modules/welcome/WelcomeViewStep.cpp index 848d319db..3a0bef18f 100644 --- a/src/modules/welcome/WelcomeViewStep.cpp +++ b/src/modules/welcome/WelcomeViewStep.cpp @@ -47,6 +47,7 @@ WelcomeViewStep::WelcomeViewStep( QObject* parent ) // the instance of the qqc2 or qwidgets page m_widget = new WelcomePage( m_conf ); + connect( m_conf, &Config::localeIndexChanged, m_widget, &WelcomePage::externallySelectedLanguage ); } WelcomeViewStep::~WelcomeViewStep() diff --git a/src/modules/welcome/checker/CheckerContainer.cpp b/src/modules/welcome/checker/CheckerContainer.cpp index 0e790fbb4..10da425ab 100644 --- a/src/modules/welcome/checker/CheckerContainer.cpp +++ b/src/modules/welcome/checker/CheckerContainer.cpp @@ -31,7 +31,7 @@ #include -CheckerContainer::CheckerContainer( const RequirementsModel &model, QWidget* parent ) +CheckerContainer::CheckerContainer( const Calamares::RequirementsModel &model, QWidget* parent ) : QWidget( parent ) , m_waitingWidget( new WaitingWidget( QString(), this ) ) , m_checkerWidget( nullptr ) diff --git a/src/modules/welcome/checker/CheckerContainer.h b/src/modules/welcome/checker/CheckerContainer.h index f38f198ea..5ebefa36e 100644 --- a/src/modules/welcome/checker/CheckerContainer.h +++ b/src/modules/welcome/checker/CheckerContainer.h @@ -40,7 +40,7 @@ class CheckerContainer : public QWidget { Q_OBJECT public: - explicit CheckerContainer(const RequirementsModel &model, QWidget* parent = nullptr ); + explicit CheckerContainer(const Calamares::RequirementsModel &model, QWidget* parent = nullptr ); virtual ~CheckerContainer(); bool verdict() const; @@ -58,7 +58,7 @@ protected: bool m_verdict; private: - const RequirementsModel &m_model; + const Calamares::RequirementsModel &m_model; } ; #endif diff --git a/src/modules/welcome/checker/ResultsListWidget.cpp b/src/modules/welcome/checker/ResultsListWidget.cpp index 275010b2f..c16cda4c4 100644 --- a/src/modules/welcome/checker/ResultsListWidget.cpp +++ b/src/modules/welcome/checker/ResultsListWidget.cpp @@ -47,7 +47,7 @@ static void createResultWidgets( QLayout* layout, QList< ResultWidget* >& resultWidgets, - const RequirementsModel &model, + const Calamares::RequirementsModel &model, std::function< bool( const Calamares::RequirementEntry& ) > predicate ) { @@ -94,18 +94,18 @@ public: * The list must continue to exist for the lifetime of the dialog, * or UB happens. */ - ResultsListDialog( const RequirementsModel& model, QWidget* parent ); + ResultsListDialog( const Calamares::RequirementsModel& model, QWidget* parent ); virtual ~ResultsListDialog(); private: QLabel* m_title; QList< ResultWidget* > m_resultWidgets; ///< One widget for each entry with details available - const RequirementsModel& m_model; + const Calamares::RequirementsModel& m_model; void retranslate(); }; -ResultsListDialog::ResultsListDialog( const RequirementsModel& model, QWidget* parent) +ResultsListDialog::ResultsListDialog( const Calamares::RequirementsModel& model, QWidget* parent) : QDialog( parent ) , m_model( model ) { @@ -151,7 +151,7 @@ ResultsListDialog::retranslate() } -ResultsListWidget::ResultsListWidget( const RequirementsModel &model, QWidget* parent ) +ResultsListWidget::ResultsListWidget( const Calamares::RequirementsModel &model, QWidget* parent ) : QWidget( parent ) , m_model( model ) { diff --git a/src/modules/welcome/checker/ResultsListWidget.h b/src/modules/welcome/checker/ResultsListWidget.h index eb1bdb611..05a8adfa4 100644 --- a/src/modules/welcome/checker/ResultsListWidget.h +++ b/src/modules/welcome/checker/ResultsListWidget.h @@ -30,7 +30,7 @@ class ResultsListWidget : public QWidget { Q_OBJECT public: - explicit ResultsListWidget(const RequirementsModel &model, QWidget* parent); + explicit ResultsListWidget(const Calamares::RequirementsModel &model, QWidget* parent); private: /// @brief A link in the explanatory text has been clicked @@ -38,7 +38,7 @@ private: void retranslate(); QLabel* m_explanation = nullptr; ///< Explanatory text above the list, with link - const RequirementsModel &m_model; + const Calamares::RequirementsModel &m_model; QList< ResultWidget* > m_resultWidgets; ///< One widget for each unsatisfied entry };