void QgsSymbolsListWidget::createAuxiliaryField() { // try to create an auxiliary layer if not yet created if ( !mLayer->auxiliaryLayer() ) { QgsNewAuxiliaryLayerDialog dlg( mLayer, this ); dlg.exec(); } // return if still not exists if ( !mLayer->auxiliaryLayer() ) return; QgsPropertyOverrideButton *button = qobject_cast<QgsPropertyOverrideButton *>( sender() ); QgsSymbolLayer::Property key = static_cast< QgsSymbolLayer::Property >( button->propertyKey() ); const QgsPropertyDefinition def = QgsSymbolLayer::propertyDefinitions()[key]; // create property in auxiliary storage if necessary if ( !mLayer->auxiliaryLayer()->exists( def ) ) mLayer->auxiliaryLayer()->addAuxiliaryField( def ); // update property with join field name from auxiliary storage QgsProperty property = button->toProperty(); property.setField( QgsAuxiliaryLayer::nameFromProperty( def, true ) ); property.setActive( true ); button->updateFieldLists(); button->setToProperty( property ); QgsMarkerSymbol *markerSymbol = static_cast<QgsMarkerSymbol *>( mSymbol ); QgsLineSymbol *lineSymbol = static_cast<QgsLineSymbol *>( mSymbol ); switch ( key ) { case QgsSymbolLayer::PropertyAngle: if ( markerSymbol ) markerSymbol->setDataDefinedAngle( button->toProperty() ); break; case QgsSymbolLayer::PropertySize: if ( markerSymbol ) { markerSymbol->setDataDefinedSize( button->toProperty() ); markerSymbol->setScaleMethod( QgsSymbol::ScaleDiameter ); } break; case QgsSymbolLayer::PropertyStrokeWidth: if ( lineSymbol ) lineSymbol->setDataDefinedWidth( button->toProperty() ); break; default: break; } emit changed(); }
void QgsSymbolsListWidget::updateDataDefinedLineWidth() { QgsLineSymbol *lineSymbol = static_cast<QgsLineSymbol *>( mSymbol ); QgsProperty dd( mWidthDDBtn->toProperty() ); spinWidth->setEnabled( !mWidthDDBtn->isActive() ); QgsProperty symbolDD( lineSymbol->dataDefinedWidth() ); if ( // shall we remove datadefined expressions for layers ? ( !symbolDD && !dd ) // shall we set the "en masse" expression for properties ? || dd ) { lineSymbol->setDataDefinedWidth( dd ); emit changed(); } }
void QgsFeatureRenderer::convertSymbolSizeScale( QgsSymbol * symbol, QgsSymbol::ScaleMethod method, const QString & field ) { if ( symbol->type() == QgsSymbol::Marker ) { QgsMarkerSymbol * s = static_cast<QgsMarkerSymbol *>( symbol ); if ( QgsSymbol::ScaleArea == QgsSymbol::ScaleMethod( method ) ) { const QgsDataDefined dd( "coalesce(sqrt(" + QString::number( s->size() ) + " * (" + field + ")),0)" ); s->setDataDefinedSize( dd ); } else { const QgsDataDefined dd( "coalesce(" + QString::number( s->size() ) + " * (" + field + "),0)" ); s->setDataDefinedSize( dd ); } s->setScaleMethod( QgsSymbol::ScaleDiameter ); } else if ( symbol->type() == QgsSymbol::Line ) { QgsLineSymbol * s = static_cast<QgsLineSymbol *>( symbol ); const QgsDataDefined dd( "coalesce(" + QString::number( s->width() ) + " * (" + field + "),0)" ); s->setDataDefinedWidth( dd ); } }