From d87d714b8dc6e9d9ffc61ebf0462888e38a57ed2 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Mon, 11 May 2020 11:41:42 +0200 Subject: [PATCH] [libcalamares] Make the requirements model more adaptable - Either replace the list of results, or add to them - Lock model while adding rows --- .../modulesystem/RequirementsModel.cpp | 18 +++++++++++++++++- .../modulesystem/RequirementsModel.h | 10 ++++++++++ 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/src/libcalamares/modulesystem/RequirementsModel.cpp b/src/libcalamares/modulesystem/RequirementsModel.cpp index 4001d2d81..4a776b3eb 100644 --- a/src/libcalamares/modulesystem/RequirementsModel.cpp +++ b/src/libcalamares/modulesystem/RequirementsModel.cpp @@ -24,9 +24,26 @@ namespace Calamares void RequirementsModel::setRequirementsList( const Calamares::RequirementsList& requirements ) { + QMutexLocker l( &m_addLock ); emit beginResetModel(); m_requirements = requirements; + changeRequirementsList(); + emit endResetModel(); +} +void +RequirementsModel::addRequirementsList( const Calamares::RequirementsList& requirements ) +{ + QMutexLocker l( &m_addLock ); + emit beginResetModel(); + m_requirements.append( requirements ); + changeRequirementsList(); + emit endResetModel(); +} + +void +RequirementsModel::changeRequirementsList() +{ auto isUnSatisfied = []( const Calamares::RequirementEntry& e ) { return !e.satisfied; }; auto isMandatoryAndUnSatisfied = []( const Calamares::RequirementEntry& e ) { return e.mandatory && !e.satisfied; }; @@ -35,7 +52,6 @@ RequirementsModel::setRequirementsList( const Calamares::RequirementsList& requi emit satisfiedRequirementsChanged( m_satisfiedRequirements ); emit satisfiedMandatoryChanged( m_satisfiedMandatory ); - emit endResetModel(); } int diff --git a/src/libcalamares/modulesystem/RequirementsModel.h b/src/libcalamares/modulesystem/RequirementsModel.h index 7722707a3..e34dd02c2 100644 --- a/src/libcalamares/modulesystem/RequirementsModel.h +++ b/src/libcalamares/modulesystem/RequirementsModel.h @@ -24,6 +24,7 @@ #include "DllMacro.h" #include +#include namespace Calamares { @@ -56,10 +57,15 @@ public: }; // No Q_ENUM because these are exposed through roleNames() + ///@brief Are all the requirements satisfied? bool satisfiedRequirements() const { return m_satisfiedRequirements; } + ///@brief Are all the **mandatory** requirements satisfied? bool satisfiedMandatory() const { return m_satisfiedMandatory; } + ///@brief Replace the entire list of requirements; resets the model void setRequirementsList( const Calamares::RequirementsList& requirements ); + ///@brief Append some requirements; resets the model + void addRequirementsList( const Calamares::RequirementsList& requirements ); QVariant data( const QModelIndex& index, int role ) const override; int rowCount( const QModelIndex& ) const override; @@ -73,6 +79,10 @@ protected: QHash< int, QByteArray > roleNames() const override; private: + ///@brief Implementation for {set,add}RequirementsList + void changeRequirementsList(); + + QMutex m_addLock; RequirementsList m_requirements; bool m_satisfiedRequirements = false; bool m_satisfiedMandatory = false;