Skip to content

Commit a82b8cf

Browse files
committedMay 10, 2017
[attributetable] fix sortOnTop due to sortOrder wrong enum values from QgsAttributeTableConfig: fixes #15803
1 parent a6883f7 commit a82b8cf

File tree

2 files changed

+31
-5
lines changed

2 files changed

+31
-5
lines changed
 

‎src/core/qgsattributetableconfig.cpp

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -197,6 +197,12 @@ void QgsAttributeTableConfig::readXml( const QDomNode& node )
197197

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

202208
QString QgsAttributeTableConfig::sortExpression() const
@@ -241,7 +247,15 @@ Qt::SortOrder QgsAttributeTableConfig::sortOrder() const
241247

242248
void QgsAttributeTableConfig::setSortOrder( const Qt::SortOrder& sortOrder )
243249
{
244-
mSortOrder = sortOrder;
250+
// fix https://hub.qgis.org/issues/15803
251+
if ( sortOrder != Qt::AscendingOrder && sortOrder != Qt::DescendingOrder )
252+
{
253+
mSortOrder = Qt::AscendingOrder;
254+
}
255+
else
256+
{
257+
mSortOrder = sortOrder;
258+
}
245259
}
246260

247261
void QgsAttributeTableConfig::writeXml( QDomNode& node ) const

‎src/gui/attributetable/qgsattributetablefiltermodel.cpp

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,9 @@ bool QgsAttributeTableFilterModel::lessThan( const QModelIndex &left, const QMod
6363

6464
void QgsAttributeTableFilterModel::sort( int column, Qt::SortOrder order )
6565
{
66+
if ( order != Qt::AscendingOrder && order != Qt::DescendingOrder )
67+
order = Qt::AscendingOrder;
68+
6669
int myColumn = mColumnMapping.at( column );
6770
masterModel()->prefetchColumnData( myColumn );
6871
QSortFilterProxyModel::sort( myColumn, order );
@@ -210,6 +213,9 @@ void QgsAttributeTableFilterModel::setAttributeTableConfig( const QgsAttributeTa
210213

211214
void QgsAttributeTableFilterModel::sort( QString expression, Qt::SortOrder order )
212215
{
216+
if ( order != Qt::AscendingOrder && order != Qt::DescendingOrder )
217+
order = Qt::AscendingOrder;
218+
213219
QSortFilterProxyModel::sort( -1 );
214220
masterModel()->prefetchSortData( expression );
215221
QSortFilterProxyModel::sort( 0, order ) ;
@@ -225,11 +231,17 @@ void QgsAttributeTableFilterModel::setSelectedOnTop( bool selectedOnTop )
225231
if ( mSelectedOnTop != selectedOnTop )
226232
{
227233
mSelectedOnTop = selectedOnTop;
234+
int column = sortColumn();
235+
Qt::SortOrder order = sortOrder();
228236

229-
if ( sortColumn() == -1 )
230-
{
231-
sort( 0 );
232-
}
237+
// set default sort values if they are not correctly set
238+
if ( column < 0 )
239+
column = 0;
240+
241+
if ( order != Qt::AscendingOrder && order != Qt::DescendingOrder )
242+
order = Qt::AscendingOrder;
243+
244+
sort( column, order );
233245
invalidate();
234246
}
235247
}

0 commit comments

Comments
 (0)
Please sign in to comment.