Skip to content

Commit

Permalink
API backward compatibility fix, code layout and readability, implicit…
Browse files Browse the repository at this point in the history
… sharing
  • Loading branch information
3nids committed May 6, 2020
1 parent 28c20cf commit 51b0d5a
Show file tree
Hide file tree
Showing 4 changed files with 31 additions and 24 deletions.
5 changes: 2 additions & 3 deletions src/core/layout/qgscompositionconverter.cpp
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -1466,10 +1466,9 @@ bool QgsCompositionConverter::readTableXml( QgsLayoutItemAttributeTable *layoutI
layoutItem->mColumns.append( column ); layoutItem->mColumns.append( column );


// sorting columns are now (QGIS 3.14+) handled in a dedicated list // sorting columns are now (QGIS 3.14+) handled in a dedicated list
// copy the display columns if sortByRank > 0 and then, sort them by rank
Q_NOWARN_DEPRECATED_PUSH Q_NOWARN_DEPRECATED_PUSH
for ( const QgsLayoutTableColumn &col : qgis::as_const( layoutItem->mColumns ) ) std::copy_if( layoutItem->mColumns.begin(), layoutItem->mColumns.end(), std::back_inserter( layoutItem->mSortColumns ), []( const QgsLayoutTableColumn & col ) {return col.sortByRank() > 0;} );
if ( col.sortByRank() > 0 )
layoutItem->mSortColumns.append( col );
std::sort( layoutItem->mSortColumns.begin(), layoutItem->mSortColumns.end(), []( const QgsLayoutTableColumn & a, const QgsLayoutTableColumn & b ) {return a.sortByRank() < b.sortByRank();} ); std::sort( layoutItem->mSortColumns.begin(), layoutItem->mSortColumns.end(), []( const QgsLayoutTableColumn & a, const QgsLayoutTableColumn & b ) {return a.sortByRank() < b.sortByRank();} );
Q_NOWARN_DEPRECATED_POP Q_NOWARN_DEPRECATED_POP
} }
Expand Down
8 changes: 4 additions & 4 deletions src/core/layout/qgslayoutitemattributetable.cpp
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -367,16 +367,16 @@ void QgsLayoutItemAttributeTable::restoreFieldAliasMap( const QMap<int, QString>
return; return;
} }


