void QgsSymbolSelectorWidget::changeLayer( QgsSymbolLayer *newLayer ) { SymbolLayerItem *item = currentLayerItem(); QgsSymbolLayer *layer = item->layer(); if ( layer->subSymbol() ) { item->removeRow( 0 ); } // update symbol layer item item->setLayer( newLayer ); // When it is a marker symbol if ( newLayer->subSymbol() ) { loadSymbol( newLayer->subSymbol(), item ); layersTree->setExpanded( item->index(), true ); } // Change the symbol at last to avoid deleting item's layer QgsSymbol *symbol = static_cast<SymbolLayerItem *>( item->parent() )->symbol(); int layerIdx = item->parent()->rowCount() - item->row() - 1; symbol->changeSymbolLayer( layerIdx, newLayer ); item->updatePreview(); updatePreview(); // Important: This lets the layer have its own layer properties widget layerChanged(); }
void QgsSymbolSelectorWidget::updateLockButton() { QgsSymbolLayer *layer = currentLayer(); if ( !layer ) return; btnLock->setChecked( layer->isLocked() ); }
void QgsSymbolSelectorWidget::lockLayer() { QgsSymbolLayer *layer = currentLayer(); if ( !layer ) return; layer->setLocked( btnLock->isChecked() ); emit symbolModified(); }
QgsVectorFieldSymbolLayer* QgsVectorFieldSymbolLayer::clone() const { QgsSymbolLayer* clonedLayer = QgsVectorFieldSymbolLayer::create( properties() ); if ( mLineSymbol ) { clonedLayer->setSubSymbol( mLineSymbol->clone() ); } return static_cast< QgsVectorFieldSymbolLayer* >( clonedLayer ); }
Qgs25DRenderer::Qgs25DRenderer() : QgsFeatureRenderer( "25dRenderer" ) { mSymbol.reset( new QgsFillSymbol() ); mSymbol->deleteSymbolLayer( 0 ); // We never asked for the default layer QgsSymbolLayer* floor = QgsSimpleFillSymbolLayer::create(); QgsStringMap wallProperties; wallProperties.insert( "geometryModifier", WALL_EXPRESSION ); wallProperties.insert( "symbolType", "Fill" ); QgsSymbolLayer* walls = QgsGeometryGeneratorSymbolLayer::create( wallProperties ); QgsStringMap roofProperties; roofProperties.insert( "geometryModifier", ROOF_EXPRESSION ); roofProperties.insert( "symbolType", "Fill" ); QgsSymbolLayer* roof = QgsGeometryGeneratorSymbolLayer::create( roofProperties ); floor->setLocked( true ); mSymbol->appendSymbolLayer( floor ); mSymbol->appendSymbolLayer( walls ); mSymbol->appendSymbolLayer( roof ); QgsEffectStack* effectStack = new QgsEffectStack(); QgsOuterGlowEffect* glowEffect = new QgsOuterGlowEffect(); glowEffect->setBlurLevel( 5 ); glowEffect->setSpreadUnit( QgsUnitTypes::RenderMapUnits ); effectStack->appendEffect( glowEffect ); floor->setPaintEffect( effectStack ); // These methods must only be used after the above initialization! setRoofColor( QColor( "#b1a97c" ) ); setWallColor( QColor( "#777777" ) ); wallLayer()->setDataDefinedProperty( "color", new QgsDataDefined( QString( WALL_SHADING_EXPRESSION ) ) ); setShadowSpread( 4 ); setShadowColor( QColor( "#111111" ) ); QgsFeatureRequest::OrderBy orderBy; orderBy << QgsFeatureRequest::OrderByClause( ORDER_BY_EXPRESSION, false ); setOrderBy( orderBy ); setOrderByEnabled( true ); }
void QgsSymbolSelectorWidget::duplicateLayer() { QModelIndex idx = layersTree->currentIndex(); if ( !idx.isValid() ) return; SymbolLayerItem *item = static_cast<SymbolLayerItem *>( model->itemFromIndex( idx ) ); if ( !item->isLayer() ) return; QgsSymbolLayer *source = item->layer(); int insertIdx = item->row(); item = static_cast<SymbolLayerItem *>( item->parent() ); QgsSymbol *parentSymbol = item->symbol(); QgsSymbolLayer *newLayer = source->clone(); if ( insertIdx == -1 ) parentSymbol->appendSymbolLayer( newLayer ); else parentSymbol->insertSymbolLayer( item->rowCount() - insertIdx, newLayer ); SymbolLayerItem *newLayerItem = new SymbolLayerItem( newLayer ); item->insertRow( insertIdx == -1 ? 0 : insertIdx, newLayerItem ); if ( newLayer->subSymbol() ) { loadSymbol( newLayer->subSymbol(), newLayerItem ); layersTree->setExpanded( newLayerItem->index(), true ); } item->updatePreview(); layersTree->setCurrentIndex( model->indexFromItem( newLayerItem ) ); updateUi(); updatePreview(); }