mirror of
https://github.com/qgis/QGIS.git
synced 2025-04-13 00:03:09 -04:00
Remove QgsAuxiliaryField class
This commit is contained in:
parent
fc0ebb783d
commit
7483c6e95f
@ -12,53 +12,6 @@
|
||||
|
||||
|
||||
|
||||
class QgsAuxiliaryField : QgsField
|
||||
{
|
||||
%Docstring
|
||||
|
||||
|
||||
Class allowing to manage fields from of auxiliary layers
|
||||
|
||||
.. versionadded:: 3.0
|
||||
%End
|
||||
|
||||
%TypeHeaderCode
|
||||
#include "qgsauxiliarystorage.h"
|
||||
%End
|
||||
public:
|
||||
|
||||
explicit QgsAuxiliaryField( const QgsPropertyDefinition &def );
|
||||
%Docstring
|
||||
Constructor
|
||||
|
||||
\param def Definition of the property to be stored by this auxiliary
|
||||
field.
|
||||
%End
|
||||
|
||||
virtual ~QgsAuxiliaryField();
|
||||
%Docstring
|
||||
Destructor
|
||||
%End
|
||||
|
||||
QgsPropertyDefinition propertyDefinition() const;
|
||||
%Docstring
|
||||
Returns the property definition corresponding to this field.
|
||||
:rtype: QgsPropertyDefinition
|
||||
%End
|
||||
|
||||
static QString nameFromProperty( const QgsPropertyDefinition &def, bool joined = false );
|
||||
%Docstring
|
||||
Returns the name of the auxiliary field for a property definition.
|
||||
|
||||
:return: def The property definition
|
||||
:return: joined The join prefix is tok into account if true
|
||||
:rtype: str
|
||||
%End
|
||||
|
||||
};
|
||||
|
||||
typedef QList<QgsAuxiliaryField> QgsAuxiliaryFields;
|
||||
|
||||
class QgsAuxiliaryLayer : QgsVectorLayer
|
||||
{
|
||||
%Docstring
|
||||
@ -166,10 +119,10 @@ class QgsAuxiliaryLayer : QgsVectorLayer
|
||||
:rtype: bool
|
||||
%End
|
||||
|
||||
QgsAuxiliaryFields auxiliaryFields() const;
|
||||
QgsFields auxiliaryFields() const;
|
||||
%Docstring
|
||||
Returns a list of all auxiliary fields currently managed by the layer.
|
||||
:rtype: QgsAuxiliaryFields
|
||||
:rtype: QgsFields
|
||||
%End
|
||||
|
||||
bool save();
|
||||
@ -200,7 +153,7 @@ class QgsAuxiliaryLayer : QgsVectorLayer
|
||||
:rtype: bool
|
||||
%End
|
||||
|
||||
int indexOfProperty( const QgsPropertyDefinition &definition ) const;
|
||||
int indexOfPropertyDefinition( const QgsPropertyDefinition &definition ) const;
|
||||
%Docstring
|
||||
Returns the index of the auxiliary field for a specific property
|
||||
definition.
|
||||
@ -219,8 +172,6 @@ class QgsAuxiliaryLayer : QgsVectorLayer
|
||||
happened.
|
||||
|
||||
\param index The index of the field
|
||||
|
||||
.. versionadded:: 3.0
|
||||
:rtype: int
|
||||
%End
|
||||
|
||||
@ -229,14 +180,12 @@ class QgsAuxiliaryLayer : QgsVectorLayer
|
||||
Returns the property definition fir the underlying field index.
|
||||
|
||||
\param index The index of the field
|
||||
|
||||
.. versionadded:: 3.0
|
||||
:rtype: QgsPropertyDefinition
|
||||
%End
|
||||
|
||||
static int createProperty( QgsPalLayerSettings::Property property, const QString &providerId, QgsVectorLayer *vlayer );
|
||||
%Docstring
|
||||
Create if necessary a new auxiliary field for a PAL property and
|
||||
Creates if necessary a new auxiliary field for a PAL property and
|
||||
activate this property in settings.
|
||||
|
||||
\param property The property to create
|
||||
@ -249,7 +198,7 @@ class QgsAuxiliaryLayer : QgsVectorLayer
|
||||
|
||||
static int createProperty( QgsDiagramLayerSettings::Property property, QgsVectorLayer *vlayer );
|
||||
%Docstring
|
||||
Create if necessary a new auxiliary field for a diagram's property and
|
||||
Creates if necessary a new auxiliary field for a diagram's property and
|
||||
activate this this property in settings.
|
||||
|
||||
\param property The property to create
|
||||
@ -259,6 +208,39 @@ class QgsAuxiliaryLayer : QgsVectorLayer
|
||||
:rtype: int
|
||||
%End
|
||||
|
||||
static QgsField createAuxiliaryField( const QgsPropertyDefinition &definition );
|
||||
%Docstring
|
||||
Creates a new auxiliary field from a property definition.
|
||||
|
||||
\param definition The property definition of the auxiliary field to create
|
||||
:rtype: QgsField
|
||||
%End
|
||||
|
||||
static QgsField createAuxiliaryField( const QgsField &field );
|
||||
%Docstring
|
||||
Creates a new auxiliary field from a field.
|
||||
|
||||
\param field The field to use to create the auxiliary field
|
||||
:rtype: QgsField
|
||||
%End
|
||||
|
||||
static QString nameFromProperty( const QgsPropertyDefinition &def, bool joined = false );
|
||||
%Docstring
|
||||
Returns the name of the auxiliary field for a property definition.
|
||||
|
||||
\param def The property definition
|
||||
\param joined The join prefix is taken into account if true
|
||||
:rtype: str
|
||||
%End
|
||||
|
||||
static QgsPropertyDefinition propertyDefinitionFromField( const QgsField &field );
|
||||
%Docstring
|
||||
Returns the property definition from an auxiliary field.
|
||||
|
||||
\param field The auxiliary field
|
||||
:rtype: QgsPropertyDefinition
|
||||
%End
|
||||
|
||||
};
|
||||
|
||||
|
||||
|
@ -1075,7 +1075,7 @@ void QgsDiagramProperties::createAuxiliaryField()
|
||||
|
||||
// update property with join field name from auxiliary storage
|
||||
QgsProperty property = button->toProperty();
|
||||
property.setField( QgsAuxiliaryField::nameFromProperty( def, true ) );
|
||||
property.setField( QgsAuxiliaryLayer::nameFromProperty( def, true ) );
|
||||
property.setActive( true );
|
||||
button->updateFieldLists();
|
||||
button->setToProperty( property );
|
||||
|
@ -638,7 +638,7 @@ void QgsLabelingGui::createAuxiliaryField()
|
||||
|
||||
// update property with join field name from auxiliary storage
|
||||
QgsProperty property = button->toProperty();
|
||||
property.setField( QgsAuxiliaryField::nameFromProperty( def, true ) );
|
||||
property.setField( QgsAuxiliaryLayer::nameFromProperty( def, true ) );
|
||||
property.setActive( true );
|
||||
button->updateFieldLists();
|
||||
button->setToProperty( property );
|
||||
|
@ -1529,9 +1529,9 @@ void QgsVectorLayerProperties::updateAuxiliaryStoragePage( bool reset )
|
||||
|
||||
// add fields
|
||||
mAuxiliaryStorageFieldsTree->clear();
|
||||
Q_FOREACH ( const QgsAuxiliaryField &field, alayer->auxiliaryFields() )
|
||||
Q_FOREACH ( const QgsField &field, alayer->auxiliaryFields() )
|
||||
{
|
||||
const QgsPropertyDefinition prop = field.propertyDefinition();
|
||||
const QgsPropertyDefinition prop = QgsAuxiliaryLayer::propertyDefinitionFromField( field );
|
||||
QTreeWidgetItem *item = new QTreeWidgetItem();
|
||||
|
||||
item->setText( 0, prop.origin() );
|
||||
@ -1620,7 +1620,7 @@ void QgsVectorLayerProperties::onAuxiliaryLayerDelete()
|
||||
// defined buttons
|
||||
while ( alayer->auxiliaryFields().size() > 0 )
|
||||
{
|
||||
QgsAuxiliaryField aField = alayer->auxiliaryFields()[0];
|
||||
QgsField aField = alayer->auxiliaryFields()[0];
|
||||
deleteAuxiliaryField( alayer->fields().indexOf( aField.name() ) );
|
||||
}
|
||||
|
||||
@ -1661,7 +1661,7 @@ void QgsVectorLayerProperties::onAuxiliaryLayerDeleteField()
|
||||
def.setName( item->text( 1 ) );
|
||||
def.setComment( item->text( 2 ) );
|
||||
|
||||
const QString fieldName = QgsAuxiliaryField::nameFromProperty( def );
|
||||
const QString fieldName = QgsAuxiliaryLayer::nameFromProperty( def );
|
||||
|
||||
const int index = mLayer->auxiliaryLayer()->fields().indexOf( fieldName );
|
||||
if ( index < 0 )
|
||||
|
@ -55,23 +55,351 @@ const QVector<QgsPalLayerSettings::Property> palHiddenProperties
|
||||
QgsPalLayerSettings::AlwaysShow
|
||||
};
|
||||
|
||||
QgsAuxiliaryField::QgsAuxiliaryField( const QgsPropertyDefinition &def )
|
||||
: QgsField()
|
||||
, mPropertyDefinition( def )
|
||||
//
|
||||
// QgsAuxiliaryLayer
|
||||
//
|
||||
|
||||
QgsAuxiliaryLayer::QgsAuxiliaryLayer( const QString &pkField, const QString &filename, const QString &table, QgsVectorLayer *vlayer )
|
||||
: QgsVectorLayer( QString( "%1|layername=%2" ).arg( filename, table ), QString( "%1_auxiliarystorage" ).arg( table ), "ogr" )
|
||||
, mFileName( filename )
|
||||
, mTable( table )
|
||||
, mLayer( vlayer )
|
||||
{
|
||||
init( def );
|
||||
// init join info
|
||||
mJoinInfo.setPrefix( AS_JOINPREFIX );
|
||||
mJoinInfo.setJoinLayer( this );
|
||||
mJoinInfo.setJoinFieldName( AS_JOINFIELD );
|
||||
mJoinInfo.setTargetFieldName( pkField );
|
||||
mJoinInfo.setEditable( true );
|
||||
mJoinInfo.setUpsertOnEdit( true );
|
||||
mJoinInfo.setCascadedDelete( true );
|
||||
mJoinInfo.setJoinFieldNamesBlackList( QStringList() << QStringLiteral( "rowid" ) ); // introduced by ogr provider
|
||||
}
|
||||
|
||||
QgsAuxiliaryField::QgsAuxiliaryField( const QgsField &f )
|
||||
QgsAuxiliaryLayer *QgsAuxiliaryLayer::clone( QgsVectorLayer *target ) const
|
||||
{
|
||||
QgsAuxiliaryStorage::duplicateTable( source(), target->id() );
|
||||
return new QgsAuxiliaryLayer( mJoinInfo.targetFieldName(), mFileName, target->id(), target );
|
||||
}
|
||||
|
||||
bool QgsAuxiliaryLayer::clear()
|
||||
{
|
||||
bool rc = deleteFeatures( allFeatureIds() );
|
||||
commitChanges();
|
||||
startEditing();
|
||||
return rc;
|
||||
}
|
||||
|
||||
QgsVectorLayer *QgsAuxiliaryLayer::toSpatialLayer() const
|
||||
{
|
||||
QgsVectorLayer *layer = QgsMemoryProviderUtils::createMemoryLayer( QStringLiteral( "auxiliary_layer" ), fields(), mLayer->wkbType(), mLayer->crs() );
|
||||
|
||||
QString pkField = mJoinInfo.targetFieldName();
|
||||
QgsFeature joinFeature;
|
||||
QgsFeature targetFeature;
|
||||
QgsFeatureIterator it = getFeatures();
|
||||
|
||||
layer->startEditing();
|
||||
while ( it.nextFeature( joinFeature ) )
|
||||
{
|
||||
QString filter = QgsExpression::createFieldEqualityExpression( pkField, joinFeature.attribute( AS_JOINFIELD ) );
|
||||
|
||||
QgsFeatureRequest request;
|
||||
request.setFilterExpression( filter );
|
||||
|
||||
mLayer->getFeatures( request ).nextFeature( targetFeature );
|
||||
|
||||
if ( targetFeature.isValid() )
|
||||
{
|
||||
QgsFeature newFeature( joinFeature );
|
||||
newFeature.setGeometry( targetFeature.geometry() );
|
||||
layer->addFeature( newFeature );
|
||||
}
|
||||
}
|
||||
layer->commitChanges();
|
||||
|
||||
return layer;
|
||||
}
|
||||
|
||||
QgsVectorLayerJoinInfo QgsAuxiliaryLayer::joinInfo() const
|
||||
{
|
||||
return mJoinInfo;
|
||||
}
|
||||
|
||||
bool QgsAuxiliaryLayer::exists( const QgsPropertyDefinition &definition ) const
|
||||
{
|
||||
return ( indexOfPropertyDefinition( definition ) >= 0 );
|
||||
}
|
||||
|
||||
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();
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
QgsFields QgsAuxiliaryLayer::auxiliaryFields() const
|
||||
{
|
||||
QgsFields afields;
|
||||
|
||||
for ( int i = 2; i < fields().count(); i++ ) // ignore rowid and PK field
|
||||
afields.append( createAuxiliaryField( fields().field( i ) ) );
|
||||
|
||||
return afields;
|
||||
}
|
||||
|
||||
bool QgsAuxiliaryLayer::deleteAttribute( int attr )
|
||||
{
|
||||
QgsVectorLayer::deleteAttribute( attr );
|
||||
bool rc = commitChanges();
|
||||
startEditing();
|
||||
return rc;
|
||||
}
|
||||
|
||||
bool QgsAuxiliaryLayer::save()
|
||||
{
|
||||
bool rc = false;
|
||||
|
||||
if ( isEditable() )
|
||||
{
|
||||
rc = commitChanges();
|
||||
}
|
||||
|
||||
startEditing();
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
||||
int QgsAuxiliaryLayer::createProperty( QgsPalLayerSettings::Property property, const QString &providerId, QgsVectorLayer *layer )
|
||||
{
|
||||
int index = -1;
|
||||
|
||||
if ( layer && layer->labeling() && layer->auxiliaryLayer() )
|
||||
{
|
||||
const QgsPropertyDefinition def = layer->labeling()->settings( providerId ).propertyDefinitions()[property];
|
||||
const QString fieldName = nameFromProperty( def, true );
|
||||
|
||||
if ( layer->auxiliaryLayer()->addAuxiliaryField( def ) )
|
||||
{
|
||||
const QgsProperty prop = QgsProperty::fromField( fieldName );
|
||||
|
||||
QgsPalLayerSettings *settings = new QgsPalLayerSettings( layer->labeling()->settings( providerId ) );
|
||||
|
||||
QgsPropertyCollection c = settings->dataDefinedProperties();
|
||||
c.setProperty( property, prop );
|
||||
settings->setDataDefinedProperties( c );
|
||||
|
||||
layer->labeling()->setSettings( settings, providerId );
|
||||
}
|
||||
|
||||
index = layer->fields().lookupField( fieldName );
|
||||
}
|
||||
|
||||
return index;
|
||||
}
|
||||
|
||||
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 );
|
||||
|
||||
index = layer->fields().lookupField( fieldName );
|
||||
}
|
||||
}
|
||||
|
||||
return index;
|
||||
}
|
||||
|
||||
bool QgsAuxiliaryLayer::isHiddenProperty( int index ) const
|
||||
{
|
||||
bool hidden = false;
|
||||
QgsPropertyDefinition def = propertyDefinitionFromIndex( index );
|
||||
|
||||
if ( def.origin().compare( "labeling" ) == 0 )
|
||||
{
|
||||
Q_FOREACH ( const QgsPalLayerSettings::Property &p, palHiddenProperties )
|
||||
{
|
||||
const QString propName = QgsPalLayerSettings::propertyDefinitions()[ p ].name();
|
||||
if ( propName.compare( def.name() ) == 0 )
|
||||
{
|
||||
hidden = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return hidden;
|
||||
}
|
||||
|
||||
int QgsAuxiliaryLayer::propertyFromIndex( int index ) const
|
||||
{
|
||||
int p = -1;
|
||||
QgsPropertyDefinition aDef = propertyDefinitionFromIndex( index );
|
||||
|
||||
if ( aDef.origin().compare( "labeling" ) == 0 )
|
||||
{
|
||||
const QgsPropertiesDefinition defs = QgsPalLayerSettings::propertyDefinitions();
|
||||
QgsPropertiesDefinition::const_iterator it = defs.constBegin();
|
||||
for ( ; it != defs.constEnd(); ++it )
|
||||
{
|
||||
if ( it->name().compare( aDef.name(), Qt::CaseInsensitive ) == 0 )
|
||||
{
|
||||
p = it.key();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if ( aDef.origin().compare( "symbol" ) == 0 )
|
||||
{
|
||||
const QgsPropertiesDefinition defs = QgsSymbolLayer::propertyDefinitions();
|
||||
QgsPropertiesDefinition::const_iterator it = defs.constBegin();
|
||||
for ( ; it != defs.constEnd(); ++it )
|
||||
{
|
||||
if ( it->name().compare( aDef.name(), Qt::CaseInsensitive ) == 0 )
|
||||
{
|
||||
p = it.key();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return p;
|
||||
}
|
||||
|
||||
QgsPropertyDefinition QgsAuxiliaryLayer::propertyDefinitionFromIndex( int index ) const
|
||||
{
|
||||
return propertyDefinitionFromField( fields().field( index ) );
|
||||
}
|
||||
|
||||
int QgsAuxiliaryLayer::indexOfPropertyDefinition( const QgsPropertyDefinition &def ) const
|
||||
{
|
||||
return fields().indexOf( nameFromProperty( def ) );
|
||||
}
|
||||
|
||||
QString QgsAuxiliaryLayer::nameFromProperty( const QgsPropertyDefinition &def, bool joined )
|
||||
{
|
||||
QString fieldName = def.origin();
|
||||
|
||||
if ( !def.name().isEmpty() )
|
||||
fieldName = QString( "%1_%2" ).arg( fieldName, def.name().toLower() );
|
||||
|
||||
if ( !def.comment().isEmpty() )
|
||||
fieldName = QString( "%1_%2" ).arg( fieldName ).arg( def.comment() );
|
||||
|
||||
if ( joined )
|
||||
fieldName = QString( "%1%2" ).arg( AS_JOINPREFIX, fieldName );
|
||||
|
||||
return fieldName;
|
||||
}
|
||||
|
||||
QgsField QgsAuxiliaryLayer::createAuxiliaryField( const QgsPropertyDefinition &def )
|
||||
{
|
||||
QgsField afield;
|
||||
|
||||
if ( !def.name().isEmpty() || !def.comment().isEmpty() )
|
||||
{
|
||||
QVariant::Type type;
|
||||
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;
|
||||
}
|
||||
|
||||
QgsPropertyDefinition QgsAuxiliaryLayer::propertyDefinitionFromField( const QgsField &f )
|
||||
{
|
||||
QgsPropertyDefinition def;
|
||||
const QStringList parts = f.name().split( '_' );
|
||||
|
||||
if ( parts.size() <= 1 )
|
||||
return;
|
||||
return def;
|
||||
|
||||
const QString origin = parts[0];
|
||||
const QString propertyName = parts[1];
|
||||
QgsPropertyDefinition def;
|
||||
|
||||
if ( origin.compare( "labeling", Qt::CaseInsensitive ) == 0 )
|
||||
{
|
||||
@ -121,351 +449,21 @@ QgsAuxiliaryField::QgsAuxiliaryField( const QgsField &f )
|
||||
def.setComment( propertyName );
|
||||
}
|
||||
|
||||
return def;
|
||||
}
|
||||
|
||||
QgsField QgsAuxiliaryLayer::createAuxiliaryField( const QgsField &field )
|
||||
{
|
||||
QgsPropertyDefinition def = propertyDefinitionFromField( field );
|
||||
QgsField afield;
|
||||
|
||||
if ( !def.name().isEmpty() || !def.comment().isEmpty() )
|
||||
{
|
||||
init( def );
|
||||
setTypeName( f.typeName() );
|
||||
mPropertyDefinition = def;
|
||||
}
|
||||
}
|
||||
|
||||
void QgsAuxiliaryField::init( const QgsPropertyDefinition &def )
|
||||
{
|
||||
if ( !def.name().isEmpty() || !def.comment().isEmpty() )
|
||||
{
|
||||
QVariant::Type type;
|
||||
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;
|
||||
}
|
||||
|
||||
setType( type );
|
||||
setName( nameFromProperty( def ) );
|
||||
setTypeName( typeName );
|
||||
setLength( len );
|
||||
setPrecision( precision );
|
||||
}
|
||||
}
|
||||
|
||||
bool QgsAuxiliaryLayer::clear()
|
||||
{
|
||||
bool rc = deleteFeatures( allFeatureIds() );
|
||||
commitChanges();
|
||||
startEditing();
|
||||
return rc;
|
||||
}
|
||||
|
||||
QString QgsAuxiliaryField::nameFromProperty( const QgsPropertyDefinition &def, bool joined )
|
||||
{
|
||||
QString fieldName = def.origin();
|
||||
|
||||
if ( !def.name().isEmpty() )
|
||||
fieldName = QString( "%1_%2" ).arg( fieldName, def.name().toLower() );
|
||||
|
||||
if ( !def.comment().isEmpty() )
|
||||
fieldName = QString( "%1_%2" ).arg( fieldName ).arg( def.comment() );
|
||||
|
||||
if ( joined )
|
||||
fieldName = QString( "%1%2" ).arg( AS_JOINPREFIX, fieldName );
|
||||
|
||||
return fieldName;
|
||||
}
|
||||
|
||||
QgsPropertyDefinition QgsAuxiliaryField::propertyDefinition() const
|
||||
{
|
||||
return mPropertyDefinition;
|
||||
}
|
||||
|
||||
//
|
||||
// QgsAuxiliaryLayer
|
||||
//
|
||||
|
||||
QgsAuxiliaryLayer::QgsAuxiliaryLayer( const QString &pkField, const QString &filename, const QString &table, QgsVectorLayer *vlayer )
|
||||
: QgsVectorLayer( QString( "%1|layername=%2" ).arg( filename, table ), QString( "%1_auxiliarystorage" ).arg( table ), "ogr" )
|
||||
, mFileName( filename )
|
||||
, mTable( table )
|
||||
, mLayer( vlayer )
|
||||
{
|
||||
// init join info
|
||||
mJoinInfo.setPrefix( AS_JOINPREFIX );
|
||||
mJoinInfo.setJoinLayer( this );
|
||||
mJoinInfo.setJoinFieldName( AS_JOINFIELD );
|
||||
mJoinInfo.setTargetFieldName( pkField );
|
||||
mJoinInfo.setEditable( true );
|
||||
mJoinInfo.setUpsertOnEdit( true );
|
||||
mJoinInfo.setCascadedDelete( true );
|
||||
mJoinInfo.setJoinFieldNamesBlackList( QStringList() << QStringLiteral( "rowid" ) ); // introduced by ogr provider
|
||||
}
|
||||
|
||||
QgsAuxiliaryLayer *QgsAuxiliaryLayer::clone( QgsVectorLayer *target ) const
|
||||
{
|
||||
QgsAuxiliaryStorage::duplicateTable( source(), target->id() );
|
||||
return new QgsAuxiliaryLayer( mJoinInfo.targetFieldName(), mFileName, target->id(), target );
|
||||
}
|
||||
|
||||
QgsVectorLayer *QgsAuxiliaryLayer::toSpatialLayer() const
|
||||
{
|
||||
QgsVectorLayer *layer = QgsMemoryProviderUtils::createMemoryLayer( QStringLiteral( "auxiliary_layer" ), fields(), mLayer->wkbType(), mLayer->crs() );
|
||||
|
||||
QString pkField = mJoinInfo.targetFieldName();
|
||||
QgsFeature joinFeature;
|
||||
QgsFeature targetFeature;
|
||||
QgsFeatureIterator it = getFeatures();
|
||||
|
||||
layer->startEditing();
|
||||
while ( it.nextFeature( joinFeature ) )
|
||||
{
|
||||
QString filter = QgsExpression::createFieldEqualityExpression( pkField, joinFeature.attribute( AS_JOINFIELD ) );
|
||||
|
||||
QgsFeatureRequest request;
|
||||
request.setFilterExpression( filter );
|
||||
|
||||
mLayer->getFeatures( request ).nextFeature( targetFeature );
|
||||
|
||||
if ( targetFeature.isValid() )
|
||||
{
|
||||
QgsFeature newFeature( joinFeature );
|
||||
newFeature.setGeometry( targetFeature.geometry() );
|
||||
layer->addFeature( newFeature );
|
||||
}
|
||||
}
|
||||
layer->commitChanges();
|
||||
|
||||
return layer;
|
||||
}
|
||||
|
||||
QgsVectorLayerJoinInfo QgsAuxiliaryLayer::joinInfo() const
|
||||
{
|
||||
return mJoinInfo;
|
||||
}
|
||||
|
||||
bool QgsAuxiliaryLayer::exists( const QgsPropertyDefinition &definition ) const
|
||||
{
|
||||
return ( indexOfProperty( definition ) >= 0 );
|
||||
}
|
||||
|
||||
bool QgsAuxiliaryLayer::addAuxiliaryField( const QgsPropertyDefinition &definition )
|
||||
{
|
||||
if ( ( definition.name().isEmpty() && definition.comment().isEmpty() ) || exists( definition ) )
|
||||
return false;
|
||||
|
||||
const QgsAuxiliaryField af( definition );
|
||||
const bool rc = addAttribute( af );
|
||||
updateFields();
|
||||
|
||||
if ( rc )
|
||||
{
|
||||
int auxIndex = indexOfProperty( definition );
|
||||
int index = mLayer->fields().indexOf( QgsAuxiliaryField::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 ) );
|
||||
}
|
||||
afield = createAuxiliaryField( def );
|
||||
afield.setTypeName( field.typeName() );
|
||||
}
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
||||
QgsAuxiliaryFields QgsAuxiliaryLayer::auxiliaryFields() const
|
||||
{
|
||||
QgsAuxiliaryFields afields;
|
||||
|
||||
for ( int i = 2; i < fields().count(); i++ ) // ignore rowid and PK field
|
||||
afields.append( QgsAuxiliaryField( fields().field( i ) ) );
|
||||
|
||||
return afields;
|
||||
}
|
||||
|
||||
bool QgsAuxiliaryLayer::deleteAttribute( int attr )
|
||||
{
|
||||
QgsVectorLayer::deleteAttribute( attr );
|
||||
bool rc = commitChanges();
|
||||
startEditing();
|
||||
return rc;
|
||||
}
|
||||
|
||||
bool QgsAuxiliaryLayer::save()
|
||||
{
|
||||
bool rc = false;
|
||||
|
||||
if ( isEditable() )
|
||||
{
|
||||
rc = commitChanges();
|
||||
}
|
||||
|
||||
startEditing();
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
||||
int QgsAuxiliaryLayer::createProperty( QgsPalLayerSettings::Property property, const QString &providerId, QgsVectorLayer *layer )
|
||||
{
|
||||
int index = -1;
|
||||
|
||||
if ( layer && layer->labeling() && layer->auxiliaryLayer() )
|
||||
{
|
||||
const QgsPropertyDefinition def = layer->labeling()->settings( providerId ).propertyDefinitions()[property];
|
||||
const QString fieldName = QgsAuxiliaryField::nameFromProperty( def, true );
|
||||
|
||||
if ( layer->auxiliaryLayer()->addAuxiliaryField( def ) )
|
||||
{
|
||||
const QgsProperty prop = QgsProperty::fromField( fieldName );
|
||||
|
||||
QgsPalLayerSettings *settings = new QgsPalLayerSettings( layer->labeling()->settings( providerId ) );
|
||||
|
||||
QgsPropertyCollection c = settings->dataDefinedProperties();
|
||||
c.setProperty( property, prop );
|
||||
settings->setDataDefinedProperties( c );
|
||||
|
||||
layer->labeling()->setSettings( settings, providerId );
|
||||
}
|
||||
|
||||
index = layer->fields().lookupField( fieldName );
|
||||
}
|
||||
|
||||
return index;
|
||||
}
|
||||
|
||||
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 = QgsAuxiliaryField::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 );
|
||||
|
||||
index = layer->fields().lookupField( fieldName );
|
||||
}
|
||||
}
|
||||
|
||||
return index;
|
||||
}
|
||||
|
||||
bool QgsAuxiliaryLayer::isHiddenProperty( int index ) const
|
||||
{
|
||||
bool hidden = false;
|
||||
|
||||
QgsAuxiliaryField aField( fields().field( index ) );
|
||||
QgsPropertyDefinition def = aField.propertyDefinition();
|
||||
|
||||
if ( def.origin().compare( "labeling" ) == 0 )
|
||||
{
|
||||
Q_FOREACH ( const QgsPalLayerSettings::Property &p, palHiddenProperties )
|
||||
{
|
||||
const QString propName = QgsPalLayerSettings::propertyDefinitions()[ p ].name();
|
||||
if ( propName.compare( def.name() ) == 0 )
|
||||
{
|
||||
hidden = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return hidden;
|
||||
}
|
||||
|
||||
int QgsAuxiliaryLayer::propertyFromIndex( int index ) const
|
||||
{
|
||||
int p = -1;
|
||||
QgsAuxiliaryField aField( fields().field( index ) );
|
||||
QgsPropertyDefinition aDef = aField.propertyDefinition();
|
||||
|
||||
if ( aDef.origin().compare( "labeling" ) == 0 )
|
||||
{
|
||||
const QgsPropertiesDefinition defs = QgsPalLayerSettings::propertyDefinitions();
|
||||
QgsPropertiesDefinition::const_iterator it = defs.constBegin();
|
||||
for ( ; it != defs.constEnd(); ++it )
|
||||
{
|
||||
if ( it->name().compare( aDef.name(), Qt::CaseInsensitive ) == 0 )
|
||||
{
|
||||
p = it.key();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if ( aDef.origin().compare( "symbol" ) == 0 )
|
||||
{
|
||||
const QgsPropertiesDefinition defs = QgsSymbolLayer::propertyDefinitions();
|
||||
QgsPropertiesDefinition::const_iterator it = defs.constBegin();
|
||||
for ( ; it != defs.constEnd(); ++it )
|
||||
{
|
||||
if ( it->name().compare( aDef.name(), Qt::CaseInsensitive ) == 0 )
|
||||
{
|
||||
p = it.key();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return p;
|
||||
}
|
||||
|
||||
QgsPropertyDefinition QgsAuxiliaryLayer::propertyDefinitionFromIndex( int index ) const
|
||||
{
|
||||
return QgsAuxiliaryField( fields().field( index ) ).propertyDefinition();
|
||||
}
|
||||
|
||||
int QgsAuxiliaryLayer::indexOfProperty( const QgsPropertyDefinition &def ) const
|
||||
{
|
||||
return fields().indexOf( QgsAuxiliaryField::nameFromProperty( def ) );
|
||||
return afield;
|
||||
}
|
||||
|
||||
//
|
||||
|
@ -31,57 +31,6 @@
|
||||
|
||||
class QgsProject;
|
||||
|
||||
/**
|
||||
* \class QgsAuxiliaryField
|
||||
*
|
||||
* \ingroup core
|
||||
*
|
||||
* \brief Class allowing to manage fields from of auxiliary layers
|
||||
*
|
||||
* \since QGIS 3.0
|
||||
*/
|
||||
class CORE_EXPORT QgsAuxiliaryField : public QgsField
|
||||
{
|
||||
public:
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
* \param def Definition of the property to be stored by this auxiliary
|
||||
* field.
|
||||
*/
|
||||
explicit QgsAuxiliaryField( const QgsPropertyDefinition &def );
|
||||
|
||||
/**
|
||||
* Destructor
|
||||
*/
|
||||
virtual ~QgsAuxiliaryField() = default;
|
||||
|
||||
/**
|
||||
* Returns the property definition corresponding to this field.
|
||||
*/
|
||||
QgsPropertyDefinition propertyDefinition() const;
|
||||
|
||||
/**
|
||||
* Returns the name of the auxiliary field for a property definition.
|
||||
*
|
||||
* \returns def The property definition
|
||||
* \returns joined The join prefix is tok into account if true
|
||||
*/
|
||||
static QString nameFromProperty( const QgsPropertyDefinition &def, bool joined = false );
|
||||
|
||||
private:
|
||||
QgsAuxiliaryField( const QgsField &f ); // only for auxiliary layer
|
||||
|
||||
void init( const QgsPropertyDefinition &def );
|
||||
|
||||
QgsPropertyDefinition mPropertyDefinition;
|
||||
|
||||
friend class QgsAuxiliaryLayer;
|
||||
};
|
||||
|
||||
typedef QList<QgsAuxiliaryField> QgsAuxiliaryFields;
|
||||
|
||||
/**
|
||||
* \class QgsAuxiliaryLayer
|
||||
*
|
||||
@ -191,7 +140,7 @@ class CORE_EXPORT QgsAuxiliaryLayer : public QgsVectorLayer
|
||||
/**
|
||||
* Returns a list of all auxiliary fields currently managed by the layer.
|
||||
*/
|
||||
QgsAuxiliaryFields auxiliaryFields() const;
|
||||
QgsFields auxiliaryFields() const;
|
||||
|
||||
/**
|
||||
* Commit changes and starts editing then.
|
||||
@ -226,7 +175,7 @@ class CORE_EXPORT QgsAuxiliaryLayer : public QgsVectorLayer
|
||||
*
|
||||
* \returns The index of the field corresponding to the property or -1
|
||||
*/
|
||||
int indexOfProperty( const QgsPropertyDefinition &definition ) const;
|
||||
int indexOfPropertyDefinition( const QgsPropertyDefinition &definition ) const;
|
||||
|
||||
/**
|
||||
* Returns the underlying property key for the field index. The key may be
|
||||
@ -235,8 +184,6 @@ class CORE_EXPORT QgsAuxiliaryLayer : public QgsVectorLayer
|
||||
* happened.
|
||||
*
|
||||
* \param index The index of the field
|
||||
*
|
||||
* \since QGIS 3.0
|
||||
*/
|
||||
int propertyFromIndex( int index ) const;
|
||||
|
||||
@ -244,13 +191,11 @@ class CORE_EXPORT QgsAuxiliaryLayer : public QgsVectorLayer
|
||||
* Returns the property definition fir the underlying field index.
|
||||
*
|
||||
* \param index The index of the field
|
||||
*
|
||||
* \since QGIS 3.0
|
||||
*/
|
||||
QgsPropertyDefinition propertyDefinitionFromIndex( int index ) const;
|
||||
|
||||
/**
|
||||
* Create if necessary a new auxiliary field for a PAL property and
|
||||
* Creates if necessary a new auxiliary field for a PAL property and
|
||||
* activate this property in settings.
|
||||
*
|
||||
* \param property The property to create
|
||||
@ -262,7 +207,7 @@ class CORE_EXPORT QgsAuxiliaryLayer : public QgsVectorLayer
|
||||
static int createProperty( QgsPalLayerSettings::Property property, const QString &providerId, QgsVectorLayer *vlayer );
|
||||
|
||||
/**
|
||||
* Create if necessary a new auxiliary field for a diagram's property and
|
||||
* Creates if necessary a new auxiliary field for a diagram's property and
|
||||
* activate this this property in settings.
|
||||
*
|
||||
* \param property The property to create
|
||||
@ -272,6 +217,35 @@ class CORE_EXPORT QgsAuxiliaryLayer : public QgsVectorLayer
|
||||
*/
|
||||
static int createProperty( QgsDiagramLayerSettings::Property property, QgsVectorLayer *vlayer );
|
||||
|
||||
/**
|
||||
* Creates a new auxiliary field from a property definition.
|
||||
*
|
||||
* \param definition The property definition of the auxiliary field to create
|
||||
*/
|
||||
static QgsField createAuxiliaryField( const QgsPropertyDefinition &definition );
|
||||
|
||||
/**
|
||||
* Creates a new auxiliary field from a field.
|
||||
*
|
||||
* \param field The field to use to create the auxiliary field
|
||||
*/
|
||||
static QgsField createAuxiliaryField( const QgsField &field );
|
||||
|
||||
/**
|
||||
* Returns the name of the auxiliary field for a property definition.
|
||||
*
|
||||
* \param def The property definition
|
||||
* \param joined The join prefix is taken into account if true
|
||||
*/
|
||||
static QString nameFromProperty( const QgsPropertyDefinition &def, bool joined = false );
|
||||
|
||||
/**
|
||||
* Returns the property definition from an auxiliary field.
|
||||
*
|
||||
* \param field The auxiliary field
|
||||
*/
|
||||
static QgsPropertyDefinition propertyDefinitionFromField( const QgsField &field );
|
||||
|
||||
private:
|
||||
QgsVectorLayerJoinInfo mJoinInfo;
|
||||
QString mFileName;
|
||||
|
@ -29,8 +29,8 @@ QgsNewAuxiliaryFieldDialog::QgsNewAuxiliaryFieldDialog( const QgsPropertyDefinit
|
||||
setupUi( this );
|
||||
|
||||
mType->addItem( tr( "String" ) );
|
||||
mType->addItem( tr( "Numeric" ) );
|
||||
mType->addItem( tr( "Boolean" ) );
|
||||
mType->addItem( tr( "Real" ) );
|
||||
mType->addItem( tr( "Integer" ) );
|
||||
|
||||
switch ( def.dataType() )
|
||||
{
|
||||
@ -38,10 +38,10 @@ QgsNewAuxiliaryFieldDialog::QgsNewAuxiliaryFieldDialog( const QgsPropertyDefinit
|
||||
mType->setCurrentIndex( mType->findText( tr( "String" ) ) );
|
||||
break;
|
||||
case QgsPropertyDefinition::DataTypeNumeric:
|
||||
mType->setCurrentIndex( mType->findText( tr( "Numeric" ) ) );
|
||||
mType->setCurrentIndex( mType->findText( tr( "Real" ) ) );
|
||||
break;
|
||||
case QgsPropertyDefinition::DataTypeBoolean:
|
||||
mType->setCurrentIndex( mType->findText( tr( "Boolean" ) ) );
|
||||
mType->setCurrentIndex( mType->findText( tr( "Integer" ) ) );
|
||||
break;
|
||||
}
|
||||
|
||||
@ -62,7 +62,7 @@ void QgsNewAuxiliaryFieldDialog::accept()
|
||||
{
|
||||
def.setDataType( QgsPropertyDefinition::DataTypeString );
|
||||
}
|
||||
else if ( mType->currentText().compare( tr( "Numeric" ) ) == 0 )
|
||||
else if ( mType->currentText().compare( tr( "Real" ) ) == 0 )
|
||||
{
|
||||
def.setDataType( QgsPropertyDefinition::DataTypeNumeric );
|
||||
}
|
||||
@ -74,7 +74,7 @@ void QgsNewAuxiliaryFieldDialog::accept()
|
||||
def.setOrigin( "user" );
|
||||
}
|
||||
|
||||
QString fieldName = QgsAuxiliaryField::nameFromProperty( def, true );
|
||||
QString fieldName = QgsAuxiliaryLayer::nameFromProperty( def, true );
|
||||
const int idx = mLayer->fields().lookupField( fieldName );
|
||||
if ( idx >= 0 )
|
||||
{
|
||||
|
@ -345,7 +345,7 @@ void QgsPropertyOverrideButton::aboutToShowMenu()
|
||||
mActionCreateAuxiliaryField->setChecked( false );
|
||||
if ( alayer && alayer->exists( mDefinition ) )
|
||||
{
|
||||
if ( mProperty.field() == QgsAuxiliaryField::nameFromProperty( mDefinition, true ) )
|
||||
if ( mProperty.field() == QgsAuxiliaryLayer::nameFromProperty( mDefinition, true ) )
|
||||
{
|
||||
mActionCreateAuxiliaryField->setEnabled( false );
|
||||
mActionCreateAuxiliaryField->setChecked( true );
|
||||
|
@ -150,7 +150,7 @@ void QgsSymbolLayerWidget::createAuxiliaryField()
|
||||
|
||||
// update property with join field name from auxiliary storage
|
||||
QgsProperty property = button->toProperty();
|
||||
property.setField( QgsAuxiliaryField::nameFromProperty( def, true ) );
|
||||
property.setField( QgsAuxiliaryLayer::nameFromProperty( def, true ) );
|
||||
property.setActive( true );
|
||||
button->updateFieldLists();
|
||||
button->setToProperty( property );
|
||||
|
@ -156,7 +156,7 @@ void QgsSymbolsListWidget::createAuxiliaryField()
|
||||
|
||||
// update property with join field name from auxiliary storage
|
||||
QgsProperty property = button->toProperty();
|
||||
property.setField( QgsAuxiliaryField::nameFromProperty( def, true ) );
|
||||
property.setField( QgsAuxiliaryLayer::nameFromProperty( def, true ) );
|
||||
property.setActive( true );
|
||||
button->updateFieldLists();
|
||||
button->setToProperty( property );
|
||||
|
Loading…
x
Reference in New Issue
Block a user