for ( QgsLayoutTableColumn &column : mColumns ) for ( int i = 0; i < mColumns.count(); i++ )
{ {
int attrIdx = source->fields().lookupField( column.attribute() ); int attrIdx = source->fields().lookupField( mColumns[i].attribute() );
if ( map.contains( attrIdx ) ) if ( map.contains( attrIdx ) )
{ {
column.setHeading( map.value( attrIdx ) ); mColumns[i].setHeading( map.value( attrIdx ) );
} }
else else
{ {
column.setHeading( source->attributeDisplayName( attrIdx ) ); mColumns[i].setHeading( source->attributeDisplayName( attrIdx ) );
} }
} }
} }
Expand Down
24 changes: 15 additions & 9 deletions src/core/layout/qgslayouttable.cpp
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -190,10 +190,9 @@ bool QgsLayoutTable::readPropertiesFromElement( const QDomElement &itemElem, con
else else
{ {
// backward compatibility for QGIS < 3.14 // backward compatibility for QGIS < 3.14
// copy the display columns if sortByRank > 0 and then, sort them by rank
Q_NOWARN_DEPRECATED_PUSH Q_NOWARN_DEPRECATED_PUSH
for ( const QgsLayoutTableColumn &col : qgis::as_const( mColumns ) ) std::copy_if( mColumns.begin(), mColumns.end(), std::back_inserter( mSortColumns ), []( const QgsLayoutTableColumn & col ) {return col.sortByRank() > 0;} );
if ( col.sortByRank() > 0 )
mSortColumns.append( col );
std::sort( mSortColumns.begin(), mSortColumns.end(), []( const QgsLayoutTableColumn & a, const QgsLayoutTableColumn & b ) {return a.sortByRank() < b.sortByRank();} ); std::sort( mSortColumns.begin(), mSortColumns.end(), []( const QgsLayoutTableColumn & a, const QgsLayoutTableColumn & b ) {return a.sortByRank() < b.sortByRank();} );
Q_NOWARN_DEPRECATED_POP Q_NOWARN_DEPRECATED_POP
} }
Expand Down Expand Up @@ -792,17 +791,24 @@ void QgsLayoutTable::setWrapBehavior( QgsLayoutTable::WrapBehavior behavior )
void QgsLayoutTable::setColumns( const QgsLayoutTableColumns &columns ) void QgsLayoutTable::setColumns( const QgsLayoutTableColumns &columns )
{ {
//remove existing columns //remove existing columns
mColumns.clear(); mColumns = columns;


mColumns.append( columns ); // backward compatibility
// test if sorting is provided with the columns and call setSortColumns in such case
QgsLayoutTableSortColumns newSortColumns;
Q_NOWARN_DEPRECATED_PUSH
std::copy_if( mColumns.begin(), mColumns.end(), std::back_inserter( newSortColumns ), []( const QgsLayoutTableColumn & col ) {return col.sortByRank() > 0;} );
if ( !newSortColumns.isEmpty() )
{
std::sort( newSortColumns.begin(), newSortColumns.end(), []( const QgsLayoutTableColumn & a, const QgsLayoutTableColumn & b ) {return a.sortByRank() < b.sortByRank();} );
setSortColumns( newSortColumns );
}
Q_NOWARN_DEPRECATED_POP
} }


void QgsLayoutTable::setSortColumns( const QgsLayoutTableSortColumns &sortColumns ) void QgsLayoutTable::setSortColumns( const QgsLayoutTableSortColumns &sortColumns )
{ {
//remove existing columns mSortColumns = sortColumns;
mSortColumns.clear();

mSortColumns.append( sortColumns );
} }


void QgsLayoutTable::setCellStyle( QgsLayoutTable::CellStyleGroup group, const QgsLayoutTableStyle &style ) void QgsLayoutTable::setCellStyle( QgsLayoutTable::CellStyleGroup group, const QgsLayoutTableStyle &style )
Expand Down
18 changes: 10 additions & 8 deletions src/gui/layout/qgslayoutattributeselectiondialog.cpp
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -231,38 +231,40 @@ bool QgsLayoutAttributeTableColumnModelBase::setData( const QModelIndex &index,
if ( index.column() > displayedColumns().count() ) if ( index.column() > displayedColumns().count() )
return false; return false;


QgsLayoutTableColumn &colToUpdate = columns()[index.row()];

Column col = displayedColumns()[index.column()]; Column col = displayedColumns()[index.column()];
switch ( col ) switch ( col )
{ {
case Attribute: case Attribute:
// also update column's heading, if it hasn't been customized // also update column's heading, if it hasn't been customized
if ( columns()[index.row()].heading().isEmpty() || ( columns()[index.row()].heading() == columns()[index.row()].attribute() ) ) if ( colToUpdate.heading().isEmpty() || ( colToUpdate.heading() == colToUpdate.attribute() ) )
{ {
columns()[index.row()].setHeading( value.toString() ); colToUpdate.setHeading( value.toString() );
emit dataChanged( createIndex( index.row(), 1 ), createIndex( index.row(), 1 ) ); emit dataChanged( createIndex( index.row(), 1 ), createIndex( index.row(), 1 ) );
} }
columns()[index.row()].setAttribute( value.toString() ); colToUpdate.setAttribute( value.toString() );
emit dataChanged( index, index ); emit dataChanged( index, index );
return true; return true;


case Heading: case Heading:
columns()[index.row()].setHeading( value.toString() ); colToUpdate.setHeading( value.toString() );
emit dataChanged( index, index ); emit dataChanged( index, index );
return true; return true;


case Alignment: case Alignment:
columns()[index.row()].setHAlignment( Qt::AlignmentFlag( value.toInt() & Qt::AlignHorizontal_Mask ) ); colToUpdate.setHAlignment( Qt::AlignmentFlag( value.toInt() & Qt::AlignHorizontal_Mask ) );
columns()[index.row()].setVAlignment( Qt::AlignmentFlag( value.toInt() & Qt::AlignVertical_Mask ) ); colToUpdate.setVAlignment( Qt::AlignmentFlag( value.toInt() & Qt::AlignVertical_Mask ) );
emit dataChanged( index, index ); emit dataChanged( index, index );
return true; return true;


case Width: case Width:
columns()[index.row()].setWidth( value.toDouble() ); colToUpdate.setWidth( value.toDouble() );
emit dataChanged( index, index ); emit dataChanged( index, index );
return true; return true;


case SortOrder: case SortOrder:
mTable->sortColumns()[index.row()].setSortOrder( static_cast< Qt::SortOrder >( value.toInt() ) ); colToUpdate.setSortOrder( static_cast< Qt::SortOrder >( value.toInt() ) );
emit dataChanged( index, index ); emit dataChanged( index, index );
return true; return true;
} }
Expand Down

0 comments on commit 51b0d5a

Please sign in to comment.