void QgsSymbolSelectorWidget::setContext( const QgsSymbolWidgetContext &context ) { mContext = context; if ( mContext.expressionContext() ) { mPreviewExpressionContext = *mContext.expressionContext(); if ( mVectorLayer ) mPreviewExpressionContext.appendScope( QgsExpressionContextUtils::layerScope( mVectorLayer ) ); mPreviewExpressionContext.setFeature( mPreviewFeature ); } QWidget *widget = stackedWidget->currentWidget(); QgsLayerPropertiesWidget *layerProp = dynamic_cast< QgsLayerPropertiesWidget * >( widget ); QgsSymbolsListWidget *listWidget = dynamic_cast< QgsSymbolsListWidget * >( widget ); if ( layerProp ) layerProp->setContext( context ); if ( listWidget ) listWidget->setContext( context ); layerChanged(); updatePreview(); }
void QgsSymbolSelectorWidget::setContext( const QgsSymbolWidgetContext& context ) { mContext = context; QWidget* widget = stackedWidget->currentWidget(); QgsLayerPropertiesWidget* layerProp = dynamic_cast< QgsLayerPropertiesWidget* >( widget ); QgsSymbolsListWidget* listWidget = dynamic_cast< QgsSymbolsListWidget* >( widget ); if ( layerProp ) layerProp->setContext( context ); if ( listWidget ) listWidget->setContext( context ); layerChanged(); updatePreview(); }
void QgsSymbolSelectorWidget::layerChanged() { updateUi(); SymbolLayerItem *currentItem = static_cast<SymbolLayerItem *>( model->itemFromIndex( layersTree->currentIndex() ) ); if ( !currentItem ) return; if ( currentItem->isLayer() ) { SymbolLayerItem *parent = static_cast<SymbolLayerItem *>( currentItem->parent() ); mDataDefineRestorer.reset( new DataDefinedRestorer( parent->symbol(), currentItem->layer() ) ); QgsLayerPropertiesWidget *layerProp = new QgsLayerPropertiesWidget( currentItem->layer(), parent->symbol(), mVectorLayer ); layerProp->setDockMode( this->dockMode() ); layerProp->setContext( mContext ); setWidget( layerProp ); connect( layerProp, &QgsLayerPropertiesWidget::changed, mDataDefineRestorer.get(), &DataDefinedRestorer::restore ); connect( layerProp, &QgsLayerPropertiesWidget::changed, this, &QgsSymbolSelectorWidget::updateLayerPreview ); // This connection when layer type is changed connect( layerProp, &QgsLayerPropertiesWidget::changeLayer, this, &QgsSymbolSelectorWidget::changeLayer ); connectChildPanel( layerProp ); } else { mDataDefineRestorer.reset(); // then it must be a symbol currentItem->symbol()->setLayer( mVectorLayer ); // Now populate symbols of that type using the symbols list widget: QgsSymbolsListWidget *symbolsList = new QgsSymbolsListWidget( currentItem->symbol(), mStyle, mAdvancedMenu, this, mVectorLayer ); symbolsList->setContext( mContext ); setWidget( symbolsList ); connect( symbolsList, &QgsSymbolsListWidget::changed, this, &QgsSymbolSelectorWidget::symbolChanged ); } updateLockButton(); }