@@ -51,6 +51,7 @@ class TestQgsAttributeTable : public QObject
51
51
void testNoGeom ();
52
52
void testSelected ();
53
53
void testSortByDisplayExpression ();
54
+ void testOrderColumn ();
54
55
55
56
private:
56
57
QgisApp *mQgisApp = nullptr ;
@@ -306,6 +307,49 @@ void TestQgsAttributeTable::testRegression15974()
306
307
QCOMPARE ( dlg->mMainView ->filteredFeatureCount (), 3 );
307
308
}
308
309
310
+ void TestQgsAttributeTable::testOrderColumn ()
311
+ {
312
+ std::unique_ptr< QgsVectorLayer> tempLayer ( new QgsVectorLayer ( QStringLiteral ( " LineString?crs=epsg:3111&field=pk:int&field=col1:int&field=col2:int" ), QStringLiteral ( " vl" ), QStringLiteral ( " memory" ) ) );
313
+ QVERIFY ( tempLayer->isValid () );
314
+
315
+ QgsFeature f1 ( tempLayer->dataProvider ()->fields (), 1 );
316
+ f1.setAttribute ( 0 , 1 );
317
+ f1.setAttribute ( 1 , 13 );
318
+ f1.setAttribute ( 2 , 7 );
319
+ QVERIFY ( tempLayer->dataProvider ()->addFeatures ( QgsFeatureList () << f1 ) );
320
+
321
+ std::unique_ptr< QgsAttributeTableDialog > dlg ( new QgsAttributeTableDialog ( tempLayer.get () ) );
322
+
323
+ // Issue https://issues.qgis.org/issues/20673
324
+ // When we reorder column (last column becomes first column), and we select an entire row
325
+ // the currentIndex is no longer the first column, and consequently it breaks edition
326
+
327
+ QgsAttributeTableConfig config = QgsAttributeTableConfig ();
328
+ config.update ( tempLayer->dataProvider ()->fields () );
329
+ QVector<QgsAttributeTableConfig::ColumnConfig> columns = config.columns ();
330
+
331
+ // move last column in first position
332
+ columns.move ( 2 , 0 );
333
+ config.setColumns ( columns );
334
+
335
+ dlg->mMainView ->setAttributeTableConfig ( config );
336
+
337
+ QgsAttributeTableFilterModel *filterModel = static_cast <QgsAttributeTableFilterModel *>( dlg->mMainView ->mTableView ->model () );
338
+ filterModel->sort ( 0 , Qt::AscendingOrder );
339
+
340
+ QModelIndex index = filterModel->mapToSource ( filterModel->sourceModel ()->index ( 0 , 0 ) );
341
+ QCOMPARE ( index.row (), 0 );
342
+ QCOMPARE ( index.column (), 2 );
343
+
344
+ index = filterModel->mapFromSource ( filterModel->sourceModel ()->index ( 0 , 0 ) );
345
+ QCOMPARE ( index.row (), 0 );
346
+ QCOMPARE ( index.column (), 1 );
347
+
348
+ qDebug () << filterModel->mapFromSource ( filterModel->sourceModel ()->index ( 0 , 0 ) );
349
+
350
+ // column 0 is indeed column 2 since we move it
351
+ QCOMPARE ( filterModel->sortColumn (), 2 );
352
+ }
309
353
310
354
QGSTEST_MAIN ( TestQgsAttributeTable )
311
355
#include " testqgsattributetable.moc"
0 commit comments