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::moveLayerByOffset( int offset ) { SymbolLayerItem *item = currentLayerItem(); if ( !item ) return; int row = item->row(); SymbolLayerItem *parent = static_cast<SymbolLayerItem *>( item->parent() ); QgsSymbol *parentSymbol = parent->symbol(); int layerIdx = parent->rowCount() - row - 1; // switch layers QgsSymbolLayer *tmpLayer = parentSymbol->takeSymbolLayer( layerIdx ); parentSymbol->insertSymbolLayer( layerIdx - offset, tmpLayer ); QList<QStandardItem *> rowItems = parent->takeRow( row ); parent->insertRows( row + offset, rowItems ); parent->updatePreview(); QModelIndex newIdx = rowItems[ 0 ]->index(); layersTree->setCurrentIndex( newIdx ); updatePreview(); updateUi(); }
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 QgsSymbolSelectorWidget::updateLayerPreview() { // get current layer item and update its icon SymbolLayerItem *item = currentLayerItem(); if ( item ) item->updatePreview(); // update also preview of the whole symbol updatePreview(); }
void QgsSymbolV2PropertiesDialog::updateLayerPreview() { // get current layer item and update its icon SymbolLayerItem* item = currentLayerItem(); if ( item ) item->updatePreview(); // update also preview of the whole symbol updatePreview(); }
void QgsSymbolSelectorWidget::removeLayer() { SymbolLayerItem *item = currentLayerItem(); int row = item->row(); SymbolLayerItem *parent = static_cast<SymbolLayerItem *>( item->parent() ); int layerIdx = parent->rowCount() - row - 1; // IMPORTANT QgsSymbol *parentSymbol = parent->symbol(); QgsSymbolLayer *tmpLayer = parentSymbol->takeSymbolLayer( layerIdx ); parent->removeRow( row ); parent->updatePreview(); QModelIndex newIdx = parent->child( 0 )->index(); layersTree->setCurrentIndex( newIdx ); updateUi(); updatePreview(); //finally delete the removed layer pointer delete tmpLayer; }