QgsLayerPropertiesWidget::QgsLayerPropertiesWidget( QgsSymbolLayerV2* layer, const QgsSymbolV2* symbol, const QgsVectorLayer* vl, QWidget* parent ) : QWidget( parent ) { 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() ) ); }
void QgsSymbolV2PropertiesDialog::layerTypeChanged() { QgsSymbolLayerV2* layer = currentLayer(); if ( layer == NULL ) return; QString newLayerType = cboLayerType->itemData( cboLayerType->currentIndex() ).toString(); if ( layer->layerType() == newLayerType ) return; // get creation function for new layer from registry QgsSymbolLayerV2Registry* pReg = QgsSymbolLayerV2Registry::instance(); QgsSymbolLayerV2AbstractMetadata* am = pReg->symbolLayerMetadata( newLayerType ); if ( am == NULL ) // check whether the metadata is assigned return; // change layer to a new (with different type) QgsSymbolLayerV2* newLayer = am->createSymbolLayer( QgsStringMap() ); if ( newLayer == NULL ) return; mSymbol->changeSymbolLayer( currentLayerIndex(), newLayer ); updateSymbolLayerWidget( newLayer ); // update symbol layer item SymbolLayerItem* item = currentLayerItem(); item->setLayer( newLayer ); item->updatePreview(); updatePreview(); }
void QgsSymbolV2PropertiesDialog::layerChanged() { updateUi(); // get layer info QgsSymbolLayerV2* layer = currentLayer(); if ( layer == NULL ) return; // update layer type combo box int idx = cboLayerType->findData( layer->layerType() ); cboLayerType->setCurrentIndex( idx ); updateSymbolLayerWidget( layer ); updateLockButton(); }
void QgsLayerPropertiesWidget::layerTypeChanged() { QgsSymbolLayerV2* layer = mLayer; if ( !layer ) return; QString newLayerType = cboLayerType->itemData( cboLayerType->currentIndex() ).toString(); if ( layer->layerType() == newLayerType ) return; // get creation function for new layer from registry QgsSymbolLayerV2Registry* pReg = QgsSymbolLayerV2Registry::instance(); QgsSymbolLayerV2AbstractMetadata* am = pReg->symbolLayerMetadata( newLayerType ); if ( am == NULL ) // check whether the metadata is assigned return; // change layer to a new (with different type) QgsSymbolLayerV2* newLayer = am->createSymbolLayer( QgsStringMap() ); if ( newLayer == NULL ) return; updateSymbolLayerWidget( newLayer ); emit changeLayer( newLayer ); }