[libcalamares] Remove direct access to model internals

- This was just for the ResultsListWidget, which can also use
  normal role-based model access.
This commit is contained in:
Adriaan de Groot 2020-05-11 11:34:02 +02:00
parent 616fbb08f3
commit 0f5db0ba5e
2 changed files with 18 additions and 17 deletions

View File

@ -59,11 +59,6 @@ public:
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;

View File

@ -48,27 +48,29 @@ static void
createResultWidgets( QLayout* layout,
QList< ResultWidget* >& resultWidgets,
const Calamares::RequirementsModel& model,
std::function< bool( const Calamares::RequirementEntry& ) > predicate )
std::function< bool( const Calamares::RequirementsModel&, QModelIndex ) > predicate )
{
resultWidgets.clear();
resultWidgets.reserve( model.count() );
for ( auto i = 0; i < model.count(); i++ )
{
const auto& entry = model.getEntry( i );
if ( !predicate( entry ) )
const auto& index = model.index( i );
if ( !predicate( model, index ) )
{
resultWidgets.append( nullptr );
continue;
}
ResultWidget* ciw = new ResultWidget( entry.satisfied, entry.mandatory );
const bool is_satisfied = model.data( index, Calamares::RequirementsModel::Satisfied ).toBool();
const bool is_mandatory = model.data( index, Calamares::RequirementsModel::Mandatory ).toBool();
ResultWidget* ciw = new ResultWidget( is_satisfied, is_mandatory );
layout->addWidget( ciw );
ciw->setSizePolicy( QSizePolicy::Expanding, QSizePolicy::Preferred );
ciw->setAutoFillBackground( true );
QPalette pal( ciw->palette() );
QColor bgColor = pal.window().color();
int bgHue = ( entry.satisfied ) ? bgColor.hue() : ( entry.mandatory ) ? 0 : 60;
int bgHue = ( is_satisfied ) ? bgColor.hue() : ( is_mandatory ) ? 0 : 60;
bgColor.setHsv( bgHue, 64, bgColor.value() );
pal.setColor( QPalette::Window, bgColor );
ciw->setPalette( pal );
@ -114,7 +116,9 @@ ResultsListDialog::ResultsListDialog( const Calamares::RequirementsModel& model,
m_title = new QLabel( this );
createResultWidgets(
entriesLayout, m_resultWidgets, model, []( const Calamares::RequirementEntry& e ) { return e.hasDetails(); } );
entriesLayout, m_resultWidgets, model, []( const Calamares::RequirementsModel& m, QModelIndex i ) {
return m.data( i, Calamares::RequirementsModel::HasDetails ).toBool();
} );
QDialogButtonBox* buttonBox = new QDialogButtonBox( QDialogButtonBox::Close, Qt::Horizontal, this );
@ -130,7 +134,7 @@ ResultsListDialog::ResultsListDialog( const Calamares::RequirementsModel& model,
retranslate(); // Do it now to fill in the texts
}
ResultsListDialog::~ResultsListDialog() { }
ResultsListDialog::~ResultsListDialog() {}
void
ResultsListDialog::retranslate()
@ -140,10 +144,10 @@ ResultsListDialog::retranslate()
for ( auto i = 0; i < m_model.count(); i++ )
{
const auto& entry = m_model.getEntry( i );
if ( m_resultWidgets[ i ] )
{
m_resultWidgets[ i ]->setText( entry.enumerationText() );
m_resultWidgets[ i ]->setText(
m_model.data( m_model.index( i ), Calamares::RequirementsModel::Details ).toString() );
}
}
}
@ -180,7 +184,9 @@ ResultsListWidget::ResultsListWidget( const Calamares::RequirementsModel& model,
// all *mandatory* entries are satisfied (gives errors if not).
const bool requirementsSatisfied = m_model.satisfiedRequirements();
auto isUnSatisfied = []( const Calamares::RequirementEntry& e ) { return !e.satisfied; };
auto isUnSatisfied = []( const Calamares::RequirementsModel& m, QModelIndex i ) {
return !m.data( i, Calamares::RequirementsModel::Satisfied ).toBool();
};
createResultWidgets( entriesLayout, m_resultWidgets, model, isUnSatisfied );
@ -240,10 +246,10 @@ ResultsListWidget::retranslate()
{
for ( auto i = 0; i < m_model.count(); i++ )
{
const auto& entry = m_model.getEntry( i );
if ( m_resultWidgets[ i ] )
{
m_resultWidgets[ i ]->setText( entry.negatedText() );
m_resultWidgets[ i ]->setText(
m_model.data( m_model.index( i ), Calamares::RequirementsModel::NegatedText ).toString() );
}
}