Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Code layout
  • Loading branch information
elpaso authored and nyalldawson committed Apr 3, 2020
1 parent 16655d7 commit bed6424
Show file tree
Hide file tree
Showing 2 changed files with 82 additions and 81 deletions.
117 changes: 59 additions & 58 deletions src/gui/qgsfieldmappingwidget.cpp
Expand Up @@ -18,11 +18,11 @@
#include "qgsfieldexpressionwidget.h"
#include "qgsexpressioncontextutils.h"

QgsFieldMappingWidget::QgsFieldMappingWidget(const QgsFields &sourceFields,
const QgsFields &destinationFields,
const QMap<QString, QgsExpression> &expressions,
QWidget *parent)
: QWidget(parent)
QgsFieldMappingWidget::QgsFieldMappingWidget( const QgsFields &sourceFields,
const QgsFields &destinationFields,
const QMap<QString, QgsExpression> &expressions,
QWidget *parent )
: QWidget( parent )
, mSourceFields( sourceFields )
, mDestinationFields( destinationFields )
, mExpressions( expressions )
Expand All @@ -34,12 +34,12 @@ QgsFieldMappingWidget::QgsFieldMappingWidget(const QgsFields &sourceFields,
mTableView->setModel( mModel );
mTableView->setItemDelegateForColumn( 0, new ExpressionDelegate( mTableView ) );

for (int i=0; i<mModel->rowCount(); ++i)
for ( int i = 0; i < mModel->rowCount(); ++i )
{
mTableView->openPersistentEditor( mModel->index(i, 0));
mTableView->openPersistentEditor( mModel->index( i, 0 ) );
}

for (int i=0; i<mModel->columnCount(); ++i)
for ( int i = 0; i < mModel->columnCount(); ++i )
{
mTableView->resizeColumnToContents( i );
}
Expand All @@ -48,79 +48,79 @@ QgsFieldMappingWidget::QgsFieldMappingWidget(const QgsFields &sourceFields,
QMap<QString, QgsExpression> QgsFieldMappingWidget::expressions() const
{
QMap<QString, QgsExpression> results;
for ( const auto &f: qgis::as_const( mDestinationFields ) )
for ( const auto &f : qgis::as_const( mDestinationFields ) )
{
results[ f.name() ] = mExpressions.value( f.name(), QgsExpression() );
}
return results;
}

void QgsFieldMappingWidget::ExpressionDelegate::setModelData(QWidget* editor, QAbstractItemModel* model, const QModelIndex& index) const
void QgsFieldMappingWidget::ExpressionDelegate::setModelData( QWidget *editor, QAbstractItemModel *model, const QModelIndex &index ) const
{
QgsFieldExpressionWidget *editorWidget { qobject_cast<QgsFieldExpressionWidget *>( editor ) };
if ( ! editorWidget )
return;
return;

bool isExpression;
bool isValid;
const QString currentValue { editorWidget->currentField( &isExpression, &isValid ) };
if ( isExpression )
{
model->setData( index, currentValue , Qt::EditRole );
model->setData( index, currentValue, Qt::EditRole );
}
else
{
model->setData(index, QgsExpression::quotedColumnRef( currentValue ), Qt::EditRole );
model->setData( index, QgsExpression::quotedColumnRef( currentValue ), Qt::EditRole );
}
}

void QgsFieldMappingWidget::ExpressionDelegate::setEditorData(QWidget* editor, const QModelIndex& index) const
void QgsFieldMappingWidget::ExpressionDelegate::setEditorData( QWidget *editor, const QModelIndex &index ) const
{
QgsFieldExpressionWidget *editorWidget { qobject_cast<QgsFieldExpressionWidget *>( editor ) };
if ( ! editorWidget )
return;
return;

const auto value = index.model()->data(index, Qt::EditRole);
const auto value = index.model()->data( index, Qt::EditRole );
editorWidget->setField( value.toString() );

}

QWidget* QgsFieldMappingWidget::ExpressionDelegate::createEditor(QWidget* parent, const QStyleOptionViewItem& option, const QModelIndex& index) const
QWidget *QgsFieldMappingWidget::ExpressionDelegate::createEditor( QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index ) const
{
Q_UNUSED( option ) QgsFieldExpressionWidget *editor = new QgsFieldExpressionWidget( parent );
editor->setAutoFillBackground( true );
editor->setAllowEvalErrors( false );
editor->setAllowEmptyFieldName( true );
const QgsFieldMappingModel *model { qobject_cast<const QgsFieldMappingModel*>( index.model() ) };
Q_ASSERT( model );
editor->registerExpressionContextGenerator( model->contextGenerator() );
editor->setFields( model->sourceFields() );
editor->setField( index.model()->data(index, Qt::DisplayRole ).toString() );
connect (editor,
qgis::overload<const QString&, bool >::of( &QgsFieldExpressionWidget::fieldChanged ),
this,
[ = ] (const QString &fieldName, bool isValid )
{
Q_UNUSED( fieldName )
Q_UNUSED( isValid )
const_cast< QgsFieldMappingWidget::ExpressionDelegate *>( this )->emit commitData( editor );
});
return editor;
editor->setAutoFillBackground( true );
editor->setAllowEvalErrors( false );
editor->setAllowEmptyFieldName( true );
const QgsFieldMappingModel *model { qobject_cast<const QgsFieldMappingModel *>( index.model() ) };
Q_ASSERT( model );
editor->registerExpressionContextGenerator( model->contextGenerator() );
editor->setFields( model->sourceFields() );
editor->setField( index.model()->data( index, Qt::DisplayRole ).toString() );
connect( editor,
qgis::overload<const QString &, bool >::of( &QgsFieldExpressionWidget::fieldChanged ),
this,
[ = ]( const QString & fieldName, bool isValid )
{
Q_UNUSED( fieldName )
Q_UNUSED( isValid )
const_cast< QgsFieldMappingWidget::ExpressionDelegate *>( this )->emit commitData( editor );
} );
return editor;
}

QgsFieldMappingWidget::ExpressionDelegate::ExpressionDelegate(QObject* parent)
QgsFieldMappingWidget::ExpressionDelegate::ExpressionDelegate( QObject *parent )
: QStyledItemDelegate( parent )
{
}


QVariant QgsFieldMappingModel::headerData(int section, Qt::Orientation orientation, int role) const
QVariant QgsFieldMappingModel::headerData( int section, Qt::Orientation orientation, int role ) const
{
if ( role == Qt::DisplayRole )
{
if ( orientation == Qt::Horizontal )
{
if ( section == 0)
if ( section == 0 )
return tr( "Source expression" );
else if ( section == 1 )
return tr( "Field name" );
Expand All @@ -146,18 +146,18 @@ QgsFields QgsFieldMappingModel::sourceFields() const
return mSourceFields;
}

QgsFieldMappingModel::QgsFieldMappingModel(const QgsFields& sourceFields,
const QgsFields& destinationFields,
const QMap<QString, QgsExpression>& expressions,
QObject* parent)
QgsFieldMappingModel::QgsFieldMappingModel( const QgsFields &sourceFields,
const QgsFields &destinationFields,
const QMap<QString, QgsExpression> &expressions,
QObject *parent )
: QAbstractTableModel( parent )
, mSourceFields( sourceFields )
, mDestinationFields( destinationFields )
, mExpressionContextGenerator( new ExpressionContextGenerator( &mSourceFields ) )
{
// Prepare the model data
QStringList usedFields;
for (const auto &df: qgis::as_const( destinationFields ) )
for ( const auto &df : qgis::as_const( destinationFields ) )
{
Field f;
f.name = df.name();
Expand All @@ -179,7 +179,7 @@ QgsFieldMappingModel::QgsFieldMappingModel(const QgsFields& sourceFields,
bool found { false };
// Search for fields in the source
// 1. match by name
for ( const auto &sf: qgis::as_const( mSourceFields ) )
for ( const auto &sf : qgis::as_const( mSourceFields ) )
{
if ( sf.name() == f.name )
{
Expand All @@ -192,7 +192,7 @@ QgsFieldMappingModel::QgsFieldMappingModel(const QgsFields& sourceFields,
// 2. match by type
if ( ! found )
{
for ( const auto &sf: qgis::as_const( mSourceFields ) )
for ( const auto &sf : qgis::as_const( mSourceFields ) )
{
if ( usedFields.contains( sf.name() ) || sf.type() != f.type )
continue;
Expand All @@ -207,19 +207,19 @@ QgsFieldMappingModel::QgsFieldMappingModel(const QgsFields& sourceFields,
}
}

int QgsFieldMappingModel::rowCount(const QModelIndex& parent) const
int QgsFieldMappingModel::rowCount( const QModelIndex &parent ) const
{
Q_UNUSED( parent );
return mDestinationFields.count();
}

int QgsFieldMappingModel::columnCount(const QModelIndex& parent) const
int QgsFieldMappingModel::columnCount( const QModelIndex &parent ) const
{
Q_UNUSED( parent );
return 4;
}

QVariant QgsFieldMappingModel::data(const QModelIndex& index, int role) const
QVariant QgsFieldMappingModel::data( const QModelIndex &index, int role ) const
{
if ( index.isValid() )
{
Expand All @@ -234,15 +234,16 @@ QVariant QgsFieldMappingModel::data(const QModelIndex& index, int role) const
{
return f.expression.expression();
}
else if ( col == 1)
else if ( col == 1 )
{
return f.name;
}
else if ( col == 2 )
{
return f.length;
}
else if ( col == 3 ) {
else if ( col == 3 )
{
return f.precision;
}
}
Expand All @@ -262,13 +263,13 @@ QVariant QgsFieldMappingModel::data(const QModelIndex& index, int role) const
return QVariant();
}

QgsExpressionContextGenerator* QgsFieldMappingModel::contextGenerator() const
QgsExpressionContextGenerator *QgsFieldMappingModel::contextGenerator() const
{
return mExpressionContextGenerator.get();
}


QgsFieldMappingModel::ExpressionContextGenerator::ExpressionContextGenerator(const QgsFields* sourceFields)
QgsFieldMappingModel::ExpressionContextGenerator::ExpressionContextGenerator( const QgsFields *sourceFields )
{
mSourceFields = sourceFields;
}
Expand All @@ -284,27 +285,27 @@ QgsExpressionContext QgsFieldMappingModel::ExpressionContextGenerator::createExp
return ctx;
}

Qt::ItemFlags QgsFieldMappingModel::flags(const QModelIndex& index) const
Qt::ItemFlags QgsFieldMappingModel::flags( const QModelIndex &index ) const
{
if ( index.isValid() && index.column() == 0 )
return Qt::ItemFlags(Qt::ItemIsSelectable |
return Qt::ItemFlags( Qt::ItemIsSelectable |
Qt::ItemIsEditable |
Qt::ItemIsEnabled);
Qt::ItemIsEnabled );
return Qt::ItemFlags();

}

bool QgsFieldMappingModel::setData(const QModelIndex& index, const QVariant& value, int role)
bool QgsFieldMappingModel::setData( const QModelIndex &index, const QVariant &value, int role )
{

if ( index.isValid() )
{
if ( role == Qt::EditRole )
{
Field &f { const_cast<Field&>( mMapping.at( index.row() ) ) };
Field &f { const_cast<Field &>( mMapping.at( index.row() ) ) };
const QgsExpression exp { value.toString() };
f.expression = exp;
emit dataChanged(index, index);
emit dataChanged( index, index );
}
}
return true;
Expand Down
46 changes: 23 additions & 23 deletions src/gui/qgsfieldmappingwidget.h
Expand Up @@ -39,10 +39,10 @@ class GUI_EXPORT QgsFieldMappingWidget : public QWidget, private Ui::QgsFieldMap

public:

explicit QgsFieldMappingWidget(const QgsFields &sourceFields,
const QgsFields &destinationFields,
const QMap<QString, QgsExpression> &expressions = QMap<QString, QgsExpression>(),
QWidget *parent = nullptr);
explicit QgsFieldMappingWidget( const QgsFields &sourceFields,
const QgsFields &destinationFields,
const QMap<QString, QgsExpression> &expressions = QMap<QString, QgsExpression>(),
QWidget *parent = nullptr );

QMap<QString, QgsExpression> expressions() const;

Expand All @@ -53,19 +53,19 @@ class GUI_EXPORT QgsFieldMappingWidget : public QWidget, private Ui::QgsFieldMap
QgsFields mSourceFields;
QgsFields mDestinationFields;
QMap<QString, QgsExpression> mExpressions;
QAbstractTableModel* mModel;
QAbstractTableModel *mModel;

class ExpressionDelegate: public QStyledItemDelegate
{

public:
public:

ExpressionDelegate(QObject *parent = nullptr);
ExpressionDelegate( QObject *parent = nullptr );

// QAbstractItemDelegate interface
QWidget* createEditor(QWidget* parent, const QStyleOptionViewItem& option, const QModelIndex& index) const override;
void setEditorData(QWidget* editor, const QModelIndex& index) const override;
void setModelData(QWidget* editor, QAbstractItemModel* model, const QModelIndex& index) const override;
QWidget *createEditor( QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index ) const override;
void setEditorData( QWidget *editor, const QModelIndex &index ) const override;
void setModelData( QWidget *editor, QAbstractItemModel *model, const QModelIndex &index ) const override;
};


Expand All @@ -86,21 +86,21 @@ class GUI_EXPORT QgsFieldMappingModel: public QAbstractTableModel

public:

QgsFieldMappingModel(const QgsFields &sourceFields,
const QgsFields &destinationFields,
const QMap<QString, QgsExpression> &expressions = QMap<QString, QgsExpression>(),
QObject* parent = nullptr);
QgsFieldMappingModel( const QgsFields &sourceFields,
const QgsFields &destinationFields,
const QMap<QString, QgsExpression> &expressions = QMap<QString, QgsExpression>(),
QObject *parent = nullptr );

QgsExpressionContextGenerator* contextGenerator() const;
QgsExpressionContextGenerator *contextGenerator() const;

// QAbstractItemModel interface
int rowCount(const QModelIndex& parent) const override;
int columnCount(const QModelIndex& parent) const override;
QVariant data(const QModelIndex& index, int role) const override;
QVariant headerData(int section, Qt::Orientation orientation, int role) const override;
Qt::ItemFlags flags(const QModelIndex& index) const override;
int rowCount( const QModelIndex &parent ) const override;
int columnCount( const QModelIndex &parent ) const override;
QVariant data( const QModelIndex &index, int role ) const override;
QVariant headerData( int section, Qt::Orientation orientation, int role ) const override;
Qt::ItemFlags flags( const QModelIndex &index ) const override;
QgsFields sourceFields() const;
bool setData(const QModelIndex& index, const QVariant& value, int role) override;
bool setData( const QModelIndex &index, const QVariant &value, int role ) override;



Expand All @@ -122,14 +122,14 @@ class GUI_EXPORT QgsFieldMappingModel: public QAbstractTableModel

public:

ExpressionContextGenerator( const QgsFields* sourceFields );
ExpressionContextGenerator( const QgsFields *sourceFields );

// QgsExpressionContextGenerator interface
QgsExpressionContext createExpressionContext() const override;

private:

const QgsFields* mSourceFields;
const QgsFields *mSourceFields;

};

Expand Down

0 comments on commit bed6424

Please sign in to comment.