void QgsLayerPropertiesWidget::updateSymbolLayerWidget( QgsSymbolLayerV2* layer ) { if ( stackedWidget->currentWidget() != pageDummy ) { // stop updating from the original widget disconnect( stackedWidget->currentWidget(), SIGNAL( changed() ), this, SLOT( emitSignalChanged() ) ); stackedWidget->removeWidget( stackedWidget->currentWidget() ); } QgsSymbolLayerV2Registry* pReg = QgsSymbolLayerV2Registry::instance(); QString layerType = layer->layerType(); QgsSymbolLayerV2AbstractMetadata* am = pReg->symbolLayerMetadata( layerType ); if ( am ) { QgsSymbolLayerV2Widget* w = am->createSymbolLayerWidget( mVectorLayer ); if ( w ) { w->setSymbolLayer( layer ); stackedWidget->addWidget( w ); stackedWidget->setCurrentWidget( w ); // start recieving updates from widget connect( w , SIGNAL( changed() ), this, SLOT( emitSignalChanged() ) ); return; } } // When anything is not right stackedWidget->setCurrentWidget( pageDummy ); }
void QgsPaintEffectPropertiesWidget::updateEffectWidget( QgsPaintEffect* effect ) { if ( !effect ) { stackedWidget->setCurrentWidget( pageDummy ); return; } if ( stackedWidget->currentWidget() != pageDummy ) { // stop updating from the original widget disconnect( stackedWidget->currentWidget(), SIGNAL( changed() ), this, SLOT( emitSignalChanged() ) ); stackedWidget->removeWidget( stackedWidget->currentWidget() ); } QgsPaintEffectRegistry* registry = QgsApplication::paintEffectRegistry(); QgsPaintEffectAbstractMetadata* am = registry->effectMetadata( effect->type() ); if ( am ) { QgsPaintEffectWidget* w = am->createWidget(); if ( w ) { w->setPaintEffect( effect ); stackedWidget->addWidget( w ); stackedWidget->setCurrentWidget( w ); // start receiving updates from widget connect( w, SIGNAL( changed() ), this, SLOT( emitSignalChanged() ) ); return; } } // When anything is not right stackedWidget->setCurrentWidget( pageDummy ); }
QgsLayerPropertiesWidget::QgsLayerPropertiesWidget( QgsSymbolLayerV2* layer, const QgsSymbolV2* symbol, const QgsVectorLayer* vl, QWidget* parent ) : QgsPanelWidget( parent ) , mPresetExpressionContext( nullptr ) , mMapCanvas( nullptr ) { mLayer = layer; mSymbol = symbol; mVectorLayer = vl; setupUi( this ); // initialize the sub-widgets // XXX Should this thing be here this way? Initialize all the widgets just for the sake of one layer? // TODO Make this on demand creation _initWidgetFunctions(); // TODO Algorithm // // 3. populate the combo box with the supported layer type // 4. set the present layer type // 5. create the widget for the present layer type and set inn stacked widget // 6. connect comboBox type changed to two things // 1. emit signal that type has beed changed // 2. remove the widget and place the new widget corresponding to the changed layer type // populateLayerTypes(); // update layer type combo box int idx = cboLayerType->findData( mLayer->layerType() ); cboLayerType->setCurrentIndex( idx ); // set the corresponding widget updateSymbolLayerWidget( layer ); connect( cboLayerType, SIGNAL( currentIndexChanged( int ) ), this, SLOT( layerTypeChanged() ) ); connect( mEffectWidget, SIGNAL( changed() ), this, SLOT( emitSignalChanged() ) ); this->connectChildPanel( mEffectWidget ); mEffectWidget->setPaintEffect( mLayer->paintEffect() ); }