[libcalamares] Make the requirements model more adaptable

- Either replace the list of results, or add to them
- Lock model while adding rows
main
Adriaan de Groot 5 years ago
parent 0f5db0ba5e
commit d87d714b8d

@ -24,9 +24,26 @@ namespace Calamares
void void
RequirementsModel::setRequirementsList( const Calamares::RequirementsList& requirements ) RequirementsModel::setRequirementsList( const Calamares::RequirementsList& requirements )
{ {
QMutexLocker l( &m_addLock );
emit beginResetModel(); emit beginResetModel();
m_requirements = requirements; 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 isUnSatisfied = []( const Calamares::RequirementEntry& e ) { return !e.satisfied; };
auto isMandatoryAndUnSatisfied = []( const Calamares::RequirementEntry& e ) { return e.mandatory && !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 satisfiedRequirementsChanged( m_satisfiedRequirements );
emit satisfiedMandatoryChanged( m_satisfiedMandatory ); emit satisfiedMandatoryChanged( m_satisfiedMandatory );
emit endResetModel();
} }
int int

@ -24,6 +24,7 @@
#include "DllMacro.h" #include "DllMacro.h"
#include <QAbstractListModel> #include <QAbstractListModel>
#include <QMutex>
namespace Calamares namespace Calamares
{ {
@ -56,10 +57,15 @@ public:
}; };
// No Q_ENUM because these are exposed through roleNames() // No Q_ENUM because these are exposed through roleNames()
///@brief Are all the requirements satisfied?
bool satisfiedRequirements() const { return m_satisfiedRequirements; } bool satisfiedRequirements() const { return m_satisfiedRequirements; }
///@brief Are all the **mandatory** requirements satisfied?
bool satisfiedMandatory() const { return m_satisfiedMandatory; } bool satisfiedMandatory() const { return m_satisfiedMandatory; }
///@brief Replace the entire list of requirements; resets the model
void setRequirementsList( const Calamares::RequirementsList& requirements ); 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; QVariant data( const QModelIndex& index, int role ) const override;
int rowCount( const QModelIndex& ) const override; int rowCount( const QModelIndex& ) const override;
@ -73,6 +79,10 @@ protected:
QHash< int, QByteArray > roleNames() const override; QHash< int, QByteArray > roleNames() const override;
private: private:
///@brief Implementation for {set,add}RequirementsList
void changeRequirementsList();
QMutex m_addLock;
RequirementsList m_requirements; RequirementsList m_requirements;
bool m_satisfiedRequirements = false; bool m_satisfiedRequirements = false;
bool m_satisfiedMandatory = false; bool m_satisfiedMandatory = false;

Loading…
Cancel
Save