Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Show field comments and alias in field mapping tables
  • Loading branch information
nyalldawson committed Apr 21, 2023
1 parent dfc7f56 commit c7659fb
Show file tree
Hide file tree
Showing 5 changed files with 49 additions and 4 deletions.
4 changes: 3 additions & 1 deletion python/gui/auto_additions/qgsfieldmappingmodel.py
Expand Up @@ -6,6 +6,8 @@
QgsFieldMappingModel.ColumnDataIndex.DestinationLength.__doc__ = "Destination field length"
QgsFieldMappingModel.ColumnDataIndex.DestinationPrecision.__doc__ = "Destination field precision"
QgsFieldMappingModel.ColumnDataIndex.DestinationConstraints.__doc__ = "Destination field constraints"
QgsFieldMappingModel.ColumnDataIndex.__doc__ = 'The ColumnDataIndex enum represents the column index for the view\n\n' + '* ``SourceExpression``: ' + QgsFieldMappingModel.ColumnDataIndex.SourceExpression.__doc__ + '\n' + '* ``DestinationName``: ' + QgsFieldMappingModel.ColumnDataIndex.DestinationName.__doc__ + '\n' + '* ``DestinationType``: ' + QgsFieldMappingModel.ColumnDataIndex.DestinationType.__doc__ + '\n' + '* ``DestinationLength``: ' + QgsFieldMappingModel.ColumnDataIndex.DestinationLength.__doc__ + '\n' + '* ``DestinationPrecision``: ' + QgsFieldMappingModel.ColumnDataIndex.DestinationPrecision.__doc__ + '\n' + '* ``DestinationConstraints``: ' + QgsFieldMappingModel.ColumnDataIndex.DestinationConstraints.__doc__
QgsFieldMappingModel.ColumnDataIndex.DestinationAlias.__doc__ = "Destination alias"
QgsFieldMappingModel.ColumnDataIndex.DestinationComment.__doc__ = "Destination comment"
QgsFieldMappingModel.ColumnDataIndex.__doc__ = 'The ColumnDataIndex enum represents the column index for the view\n\n' + '* ``SourceExpression``: ' + QgsFieldMappingModel.ColumnDataIndex.SourceExpression.__doc__ + '\n' + '* ``DestinationName``: ' + QgsFieldMappingModel.ColumnDataIndex.DestinationName.__doc__ + '\n' + '* ``DestinationType``: ' + QgsFieldMappingModel.ColumnDataIndex.DestinationType.__doc__ + '\n' + '* ``DestinationLength``: ' + QgsFieldMappingModel.ColumnDataIndex.DestinationLength.__doc__ + '\n' + '* ``DestinationPrecision``: ' + QgsFieldMappingModel.ColumnDataIndex.DestinationPrecision.__doc__ + '\n' + '* ``DestinationConstraints``: ' + QgsFieldMappingModel.ColumnDataIndex.DestinationConstraints.__doc__ + '\n' + '* ``DestinationAlias``: ' + QgsFieldMappingModel.ColumnDataIndex.DestinationAlias.__doc__ + '\n' + '* ``DestinationComment``: ' + QgsFieldMappingModel.ColumnDataIndex.DestinationComment.__doc__
# --
QgsFieldMappingModel.ColumnDataIndex.baseClass = QgsFieldMappingModel
2 changes: 2 additions & 0 deletions python/gui/auto_generated/qgsfieldmappingmodel.sip.in
Expand Up @@ -34,6 +34,8 @@ the mapping expression is editable.
DestinationLength,
DestinationPrecision,
DestinationConstraints,
DestinationAlias,
DestinationComment,
};


Expand Down
29 changes: 28 additions & 1 deletion src/gui/qgsfieldmappingmodel.cpp
Expand Up @@ -64,6 +64,14 @@ QVariant QgsFieldMappingModel::headerData( int section, Qt::Orientation orientat
{
return tr( "Constraints" );
}
case ColumnDataIndex::DestinationAlias:
{
return tr( "Alias" );
}
case ColumnDataIndex::DestinationComment:
{
return tr( "Comment" );
}
}
break;
}
Expand Down Expand Up @@ -92,7 +100,7 @@ int QgsFieldMappingModel::columnCount( const QModelIndex &parent ) const
{
if ( parent.isValid() )
return 0;
return 6;
return 8;
}

