17#include "moc_qgssymbolselectordialog.cpp"
40#include <QColorDialog>
42#include <QStandardItemModel>
43#include <QInputDialog>
50#include <QStandardItem>
54static const int SYMBOL_LAYER_ITEM_TYPE = QStandardItem::UserType + 1;
64 mDDSize = mMarker->dataDefinedSize();
65 mDDAngle = mMarker->dataDefinedAngle();
67 if ( !mDDSize && !mDDAngle )
74 mDDWidth = mLine->dataDefinedWidth();
82void DataDefinedRestorer::save()
86 mSize = mMarkerSymbolLayer->size();
87 mAngle = mMarkerSymbolLayer->angle();
88 mMarkerOffset = mMarkerSymbolLayer->offset();
92 mWidth = mLineSymbolLayer->width();
93 mLineOffset = mLineSymbolLayer->offset();
97void DataDefinedRestorer::restore()
101 if ( mDDSize && ( mSize != mMarkerSymbolLayer->size() || mMarkerOffset != mMarkerSymbolLayer->offset() ) )
102 mMarker->setDataDefinedSize( mDDSize );
103 if ( mDDAngle && mAngle != mMarkerSymbolLayer->angle() )
104 mMarker->setDataDefinedAngle( mDDAngle );
108 if ( mDDWidth && ( mWidth != mLineSymbolLayer->width() || mLineOffset != mLineSymbolLayer->offset() ) )
109 mLine->setDataDefinedWidth( mDDWidth );
116class SymbolLayerItem :
public QStandardItem
120 : mVectorLayer( vectorLayer )
123 setLayer( layer, symbolType );
127 : mVectorLayer( vectorLayer )
138 mSymbolType = symbolType;
152 if ( !mSize.isValid() )
155 mSize = QSize( size, size );
168 if (
auto *lParent = parent() )
169 static_cast<SymbolLayerItem *
>( lParent )->updatePreview();
172 int type()
const override {
return SYMBOL_LAYER_ITEM_TYPE; }
173 bool isLayer() {
return mIsLayer; }
186 QVariant data(
int role )
const override
188 if ( role == Qt::DisplayRole || role == Qt::EditRole )
200 switch ( mSymbol->type() )
203 return QCoreApplication::translate(
"SymbolLayerItem",
"Marker" );
205 return QCoreApplication::translate(
"SymbolLayerItem",
"Fill" );
207 return QCoreApplication::translate(
"SymbolLayerItem",
"Line" );
213 else if ( role == Qt::ForegroundRole && mIsLayer )
215 if ( !mLayer->enabled() )
217 QPalette
pal = qApp->palette();
218 QBrush brush = QStandardItem::data( role ).value<QBrush>();
219 brush.setColor(
pal.color( QPalette::Disabled, QPalette::WindowText ) );
230 if ( role == Qt::CheckStateRole )
232 return QStandardItem::data( role );
238 QPointer<QgsVectorLayer> mVectorLayer;
239 bool mIsLayer =
false;
242 QPointer<QScreen> mScreen;
256 setWindowModality( Qt::WindowModal );
260 this->layout()->setContentsMargins( 0, 0, 0, 0 );
262 layersTree->setMaximumHeight(
static_cast<int>(
Qgis::UI_SCALE_FACTOR * fontMetrics().height() * 7 ) );
263 layersTree->setMinimumHeight( layersTree->maximumHeight() );
264 lblPreview->setMaximumWidth( layersTree->maximumHeight() );
272 iconLock.addFile(
QgsApplication::iconPath( QStringLiteral(
"unlocked.svg" ) ), QSize(), QIcon::Normal, QIcon::Off );
273 iconLock.addFile(
QgsApplication::iconPath( QStringLiteral(
"unlocked.svg" ) ), QSize(), QIcon::Active, QIcon::Off );
276 iconColorLock.addFile(
QgsApplication::iconPath( QStringLiteral(
"mIconColorLocked.svg" ) ), QSize(), QIcon::Normal, QIcon::On );
277 iconColorLock.addFile(
QgsApplication::iconPath( QStringLiteral(
"mIconColorLocked.svg" ) ), QSize(), QIcon::Active, QIcon::On );
278 iconColorLock.addFile(
QgsApplication::iconPath( QStringLiteral(
"mIconColorUnlocked.svg" ) ), QSize(), QIcon::Normal, QIcon::Off );
279 iconColorLock.addFile(
QgsApplication::iconPath( QStringLiteral(
"mIconColorUnlocked.svg" ) ), QSize(), QIcon::Active, QIcon::Off );
281 mLockColorAction =
new QAction( tr(
"Lock Color" ),
this );
282 mLockColorAction->setToolTip( tr(
"Avoid changing the color of the layer when the symbol color is changed" ) );
283 mLockColorAction->setCheckable(
true );
284 mLockColorAction->setIcon( iconColorLock );
286 QIcon iconSelectLock;
287 iconSelectLock.addFile(
QgsApplication::iconPath( QStringLiteral(
"mIconSelectLocked.svg" ) ), QSize(), QIcon::Normal, QIcon::On );
288 iconSelectLock.addFile(
QgsApplication::iconPath( QStringLiteral(
"mIconSelectLocked.svg" ) ), QSize(), QIcon::Active, QIcon::On );
289 iconSelectLock.addFile(
QgsApplication::iconPath( QStringLiteral(
"mIconSelectUnlocked.svg" ) ), QSize(), QIcon::Normal, QIcon::Off );
290 iconSelectLock.addFile(
QgsApplication::iconPath( QStringLiteral(
"mIconSelectUnlocked.svg" ) ), QSize(), QIcon::Active, QIcon::Off );
292 mLockSelectionColorAction =
new QAction( tr(
"Lock Color When Selected" ),
this );
293 mLockSelectionColorAction->setToolTip( tr(
"Avoid changing the color of the layer when a feature is selected" ) );
294 mLockSelectionColorAction->setCheckable(
true );
295 mLockSelectionColorAction->setIcon( iconSelectLock );
297 QMenu *lockMenu =
new QMenu(
this );
298 lockMenu->addAction( mLockColorAction );
299 lockMenu->addAction( mLockSelectionColorAction );
300 btnLock->setMenu( lockMenu );
301 btnLock->setPopupMode( QToolButton::InstantPopup );
307 mSymbolLayersModel =
new QStandardItemModel( layersTree );
309 layersTree->setModel( mSymbolLayersModel );
310 layersTree->setHeaderHidden(
true );
322 mPreviewExpressionContext.
setFeature( mPreviewFeature );
330 QItemSelectionModel *selModel = layersTree->selectionModel();
333 loadSymbol( mSymbol,
static_cast<SymbolLayerItem *
>( mSymbolLayersModel->invisibleRootItem() ) );
341 connect( mLockSelectionColorAction, &QAction::toggled,
this, [=](
bool checked ) {
349 updateLockButtonIcon();
355 updateLockButtonIcon();
360 const QModelIndex newIndex = layersTree->model()->index( 0, 0 );
361 layersTree->setCurrentIndex( newIndex );
390 widget->mOwnedSymbol = std::move(
symbol );
396 if ( !mAdvancedMenu )
398 mAdvancedMenu =
new QMenu(
this );
402 return mAdvancedMenu;
411 mPreviewExpressionContext = *lExpressionContext;
415 mPreviewExpressionContext.
setFeature( mPreviewFeature );
418 QWidget *widget = stackedWidget->currentWidget();
421 layerProp->setContext(
context );
425 listWidget->setContext(
context );
445 mSymbolLayersModel->clear();
446 parent =
static_cast<SymbolLayerItem *
>( mSymbolLayersModel->invisibleRootItem() );
449 SymbolLayerItem *symbolItem =
new SymbolLayerItem(
symbol, mVectorLayer, screen() );
450 QFont boldFont = symbolItem->font();
451 boldFont.setBold(
true );
452 symbolItem->setFont( boldFont );
453 parent->appendRow( symbolItem );
456 for (
int i = count - 1; i >= 0; i-- )
459 layerItem->setEditable(
false );
460 symbolItem->appendRow( layerItem );
465 layersTree->setExpanded( layerItem->index(),
true );
467 layersTree->setExpanded( symbolItem->index(),
true );
469 if ( mSymbol ==
symbol && !layersTree->currentIndex().isValid() )
472 layersTree->setCurrentIndex( symbolItem->index() );
476void QgsSymbolSelectorWidget::reloadSymbol()
478 mSymbolLayersModel->clear();
479 loadSymbol( mSymbol,
static_cast<SymbolLayerItem *
>( mSymbolLayersModel->invisibleRootItem() ) );
482void QgsSymbolSelectorWidget::updateUi()
484 const QModelIndex currentIdx = layersTree->currentIndex();
485 if ( !currentIdx.isValid() )
488 SymbolLayerItem *item =
static_cast<SymbolLayerItem *
>( mSymbolLayersModel->itemFromIndex( currentIdx ) );
489 if ( !item->isLayer() )
491 btnUp->setEnabled(
false );
492 btnDown->setEnabled(
false );
493 btnRemoveLayer->setEnabled(
false );
494 btnLock->setEnabled(
false );
495 btnDuplicate->setEnabled(
false );
499 const int rowCount = item->parent()->rowCount();
500 const int currentRow = item->row();
502 btnUp->setEnabled( currentRow > 0 );
503 btnDown->setEnabled( currentRow < rowCount - 1 );
504 btnRemoveLayer->setEnabled( rowCount > 1 );
505 btnLock->setEnabled(
true );
506 btnDuplicate->setEnabled(
true );
514 std::unique_ptr<QgsSymbol> symbolClone( mSymbol->
clone() );
516 lblPreview->setPixmap( QPixmap::fromImage( preview ) );
518 if ( !mBlockModified )
525 SymbolLayerItem *item = currentLayerItem();
527 item->updatePreview();
532SymbolLayerItem *QgsSymbolSelectorWidget::currentLayerItem()
534 const QModelIndex idx = layersTree->currentIndex();
535 if ( !idx.isValid() )
538 SymbolLayerItem *item =
static_cast<SymbolLayerItem *
>( mSymbolLayersModel->itemFromIndex( idx ) );
539 if ( !item->isLayer() )
547 const QModelIndex idx = layersTree->currentIndex();
548 if ( !idx.isValid() )
551 SymbolLayerItem *item =
static_cast<SymbolLayerItem *
>( mSymbolLayersModel->itemFromIndex( idx ) );
552 if ( item->isLayer() )
553 return item->layer();
562 SymbolLayerItem *currentItem =
static_cast<SymbolLayerItem *
>( mSymbolLayersModel->itemFromIndex( layersTree->currentIndex() ) );
566 if ( currentItem->isLayer() )
568 SymbolLayerItem *parent =
static_cast<SymbolLayerItem *
>( currentItem->parent() );
569 mDataDefineRestorer.reset(
new DataDefinedRestorer( parent->symbol(), currentItem->layer() ) );
573 setWidget( layerProp );
584 mDataDefineRestorer.reset();
586 currentItem->symbol()->setLayer( mVectorLayer );
590 symbolsList->setContext( mContext );
592 setWidget( symbolsList );
600 SymbolLayerItem *currentItem =
static_cast<SymbolLayerItem *
>( mSymbolLayersModel->itemFromIndex( layersTree->currentIndex() ) );
601 if ( !currentItem || currentItem->isLayer() )
605 if ( currentItem->parent() )
609 SymbolLayerItem *parent =
static_cast<SymbolLayerItem *
>( currentItem->parent() );
610 parent->removeRow( 0 );
612 layersTree->setCurrentIndex( parent->child( 0 )->index() );
613 parent->updatePreview();
619 const QModelIndex newIndex = layersTree->model()->index( 0, 0 );
620 layersTree->setCurrentIndex( newIndex );
627void QgsSymbolSelectorWidget::setWidget( QWidget *widget )
629 const int index = stackedWidget->addWidget( widget );
630 stackedWidget->setCurrentIndex( index );
631 if ( mPresentWidget )
632 mPresentWidget->deleteLater();
633 mPresentWidget = widget;
636void QgsSymbolSelectorWidget::updateLockButton()
641 mLockColorAction->setChecked( layer->
isLocked() );
644 updateLockButtonIcon();
647void QgsSymbolSelectorWidget::updateLockButtonIcon()
649 if ( mLockColorAction->isChecked() && mLockSelectionColorAction->isChecked() )
651 else if ( mLockColorAction->isChecked() )
653 else if ( mLockSelectionColorAction->isChecked() )
661 const QModelIndex idx = layersTree->currentIndex();
662 if ( !idx.isValid() )
666 SymbolLayerItem *item =
static_cast<SymbolLayerItem *
>( mSymbolLayersModel->itemFromIndex( idx ) );
667 if ( item->isLayer() )
669 insertIdx = item->row();
670 item =
static_cast<SymbolLayerItem *
>( item->parent() );
673 QgsSymbol *parentSymbol = item->symbol();
681 if ( insertIdx == -1 )
688 static_cast<QgsMarkerSymbol *
>( parentSymbol )->setDataDefinedSize( ddSize );
690 static_cast<QgsMarkerSymbol *
>( parentSymbol )->setDataDefinedAngle( ddAngle );
692 static_cast<QgsLineSymbol *
>( parentSymbol )->setDataDefinedWidth( ddWidth );
694 SymbolLayerItem *newLayerItem =
new SymbolLayerItem( newLayer, parentSymbol->
type(), mVectorLayer, screen() );
695 item->insertRow( insertIdx == -1 ? 0 : insertIdx, newLayerItem );
696 item->updatePreview();
698 layersTree->setCurrentIndex( mSymbolLayersModel->indexFromItem( newLayerItem ) );
705 SymbolLayerItem *item = currentLayerItem();
706 const int row = item->row();
707 SymbolLayerItem *parent =
static_cast<SymbolLayerItem *
>( item->parent() );
709 const int layerIdx = parent->rowCount() - row - 1;
710 QgsSymbol *parentSymbol = parent->symbol();
713 parent->removeRow( row );
714 parent->updatePreview();
716 const QModelIndex newIdx = parent->child( 0 )->index();
717 layersTree->setCurrentIndex( newIdx );
727 moveLayerByOffset( +1 );
732 moveLayerByOffset( -1 );
735void QgsSymbolSelectorWidget::moveLayerByOffset(
int offset )
737 SymbolLayerItem *item = currentLayerItem();
740 const int row = item->row();
742 SymbolLayerItem *parent =
static_cast<SymbolLayerItem *
>( item->parent() );
743 QgsSymbol *parentSymbol = parent->symbol();
745 const int layerIdx = parent->rowCount() - row - 1;
750 QList<QStandardItem *> rowItems = parent->takeRow( row );
751 parent->insertRows( row + offset, rowItems );
752 parent->updatePreview();
754 const QModelIndex newIdx = rowItems[0]->index();
755 layersTree->setCurrentIndex( newIdx );
766 layer->
setLocked( mLockColorAction->isChecked() );
767 updateLockButtonIcon();
773 const QModelIndex idx = layersTree->currentIndex();
774 if ( !idx.isValid() )
777 SymbolLayerItem *item =
static_cast<SymbolLayerItem *
>( mSymbolLayersModel->itemFromIndex( idx ) );
778 if ( !item->isLayer() )
783 const int insertIdx = item->row();
784 item =
static_cast<SymbolLayerItem *
>( item->parent() );
786 QgsSymbol *parentSymbol = item->symbol();
790 if ( insertIdx == -1 )
795 SymbolLayerItem *newLayerItem =
new SymbolLayerItem( newLayer, parentSymbol->
type(), mVectorLayer, screen() );
796 item->insertRow( insertIdx == -1 ? 0 : insertIdx, newLayerItem );
800 layersTree->setExpanded( newLayerItem->index(),
true );
802 item->updatePreview();
804 layersTree->setCurrentIndex( mSymbolLayersModel->indexFromItem( newLayerItem ) );
811 SymbolLayerItem *item = currentLayerItem();
813 if ( item->rowCount() > 0 )
815 item->removeRow( 0 );
825 layersTree->setExpanded( item->index(),
true );
829 const int layerIdx = item->parent()->rowCount() - item->row() - 1;
832 item->updatePreview();
841 setLayout(
new QVBoxLayout() );
844 mButtonBox =
new QDialogButtonBox( QDialogButtonBox::Cancel | QDialogButtonBox::Help | QDialogButtonBox::Ok );
846 connect( mButtonBox, &QDialogButtonBox::accepted,
this, &QDialog::accept );
847 connect( mButtonBox, &QDialogButtonBox::rejected,
this, &QDialog::reject );
848 connect( mButtonBox, &QDialogButtonBox::helpRequested,
this, &QgsSymbolSelectorDialog::showHelp );
850 layout()->addWidget( mSelectorWidget );
851 layout()->addWidget( mButtonBox );
855 mSelectorWidget->setMinimumSize( 460, 560 );
856 setObjectName( QStringLiteral(
"SymbolSelectorDialog" ) );
863 layout()->setContentsMargins( 0, 0, 0, 0 );
867 setWindowTitle( tr(
"Symbol Selector" ) );
884 return mSelectorWidget->
context();
889 return mSelectorWidget->
symbol();
895 if ( !isWindow() && e->key() == Qt::Key_Escape )
901 QDialog::keyPressEvent( e );
905void QgsSymbolSelectorDialog::reloadSymbol()
907 mSelectorWidget->reloadSymbol();
915void QgsSymbolSelectorDialog::updateUi()
917 mSelectorWidget->updateUi();
920void QgsSymbolSelectorDialog::updateLockButton()
922 mSelectorWidget->updateLockButton();
925SymbolLayerItem *QgsSymbolSelectorDialog::currentLayerItem()
927 return mSelectorWidget->currentLayerItem();
932 return mSelectorWidget->currentLayer();
935void QgsSymbolSelectorDialog::moveLayerByOffset(
int offset )
937 mSelectorWidget->moveLayerByOffset( offset );
940void QgsSymbolSelectorDialog::setWidget( QWidget *widget )
942 mSelectorWidget->setWidget( widget );
1005void QgsSymbolSelectorDialog::showHelp()
1010void QgsSymbolSelectorWidget::projectDataChanged()
1012 mBlockModified =
true;
1015 mBlockModified =
false;
1018void QgsSymbolSelectorWidget::layersAboutToBeRemoved(
const QList<QgsMapLayer *> &layers )
1020 if ( mVectorLayer && layers.contains( mVectorLayer ) )
QFlags< SymbolLayerUserFlag > SymbolLayerUserFlags
Symbol layer user flags.
@ Millimeters
Millimeters.
@ FlagIncludeCrosshairsForMarkerSymbols
Include a crosshairs reference image in the background of marker symbol previews.
@ DisableSelectionRecoloring
If present, indicates that the symbol layer should not be recolored when rendering selected features.
static const double UI_SCALE_FACTOR
UI scaling factor.
static QgsSymbolLayerRegistry * symbolLayerRegistry()
Returns the application's symbol layer registry, used for managing symbol layers.
static QIcon getThemeIcon(const QString &name, const QColor &fillColor=QColor(), const QColor &strokeColor=QColor())
Helper to get a theme icon.
static QgsImageCache * imageCache()
Returns the application's image cache, used for caching resampled versions of raster images.
static QgsSvgCache * svgCache()
Returns the application's SVG cache, used for caching SVG images and handling parameter replacement w...
static QString iconPath(const QString &iconFile)
Returns path to the desired icon file.
static QList< QgsExpressionContextScope * > globalProjectLayerScopes(const QgsMapLayer *layer)
Creates a list of three scopes: global, layer's project and layer.
static QgsExpressionContextScope * layerScope(const QgsMapLayer *layer)
Creates a new scope which contains variables and functions relating to a QgsMapLayer.
Expression contexts are used to encapsulate the parameters around which a QgsExpression should be eva...
void appendScope(QgsExpressionContextScope *scope)
Appends a scope to the end of the context.
void setFeature(const QgsFeature &feature)
Convenience function for setting a feature for the context.
void appendScopes(const QList< QgsExpressionContextScope * > &scopes)
Appends a list of scopes to the end of the context.
Wrapper for iterator of features from vector data provider or vector layer.
bool nextFeature(QgsFeature &f)
Fetch next feature and stores in f, returns true on success.
This class wraps a request for features to a vector layer (or directly its vector data provider).
static void enableAutoGeometryRestore(QWidget *widget, const QString &key=QString())
Register the widget to allow its position to be automatically saved and restored when open and closed...
static void openHelp(const QString &key)
Opens help topic for the given help key using default system web browser.
void remoteImageFetched(const QString &url)
Emitted when the cache has finished retrieving an image file from a remote url.
Abstract base class for line symbol layers.
A line symbol type, for rendering LineString and MultiLineString geometries.
QgsProperty dataDefinedWidth() const
Returns data defined width for whole symbol (including all symbol layers).
Struct for storing maximum and minimum scales for measurements in map units.
Abstract base class for marker symbol layers.
A marker symbol type, for rendering Point and MultiPoint geometries.
QgsProperty dataDefinedAngle() const
Returns data defined angle for whole symbol (including all symbol layers).
QgsProperty dataDefinedSize() const
Returns data defined size for whole symbol (including all symbol layers).
Encapsulates a QGIS project, including sets of map layers and their styles, layouts,...
static QgsProject * instance()
Returns the QgsProject singleton instance.
void layersWillBeRemoved(const QStringList &layerIds)
Emitted when one or more layers are about to be removed from the registry.
void projectColorsChanged()
Emitted whenever the project's color scheme has been changed.
A store for object properties.
Stores properties relating to a screen.
void remoteSvgFetched(const QString &url)
Emitted when the cache has finished retrieving an SVG file from a remote url.
QgsSymbolLayerAbstractMetadata * symbolLayerMetadata(const QString &name) const
Returns metadata for specified symbol layer. Returns nullptr if not found.
static QgsSymbolLayer * defaultSymbolLayer(Qgis::SymbolType type)
create a new instance of symbol layer for specified symbol type with default settings
static QIcon symbolLayerPreviewIcon(const QgsSymbolLayer *layer, Qgis::RenderUnit u, QSize size, const QgsMapUnitScale &scale=QgsMapUnitScale(), Qgis::SymbolType parentSymbolType=Qgis::SymbolType::Hybrid, QgsMapLayer *mapLayer=nullptr, const QgsScreenProperties &screen=QgsScreenProperties())
Draws a symbol layer preview to an icon.
static QPixmap symbolPreviewPixmap(const QgsSymbol *symbol, QSize size, int padding=0, QgsRenderContext *customContext=nullptr, bool selected=false, const QgsExpressionContext *expressionContext=nullptr, const QgsLegendPatchShape *shape=nullptr, const QgsScreenProperties &screen=QgsScreenProperties())
Returns a pixmap preview for a color ramp.
static void resetSymbolLayerIds(QgsSymbol *symbol)
Regenerate recursively unique id from all symbol symbol layers.
virtual QgsSymbolLayer * clone() const =0
Shall be reimplemented by subclasses to create a deep copy of the instance.
Qgis::SymbolType type() const
bool isLocked() const
Returns true if the symbol layer colors are locked and the layer will ignore any symbol-level color c...
void setUserFlags(Qgis::SymbolLayerUserFlags flags)
Sets user-controlled flags which control the symbol layer's behavior.
virtual QgsSymbol * subSymbol()
Returns the symbol's sub symbol, if present.
Qgis::SymbolLayerUserFlags userFlags() const
Returns user-controlled flags which control the symbol layer's behavior.
void setLocked(bool locked)
Sets whether the layer's colors are locked.
void setContext(const QgsSymbolWidgetContext &context)
Sets the context in which the symbol widget is shown, e.g., the associated map canvas and expression ...
QgsSymbolSelectorDialog(QgsSymbol *symbol, QgsStyle *style, QgsVectorLayer *vl, QWidget *parent=nullptr, bool embedded=false)
Constructor for QgsSymbolSelectorDialog.
QgsSymbolWidgetContext context() const
Returns the context in which the symbol widget is shown, e.g., the associated map canvas and expressi...
QMenu * advancedMenu()
Returns menu for "advanced" button - create it if doesn't exist and show the advanced button.
void symbolChanged()
Slot to update tree when a new symbol from style.
QDialogButtonBox * buttonBox() const
Returns a reference to the dialog's button box.
QgsSymbol * symbol()
Returns the symbol that is currently active in the widget.
void keyPressEvent(QKeyEvent *e) override
void updateLayerPreview()
void duplicateLayer()
Duplicates the current symbol layer and places the duplicated layer above the current symbol layer.
void changeLayer(QgsSymbolLayer *layer)
Alters tree and sets proper widget when Layer Type is changed.
void loadSymbol(QgsSymbol *symbol, SymbolLayerItem *parent=nullptr)
Loads the given symbol into the widget.
Contains settings which reflect the context in which a symbol (or renderer) widget is shown,...
QgsExpressionContext * expressionContext() const
Returns the expression context used for the widget, if set.
Abstract base class for all rendered symbols.
QgsSymbolLayer * symbolLayer(int layer)
Returns the symbol layer at the specified index.
bool appendSymbolLayer(QgsSymbolLayer *layer)
Appends a symbol layer at the end of the current symbol layer list.
bool insertSymbolLayer(int index, QgsSymbolLayer *layer)
Inserts a symbol layer to specified index.
bool changeSymbolLayer(int index, QgsSymbolLayer *layer)
Deletes the current layer at the specified index and replaces it with layer.
QgsSymbolLayer * takeSymbolLayer(int index)
Removes a symbol layer from the list and returns a pointer to it.
virtual QgsSymbol * clone() const =0
Returns a deep copy of this symbol.
int symbolLayerCount() const
Returns the total number of symbol layers contained in the symbol.
Qgis::SymbolType type() const
Returns the symbol's type.
Represents a vector layer which manages a vector based data sets.
int scaleIconSize(int standardSize)
Scales an icon size to compensate for display pixel density, making the icon size hi-dpi friendly,...
#define Q_NOWARN_DEPRECATED_POP
#define Q_NOWARN_DEPRECATED_PUSH