[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 satisfiedRequirements() const { return m_satisfiedRequirements; }
bool satisfiedMandatory() const { return m_satisfiedMandatory; } bool satisfiedMandatory() const { return m_satisfiedMandatory; }
const Calamares::RequirementEntry& getEntry( int index ) const
{
return m_requirements.at( index );
}
void setRequirementsList( const Calamares::RequirementsList& requirements ); void setRequirementsList( const Calamares::RequirementsList& requirements );
QVariant data( const QModelIndex& index, int role ) const override; QVariant data( const QModelIndex& index, int role ) const override;

View file

@ -48,27 +48,29 @@ static void
createResultWidgets( QLayout* layout, createResultWidgets( QLayout* layout,
QList< ResultWidget* >& resultWidgets, QList< ResultWidget* >& resultWidgets,
const Calamares::RequirementsModel& model, const Calamares::RequirementsModel& model,
std::function< bool( const Calamares::RequirementEntry& ) > predicate ) std::function< bool( const Calamares::RequirementsModel&, QModelIndex ) > predicate )
{ {
resultWidgets.clear(); resultWidgets.clear();
resultWidgets.reserve( model.count() ); resultWidgets.reserve( model.count() );
for ( auto i = 0; i < model.count(); i++ ) for ( auto i = 0; i < model.count(); i++ )
{ {
const auto& entry = model.getEntry( i ); const auto& index = model.index( i );
if ( !predicate( entry ) ) if ( !predicate( model, index ) )
{ {
resultWidgets.append( nullptr ); resultWidgets.append( nullptr );
continue; 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 ); layout->addWidget( ciw );
ciw->setSizePolicy( QSizePolicy::Expanding, QSizePolicy::Preferred ); ciw->setSizePolicy( QSizePolicy::Expanding, QSizePolicy::Preferred );
ciw->setAutoFillBackground( true ); ciw->setAutoFillBackground( true );
QPalette pal( ciw->palette() ); QPalette pal( ciw->palette() );
QColor bgColor = pal.window().color(); 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() ); bgColor.setHsv( bgHue, 64, bgColor.value() );
pal.setColor( QPalette::Window, bgColor ); pal.setColor( QPalette::Window, bgColor );
ciw->setPalette( pal ); ciw->setPalette( pal );
@ -114,7 +116,9 @@ ResultsListDialog::ResultsListDialog( const Calamares::RequirementsModel& model,
m_title = new QLabel( this ); m_title = new QLabel( this );
createResultWidgets( 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 ); 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 retranslate(); // Do it now to fill in the texts
} }
ResultsListDialog::~ResultsListDialog() { } ResultsListDialog::~ResultsListDialog() {}
void void
ResultsListDialog::retranslate() ResultsListDialog::retranslate()
@ -140,10 +144,10 @@ ResultsListDialog::retranslate()
for ( auto i = 0; i < m_model.count(); i++ ) for ( auto i = 0; i < m_model.count(); i++ )
{ {
const auto& entry = m_model.getEntry( i );
if ( m_resultWidgets[ 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). // all *mandatory* entries are satisfied (gives errors if not).
const bool requirementsSatisfied = m_model.satisfiedRequirements(); 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 ); createResultWidgets( entriesLayout, m_resultWidgets, model, isUnSatisfied );
@ -240,10 +246,10 @@ ResultsListWidget::retranslate()
{ {
for ( auto i = 0; i < m_model.count(); i++ ) for ( auto i = 0; i < m_model.count(); i++ )
{ {
const auto& entry = m_model.getEntry( i );
if ( m_resultWidgets[ 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() );
} }
} }