QVariant QgsFieldMappingModel::data( const QModelIndex &index, int role ) const
Expand Down Expand Up @@ -135,6 +143,14 @@ QVariant QgsFieldMappingModel::data( const QModelIndex &index, int role ) const
{
return constraints != 0 ? tr( "Constraints active" ) : QString();
}
case ColumnDataIndex::DestinationAlias:
{
return f.field.alias();
}
case ColumnDataIndex::DestinationComment:
{
return f.field.comment();
}
}
break;
}
Expand Down Expand Up @@ -231,6 +247,17 @@ bool QgsFieldMappingModel::setData( const QModelIndex &index, const QVariant &va
{
// Not editable: do nothing
}
case ColumnDataIndex::DestinationAlias:
{
f.field.setAlias( value.toString() );
break;
}
case ColumnDataIndex::DestinationComment:
{
f.field.setComment( value.toString() );
break;
}

}
emit dataChanged( index, index );
}
Expand Down
2 changes: 2 additions & 0 deletions src/gui/qgsfieldmappingmodel.h
Expand Up @@ -55,6 +55,8 @@ class GUI_EXPORT QgsFieldMappingModel: public QAbstractTableModel
DestinationLength, //!< Destination field length
DestinationPrecision, //!< Destination field precision
DestinationConstraints, //!< Destination field constraints
DestinationAlias, //!< Destination alias
DestinationComment, //!< Destination comment
};

Q_ENUM( ColumnDataIndex );
Expand Down
16 changes: 14 additions & 2 deletions tests/src/python/test_qgsfieldmappingwidget.py
Expand Up @@ -41,14 +41,18 @@ def setUp(self):

source_fields = QgsFields()
f = QgsField('source_field1', QVariant.String)
f.setComment('my comment')
self.assertTrue(source_fields.append(f))
f = QgsField('source_field2', QVariant.Int, 'integer', 10, 8)
f.setAlias('my alias')
self.assertTrue(source_fields.append(f))

destination_fields = QgsFields()
f = QgsField('destination_field1', QVariant.Int, 'integer', 10, 8)
f.setComment('my comment')
self.assertTrue(destination_fields.append(f))
f = QgsField('destination_field2', QVariant.String)
f.setAlias('my alias')
self.assertTrue(destination_fields.append(f))
f = QgsField('destination_field3', QVariant.String)
self.assertTrue(destination_fields.append(f))
Expand Down Expand Up @@ -82,12 +86,18 @@ def testModel(self):
self.assertEqual(model.data(model.index(0, 1), Qt.DisplayRole), 'destination_field1')
self.assertEqual(model.data(model.index(0, 3), Qt.DisplayRole), 10)
self.assertEqual(model.data(model.index(0, 4), Qt.DisplayRole), 8)
self.assertFalse(model.data(model.index(0, 6), Qt.DisplayRole))
self.assertEqual(model.data(model.index(0, 7), Qt.DisplayRole), 'my comment')

self.assertEqual(model.data(model.index(1, 0), Qt.DisplayRole), '"source_field1"')
self.assertEqual(model.data(model.index(1, 1), Qt.DisplayRole), 'destination_field2')
self.assertEqual(model.data(model.index(1, 1), Qt.DisplayRole), 'my alias')
self.assertEqual(model.data(model.index(1, 6), Qt.DisplayRole), 'my alias')
self.assertFalse(model.data(model.index(1, 7), Qt.DisplayRole))

self.assertEqual(model.data(model.index(2, 0), Qt.DisplayRole), QVariant())
self.assertEqual(model.data(model.index(2, 1), Qt.DisplayRole), 'destination_field3')
self.assertFalse(model.data(model.index(2, 6), Qt.DisplayRole))
self.assertFalse(model.data(model.index(2, 7), Qt.DisplayRole))

# Test expression scope
ctx = model.contextGenerator().createExpressionContext()
Expand Down Expand Up @@ -153,13 +163,15 @@ def testSetSourceFields(self):
self.assertEqual(model.data(model.index(2, 1), Qt.DisplayRole), 'destination_field3')

f = QgsField('source_field3', QVariant.String)
f.setAlias('an alias')
f.setComment('a comment')
fields = self.source_fields
fields.append(f)
model.setSourceFields(fields)
self.assertEqual(model.data(model.index(0, 0), Qt.DisplayRole), '"source_field2"')
self.assertEqual(model.data(model.index(0, 1), Qt.DisplayRole), 'destination_field1')
self.assertEqual(model.data(model.index(1, 0), Qt.DisplayRole), '"source_field1"')
self.assertEqual(model.data(model.index(1, 1), Qt.DisplayRole), 'destination_field2')
self.assertEqual(model.data(model.index(1, 1), Qt.DisplayRole), 'my alias')
self.assertEqual(model.data(model.index(2, 0), Qt.DisplayRole), '"source_field3"')
self.assertEqual(model.data(model.index(2, 1), Qt.DisplayRole), 'destination_field3')

Expand Down

0 comments on commit c7659fb

Please sign in to comment.