Skip to content

Commit

Permalink
Fix invalid background/text colors showing in attribute table
Browse files Browse the repository at this point in the history
(cherry-picked from 38e0502)
  • Loading branch information
nyalldawson committed May 25, 2016
1 parent 695883e commit 3ec3dae
Showing 1 changed file with 43 additions and 33 deletions.
76 changes: 43 additions & 33 deletions src/gui/attributetable/qgsattributetablemodel.cpp
Expand Up @@ -553,7 +553,7 @@ QVariant QgsAttributeTableModel::data( const QModelIndex &index, int role ) cons
if ( index.column() >= mFieldCount ) if ( index.column() >= mFieldCount )
return role == Qt::DisplayRole ? rowId : QVariant(); return role == Qt::DisplayRole ? rowId : QVariant();


int fieldId = mAttributes[index.column()]; int fieldId = mAttributes.at( index.column() );


if ( role == FieldIndexRole ) if ( role == FieldIndexRole )
return fieldId; return fieldId;
Expand Down Expand Up @@ -593,46 +593,56 @@ QVariant QgsAttributeTableModel::data( const QModelIndex &index, int role ) cons
val = mFeat.attribute( fieldId ); val = mFeat.attribute( fieldId );
} }


if ( role == Qt::DisplayRole ) switch ( role )
{ {
return mWidgetFactories[index.column()]->representValue( layer(), fieldId, mWidgetConfigs[index.column()], mAttributeWidgetCaches[index.column()], val ); case Qt::DisplayRole:
} return mWidgetFactories.at( index.column() )->representValue( layer(), fieldId, mWidgetConfigs.at( index.column() ),
mAttributeWidgetCaches.at( index.column() ), val );


if ( role == Qt::BackgroundColorRole || role == Qt::TextColorRole || role == Qt::DecorationRole || role == Qt::FontRole ) case Qt::EditRole:
{ return val;
mExpressionContext.setFeature( mFeat );
QList<QgsConditionalStyle> styles; case Qt::BackgroundColorRole:
if ( mRowStylesMap.contains( index.row() ) ) case Qt::TextColorRole:
{ case Qt::DecorationRole:
styles = mRowStylesMap[index.row()]; case Qt::FontRole:
}
else
{ {
styles = QgsConditionalStyle::matchingConditionalStyles( layer()->conditionalStyles()->rowStyles(), QVariant(), mExpressionContext ); mExpressionContext.setFeature( mFeat );
mRowStylesMap.insert( index.row(), styles ); QList<QgsConditionalStyle> styles;
if ( mRowStylesMap.contains( index.row() ) )
{
styles = mRowStylesMap[index.row()];
}
else
{
styles = QgsConditionalStyle::matchingConditionalStyles( layer()->conditionalStyles()->rowStyles(), QVariant(), mExpressionContext );
mRowStylesMap.insert( index.row(), styles );


} }


QgsConditionalStyle rowstyle = QgsConditionalStyle::compressStyles( styles ); QgsConditionalStyle rowstyle = QgsConditionalStyle::compressStyles( styles );
styles = layer()->conditionalStyles()->fieldStyles( field.name() ); styles = layer()->conditionalStyles()->fieldStyles( field.name() );
styles = QgsConditionalStyle::matchingConditionalStyles( styles , val, mExpressionContext ); styles = QgsConditionalStyle::matchingConditionalStyles( styles , val, mExpressionContext );
styles.insert( 0, rowstyle ); styles.insert( 0, rowstyle );
QgsConditionalStyle style = QgsConditionalStyle::compressStyles( styles ); QgsConditionalStyle style = QgsConditionalStyle::compressStyles( styles );


if ( style.isValid() ) if ( style.isValid() )
{ {
if ( role == Qt::BackgroundColorRole && style.validBackgroundColor() ) if ( role == Qt::BackgroundColorRole && style.validBackgroundColor() )
return style.backgroundColor(); return style.backgroundColor();
if ( role == Qt::TextColorRole && style.validTextColor() ) if ( role == Qt::TextColorRole && style.validTextColor() )
return style.textColor(); return style.textColor();
if ( role == Qt::DecorationRole ) if ( role == Qt::DecorationRole )
return style.icon(); return style.icon();
if ( role == Qt::FontRole ) if ( role == Qt::FontRole )
return style.font(); return style.font();
} }


return QVariant();
}
} }
return val;
return QVariant();
} }


bool QgsAttributeTableModel::setData( const QModelIndex &index, const QVariant &value, int role ) bool QgsAttributeTableModel::setData( const QModelIndex &index, const QVariant &value, int role )
Expand Down

0 comments on commit 3ec3dae

Please sign in to comment.