Skip to content

Commit

Permalink
[attributetable] fix sortOnTop due to sortOrder wrong enum values fro…
Browse files Browse the repository at this point in the history
…m QgsAttributeTableConfig: fixes #15803
  • Loading branch information
luipir committed May 10, 2017
1 parent a6883f7 commit a82b8cf
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 5 deletions.
16 changes: 15 additions & 1 deletion src/core/qgsattributetableconfig.cpp
Expand Up @@ -197,6 +197,12 @@ void QgsAttributeTableConfig::readXml( const QDomNode& node )

mSortExpression = configNode.toElement().attribute( "sortExpression" );
mSortOrder = static_cast<Qt::SortOrder>( configNode.toElement().attribute( "sortOrder" ).toInt() );
// fix https://hub.qgis.org/issues/15803
// because static_cast give umpredictable value if value is not in the enum range
if ( mSortOrder != Qt::AscendingOrder && mSortOrder != Qt::DescendingOrder )
{
mSortOrder = Qt::AscendingOrder;
}
}

QString QgsAttributeTableConfig::sortExpression() const
Expand Down Expand Up @@ -241,7 +247,15 @@ Qt::SortOrder QgsAttributeTableConfig::sortOrder() const

void QgsAttributeTableConfig::setSortOrder( const Qt::SortOrder& sortOrder )
{
mSortOrder = sortOrder;
// fix https://hub.qgis.org/issues/15803
if ( sortOrder != Qt::AscendingOrder && sortOrder != Qt::DescendingOrder )
{
mSortOrder = Qt::AscendingOrder;
}
else
{
mSortOrder = sortOrder;
}
}

void QgsAttributeTableConfig::writeXml( QDomNode& node ) const
Expand Down
20 changes: 16 additions & 4 deletions src/gui/attributetable/qgsattributetablefiltermodel.cpp
Expand Up @@ -63,6 +63,9 @@ bool QgsAttributeTableFilterModel::lessThan( const QModelIndex &left, const QMod

void QgsAttributeTableFilterModel::sort( int column, Qt::SortOrder order )
{
if ( order != Qt::AscendingOrder && order != Qt::DescendingOrder )
order = Qt::AscendingOrder;

int myColumn = mColumnMapping.at( column );
masterModel()->prefetchColumnData( myColumn );
QSortFilterProxyModel::sort( myColumn, order );
Expand Down Expand Up @@ -210,6 +213,9 @@ void QgsAttributeTableFilterModel::setAttributeTableConfig( const QgsAttributeTa

void QgsAttributeTableFilterModel::sort( QString expression, Qt::SortOrder order )
{
if ( order != Qt::AscendingOrder && order != Qt::DescendingOrder )
order = Qt::AscendingOrder;

QSortFilterProxyModel::sort( -1 );
masterModel()->prefetchSortData( expression );
QSortFilterProxyModel::sort( 0, order ) ;
Expand All @@ -225,11 +231,17 @@ void QgsAttributeTableFilterModel::setSelectedOnTop( bool selectedOnTop )
if ( mSelectedOnTop != selectedOnTop )
{
mSelectedOnTop = selectedOnTop;
int column = sortColumn();
Qt::SortOrder order = sortOrder();

if ( sortColumn() == -1 )
{
sort( 0 );
}
// set default sort values if they are not correctly set
if ( column < 0 )
column = 0;

if ( order != Qt::AscendingOrder && order != Qt::DescendingOrder )
order = Qt::AscendingOrder;

sort( column, order );
invalidate();
}
}
Expand Down

0 comments on commit a82b8cf

Please sign in to comment.