int QgsAuxiliaryLayer::createProperty( QgsDiagramLayerSettings::Property property, QgsVectorLayer *layer ) { int index = -1; if ( layer && layer->diagramLayerSettings() && layer->auxiliaryLayer() ) { const QgsPropertyDefinition def = layer->diagramLayerSettings()->propertyDefinitions()[property]; if ( layer->auxiliaryLayer()->addAuxiliaryField( def ) ) { const QString fieldName = nameFromProperty( def, true ); const QgsProperty prop = QgsProperty::fromField( fieldName ); QgsDiagramLayerSettings settings( *layer->diagramLayerSettings() ); QgsPropertyCollection c = settings.dataDefinedProperties(); c.setProperty( property, prop ); settings.setDataDefinedProperties( c ); layer->setDiagramLayerSettings( settings ); emit layer->styleChanged(); index = layer->fields().lookupField( fieldName ); } } return index; }
int QgsAuxiliaryLayer::createProperty( QgsPalLayerSettings::Property property, QgsVectorLayer *layer ) { int index = -1; if ( layer && layer->labeling() && layer->auxiliaryLayer() ) { // property definition are identical whatever the provider id const QgsPropertyDefinition def = layer->labeling()->settings().propertyDefinitions()[property]; const QString fieldName = nameFromProperty( def, true ); layer->auxiliaryLayer()->addAuxiliaryField( def ); if ( layer->auxiliaryLayer()->indexOfPropertyDefinition( def ) >= 0 ) { const QgsProperty prop = QgsProperty::fromField( fieldName ); for ( const QString &providerId : layer->labeling()->subProviders() ) { QgsPalLayerSettings *settings = new QgsPalLayerSettings( layer->labeling()->settings( providerId ) ); QgsPropertyCollection c = settings->dataDefinedProperties(); c.setProperty( property, prop ); settings->setDataDefinedProperties( c ); layer->labeling()->setSettings( settings, providerId ); } emit layer->styleChanged(); } index = layer->fields().lookupField( fieldName ); } return index; }
bool QgsAuxiliaryLayer::addAuxiliaryField( const QgsPropertyDefinition &definition ) { if ( ( definition.name().isEmpty() && definition.comment().isEmpty() ) || exists( definition ) ) return false; const QgsField af = createAuxiliaryField( definition ); const bool rc = addAttribute( af ); updateFields(); mLayer->updateFields(); if ( rc ) { int auxIndex = indexOfPropertyDefinition( definition ); int index = mLayer->fields().indexOf( nameFromProperty( definition, true ) ); if ( index >= 0 && auxIndex >= 0 ) { if ( isHiddenProperty( auxIndex ) ) { // update editor widget QgsEditorWidgetSetup setup = QgsEditorWidgetSetup( QStringLiteral( "Hidden" ), QVariantMap() ); setEditorWidgetSetup( auxIndex, setup ); // column is hidden QgsAttributeTableConfig attrCfg = mLayer->attributeTableConfig(); attrCfg.update( mLayer->fields() ); QVector<QgsAttributeTableConfig::ColumnConfig> columns = attrCfg.columns(); QVector<QgsAttributeTableConfig::ColumnConfig>::iterator it; for ( it = columns.begin(); it != columns.end(); ++it ) { if ( it->name.compare( mLayer->fields().field( index ).name() ) == 0 ) it->hidden = true; } attrCfg.setColumns( columns ); mLayer->setAttributeTableConfig( attrCfg ); } else if ( definition.standardTemplate() == QgsPropertyDefinition::ColorNoAlpha || definition.standardTemplate() == QgsPropertyDefinition::ColorWithAlpha ) { QgsEditorWidgetSetup setup = QgsEditorWidgetSetup( QStringLiteral( "Color" ), QVariantMap() ); setEditorWidgetSetup( auxIndex, setup ); } mLayer->setEditorWidgetSetup( index, editorWidgetSetup( auxIndex ) ); } } return rc; }
QgsField QgsAuxiliaryLayer::createAuxiliaryField( const QgsPropertyDefinition &def ) { QgsField afield; if ( !def.name().isEmpty() || !def.comment().isEmpty() ) { QVariant::Type type = QVariant::Invalid; QString typeName; int len( 0 ), precision( 0 ); switch ( def.dataType() ) { case QgsPropertyDefinition::DataTypeString: type = QVariant::String; len = 50; typeName = "String"; break; case QgsPropertyDefinition::DataTypeNumeric: type = QVariant::Double; len = 0; precision = 0; typeName = "Real"; break; case QgsPropertyDefinition::DataTypeBoolean: type = QVariant::Int; // sqlite does not have a bool type typeName = "Integer"; break; } afield.setType( type ); afield.setName( nameFromProperty( def ) ); afield.setTypeName( typeName ); afield.setLength( len ); afield.setPrecision( precision ); } return afield; }
int QgsAuxiliaryLayer::indexOfPropertyDefinition( const QgsPropertyDefinition &def ) const { return fields().indexOf( nameFromProperty( def ) ); }