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) // base new layer on existing layer's properties QgsSymbolLayerV2* newLayer = am->createSymbolLayer( layer->properties() ); if ( newLayer == NULL ) return; updateSymbolLayerWidget( newLayer ); emit changeLayer( newLayer ); }