QgsEditorWidgetSetup QgsEditorWidgetRegistry::findBest( const QgsVectorLayer *vl, const QString &fieldName ) const { QgsFields fields = vl->fields(); int index = fields.indexOf( fieldName ); if ( index > -1 ) { QgsEditorWidgetSetup setup = vl->fields().at( index ).editorWidgetSetup(); if ( !setup.isNull() ) return setup; } return mAutoConf.editorWidgetSetup( vl, fieldName ); }
void QgsRelationEditorWidget::addFeature() { QgsAttributeMap keyAttrs; const QgsVectorLayerTools *vlTools = mEditorContext.vectorLayerTools(); if ( mNmRelation.isValid() ) { // n:m Relation: first let the user create a new feature on the other table // and autocreate a new linking feature. QgsFeature f; if ( vlTools->addFeature( mNmRelation.referencedLayer(), QgsAttributeMap(), QgsGeometry(), &f ) ) { // Fields of the linking table const QgsFields fields = mRelation.referencingLayer()->fields(); // Expression context for the linking table QgsExpressionContext context = mRelation.referencingLayer()->createExpressionContext(); QgsAttributeMap linkAttributes; Q_FOREACH ( const QgsRelation::FieldPair &fieldPair, mRelation.fieldPairs() ) { int index = fields.indexOf( fieldPair.first ); linkAttributes.insert( index, mFeature.attribute( fieldPair.second ) ); } Q_FOREACH ( const QgsRelation::FieldPair &fieldPair, mNmRelation.fieldPairs() ) { int index = fields.indexOf( fieldPair.first ); linkAttributes.insert( index, f.attribute( fieldPair.second ) ); } QgsFeature linkFeature = QgsVectorLayerUtils::createFeature( mRelation.referencingLayer(), QgsGeometry(), linkAttributes, &context ); mRelation.referencingLayer()->addFeature( linkFeature ); updateUi(); } }
void QgsAttributeTableConfig::update( const QgsFields &fields ) { QStringList columns; bool containsActionColumn = false; for ( int i = mColumns.count() - 1; i >= 0; --i ) { const ColumnConfig &column = mColumns.at( i ); if ( column.type == Field ) { if ( fields.indexOf( column.name ) == -1 ) { mColumns.remove( i ); } else { columns.append( column.name ); } } else if ( column.type == Action ) { containsActionColumn = true; } } for ( const auto &field : fields ) { if ( !columns.contains( field.name() ) ) { ColumnConfig newColumn; newColumn.hidden = false; newColumn.type = Field; newColumn.name = field.name(); mColumns.append( newColumn ); } } if ( !containsActionColumn ) { ColumnConfig actionConfig; actionConfig.type = Action; actionConfig.hidden = true; mColumns.append( actionConfig ); } }