Skip to content

Commit c092eff

Browse files
committed
[attributetable] fix sortOnTop due to sortOrder wrong enum values from QgsAttributeTableConfig: fixes #15803
port to 3.0 for #4306
1 parent 212acc1 commit c092eff

File tree

2 files changed

+28
-4
lines changed

2 files changed

+28
-4
lines changed

src/core/qgsattributetableconfig.cpp

+12
Original file line numberDiff line numberDiff line change
@@ -198,6 +198,12 @@ void QgsAttributeTableConfig::readXml( const QDomNode &node )
198198

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

203209
QString QgsAttributeTableConfig::sortExpression() const
@@ -242,6 +248,12 @@ Qt::SortOrder QgsAttributeTableConfig::sortOrder() const
242248

243249
void QgsAttributeTableConfig::setSortOrder( Qt::SortOrder sortOrder )
244250
{
251+
// fix https://hub.qgis.org/issues/15803
252+
if ( sortOrder != Qt::AscendingOrder && sortOrder != Qt::DescendingOrder )
253+
{
254+
sortOrder = Qt::AscendingOrder;
255+
}
256+
245257
mSortOrder = sortOrder;
246258
}
247259

src/gui/attributetable/qgsattributetablefiltermodel.cpp

+16-4
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,9 @@ bool QgsAttributeTableFilterModel::lessThan( const QModelIndex &left, const QMod
6464

6565
void QgsAttributeTableFilterModel::sort( int column, Qt::SortOrder order )
6666
{
67+
if ( order != Qt::AscendingOrder && order != Qt::DescendingOrder )
68+
order = Qt::AscendingOrder;
69+
6770
int myColumn = mColumnMapping.at( column );
6871
masterModel()->prefetchColumnData( myColumn );
6972
QSortFilterProxyModel::sort( myColumn, order );
@@ -211,6 +214,9 @@ void QgsAttributeTableFilterModel::setAttributeTableConfig( const QgsAttributeTa
211214

212215
void QgsAttributeTableFilterModel::sort( const QString &expression, Qt::SortOrder order )
213216
{
217+
if ( order != Qt::AscendingOrder && order != Qt::DescendingOrder )
218+
order = Qt::AscendingOrder;
219+
214220
QSortFilterProxyModel::sort( -1 );
215221
masterModel()->prefetchSortData( expression );
216222
QSortFilterProxyModel::sort( 0, order ) ;
@@ -226,11 +232,17 @@ void QgsAttributeTableFilterModel::setSelectedOnTop( bool selectedOnTop )
226232
if ( mSelectedOnTop != selectedOnTop )
227233
{
228234
mSelectedOnTop = selectedOnTop;
235+
int column = sortColumn();
236+
Qt::SortOrder order = sortOrder();
229237

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

0 commit comments

Comments
 (0)