39 #include <QMessageBox> 40 #include <QStandardItemModel> 41 #include <QStandardItem> 49 QgsGraduatedSymbolRendererModel::QgsGraduatedSymbolRendererModel( QObject *parent ) : QAbstractItemModel( parent )
50 , mMimeFormat( QStringLiteral(
"application/x-qgsgraduatedsymbolrendererv2model" ) )
58 if ( mRenderer->
ranges().size() )
60 beginRemoveRows( QModelIndex(), 0, mRenderer->
ranges().size() - 1 );
71 if ( renderer->
ranges().size() )
73 beginInsertRows( QModelIndex(), 0, renderer->
ranges().size() - 1 );
84 void QgsGraduatedSymbolRendererModel::addClass(
QgsSymbol *symbol )
86 if ( !mRenderer )
return;
87 int idx = mRenderer->
ranges().size();
88 beginInsertRows( QModelIndex(), idx, idx );
93 void QgsGraduatedSymbolRendererModel::addClass(
const QgsRendererRange &range )
99 int idx = mRenderer->
ranges().size();
100 beginInsertRows( QModelIndex(), idx, idx );
105 QgsRendererRange QgsGraduatedSymbolRendererModel::rendererRange(
const QModelIndex &index )
107 if ( !index.isValid() || !mRenderer || mRenderer->
ranges().size() <= index.row() )
112 return mRenderer->
ranges().value( index.row() );
115 Qt::ItemFlags QgsGraduatedSymbolRendererModel::flags(
const QModelIndex &index )
const 117 if ( !index.isValid() )
119 return Qt::ItemIsDropEnabled;
122 Qt::ItemFlags flags = Qt::ItemIsSelectable | Qt::ItemIsEnabled | Qt::ItemIsDragEnabled | Qt::ItemIsDropEnabled | Qt::ItemIsUserCheckable;
124 if ( index.column() == 2 )
126 flags |= Qt::ItemIsEditable;
132 Qt::DropActions QgsGraduatedSymbolRendererModel::supportedDropActions()
const 134 return Qt::MoveAction;
137 QVariant QgsGraduatedSymbolRendererModel::data(
const QModelIndex &index,
int role )
const 139 if ( !index.isValid() || !mRenderer )
return QVariant();
143 if ( role == Qt::CheckStateRole && index.column() == 0 )
145 return range.
renderState() ? Qt::Checked : Qt::Unchecked;
147 else if ( role == Qt::DisplayRole || role == Qt::ToolTipRole )
149 switch ( index.column() )
154 if ( decimalPlaces < 0 ) decimalPlaces = 0;
155 return QString::number( range.
lowerValue(),
'f', decimalPlaces ) +
" - " + QString::number( range.
upperValue(),
'f', decimalPlaces );
158 return range.
label();
163 else if ( role == Qt::DecorationRole && index.column() == 0 && range.
symbol() )
167 else if ( role == Qt::TextAlignmentRole )
169 return ( index.column() == 0 ) ? Qt::AlignHCenter : Qt::AlignLeft;
171 else if ( role == Qt::EditRole )
173 switch ( index.column() )
177 return range.
label();
186 bool QgsGraduatedSymbolRendererModel::setData(
const QModelIndex &index,
const QVariant &value,
int role )
188 if ( !index.isValid() )
191 if ( index.column() == 0 && role == Qt::CheckStateRole )
194 emit dataChanged( index, index );
198 if ( role != Qt::EditRole )
201 switch ( index.column() )
212 emit dataChanged( index, index );
216 QVariant QgsGraduatedSymbolRendererModel::headerData(
int section, Qt::Orientation orientation,
int role )
const 218 if ( orientation == Qt::Horizontal && role == Qt::DisplayRole && section >= 0 && section < 3 )
221 lst << tr(
"Symbol" ) << tr(
"Values" ) << tr(
"Legend" );
222 return lst.value( section );
227 int QgsGraduatedSymbolRendererModel::rowCount(
const QModelIndex &parent )
const 229 if ( parent.isValid() || !mRenderer )
233 return mRenderer->
ranges().size();
236 int QgsGraduatedSymbolRendererModel::columnCount(
const QModelIndex &index )
const 242 QModelIndex QgsGraduatedSymbolRendererModel::index(
int row,
int column,
const QModelIndex &parent )
const 244 if ( hasIndex( row, column, parent ) )
246 return createIndex( row, column );
248 return QModelIndex();
251 QModelIndex QgsGraduatedSymbolRendererModel::parent(
const QModelIndex &index )
const 254 return QModelIndex();
257 QStringList QgsGraduatedSymbolRendererModel::mimeTypes()
const 260 types << mMimeFormat;
264 QMimeData *QgsGraduatedSymbolRendererModel::mimeData(
const QModelIndexList &indexes )
const 266 QMimeData *mimeData =
new QMimeData();
267 QByteArray encodedData;
269 QDataStream stream( &encodedData, QIODevice::WriteOnly );
272 Q_FOREACH (
const QModelIndex &index, indexes )
274 if ( !index.isValid() || index.column() != 0 )
277 stream << index.row();
279 mimeData->setData( mMimeFormat, encodedData );
283 bool QgsGraduatedSymbolRendererModel::dropMimeData(
const QMimeData *data, Qt::DropAction action,
int row,
int column,
const QModelIndex &parent )
287 if ( action != Qt::MoveAction )
return true;
289 if ( !data->hasFormat( mMimeFormat ) )
return false;
291 QByteArray encodedData = data->data( mMimeFormat );
292 QDataStream stream( &encodedData, QIODevice::ReadOnly );
295 while ( !stream.atEnd() )
302 int to = parent.row();
305 if ( to == -1 ) to = mRenderer->
ranges().size();
306 for (
int i = rows.size() - 1; i >= 0; i-- )
308 QgsDebugMsg( QStringLiteral(
"move %1 to %2" ).arg( rows[i] ).arg( to ) );
311 if ( rows[i] < t ) t--;
314 for (
int j = 0; j < i; j++ )
316 if ( to < rows[j] && rows[i] > rows[j] ) rows[j] += 1;
319 if ( rows[i] < to ) to--;
321 emit dataChanged( createIndex( 0, 0 ), createIndex( mRenderer->
ranges().size(), 0 ) );
326 void QgsGraduatedSymbolRendererModel::deleteRows( QList<int> rows )
328 for (
int i = rows.size() - 1; i >= 0; i-- )
330 beginRemoveRows( QModelIndex(), rows[i], rows[i] );
336 void QgsGraduatedSymbolRendererModel::removeAllRows()
338 beginRemoveRows( QModelIndex(), 0, mRenderer->
ranges().size() - 1 );
343 void QgsGraduatedSymbolRendererModel::sort(
int column, Qt::SortOrder order )
353 else if ( column == 2 )
358 emit dataChanged( createIndex( 0, 0 ), createIndex( mRenderer->
ranges().size(), 0 ) );
361 void QgsGraduatedSymbolRendererModel::updateSymbology(
bool resetModel )
369 emit dataChanged( createIndex( 0, 0 ), createIndex( mRenderer->
ranges().size(), 0 ) );
373 void QgsGraduatedSymbolRendererModel::updateLabels()
375 emit dataChanged( createIndex( 0, 2 ), createIndex( mRenderer->
ranges().size(), 2 ) );
379 QgsGraduatedSymbolRendererViewStyle::QgsGraduatedSymbolRendererViewStyle( QWidget *parent )
383 void QgsGraduatedSymbolRendererViewStyle::drawPrimitive( PrimitiveElement element,
const QStyleOption *option, QPainter *painter,
const QWidget *widget )
const 385 if ( element == QStyle::PE_IndicatorItemViewItemDrop && !option->rect.isNull() )
387 QStyleOption opt( *option );
388 opt.rect.setLeft( 0 );
390 opt.rect.setHeight( 0 );
391 if ( widget ) opt.rect.setRight( widget->width() );
392 QProxyStyle::drawPrimitive( element, &opt, painter, widget );
395 QProxyStyle::drawPrimitive( element, option, painter, widget );
414 if ( mContext.mapCanvas() )
450 mRenderer = qgis::make_unique< QgsGraduatedSymbolRenderer >( QString(),
QgsRangeList() );
455 connect( methodComboBox,
static_cast<void ( QComboBox::* )(
int )
>( &QComboBox::currentIndexChanged ),
this, &QgsGraduatedSymbolRendererWidget::methodComboBox_currentIndexChanged );
456 this->layout()->setContentsMargins( 0, 0, 0, 0 );
458 mModel =
new QgsGraduatedSymbolRendererModel(
this );
461 mExpressionWidget->setLayer(
mLayer );
469 btnColorRamp->setShowRandomColorRamp(
true );
472 QString defaultColorRamp =
QgsProject::instance()->
readEntry( QStringLiteral(
"DefaultStyles" ), QStringLiteral(
"/ColorRamp" ), QLatin1String(
"" ) );
473 if ( !defaultColorRamp.isEmpty() )
475 btnColorRamp->setColorRampFromName( defaultColorRamp );
480 btnColorRamp->setColorRamp( ramp );
485 viewGraduated->setStyle(
new QgsGraduatedSymbolRendererViewStyle( viewGraduated ) );
489 methodComboBox->blockSignals(
true );
490 methodComboBox->addItem( QStringLiteral(
"Color" ) );
493 methodComboBox->addItem( QStringLiteral(
"Size" ) );
494 minSizeSpinBox->setValue( 1 );
495 maxSizeSpinBox->setValue( 8 );
499 methodComboBox->addItem( QStringLiteral(
"Size" ) );
500 minSizeSpinBox->setValue( .1 );
501 maxSizeSpinBox->setValue( 2 );
503 methodComboBox->blockSignals(
false );
525 QMenu *advMenu =
new QMenu(
this );
527 advMenu->addAction( tr(
"Symbol Levels…" ),
this, SLOT(
showSymbolLevels() ) );
530 QAction *actionDdsLegend = advMenu->addAction( tr(
"Data-defined Size Legend…" ) );
532 connect( actionDdsLegend, &QAction::triggered,
this, &QgsGraduatedSymbolRendererWidget::dataDefinedSizeLegend );
535 btnAdvanced->setMenu( advMenu );
537 mHistogramWidget->setLayer(
mLayer );
538 mHistogramWidget->setRenderer( mRenderer.get() );
542 mExpressionWidget->registerExpressionContextGenerator(
this );
545 void QgsGraduatedSymbolRendererWidget::mSizeUnitWidget_changed()
547 if ( !mGraduatedSymbol )
return;
548 mGraduatedSymbol->setOutputUnit( mSizeUnitWidget->unit() );
549 mGraduatedSymbol->setMapUnitScale( mSizeUnitWidget->getMapUnitScale() );
551 mRenderer->updateSymbols( mGraduatedSymbol.get() );
562 return mRenderer.get();
606 if ( mRenderer->mode() < cboGraduatedMode->count() )
607 cboGraduatedMode->setCurrentIndex( mRenderer->mode() );
610 int nclasses = mRenderer->ranges().count();
611 if ( nclasses && updateCount )
612 spinGraduatedClasses->setValue( mRenderer->ranges().count() );
615 QString attrName = mRenderer->classAttribute();
616 mExpressionWidget->setField( attrName );
617 mHistogramWidget->setSourceFieldExp( attrName );
620 if ( mRenderer->sourceSymbol() )
622 mGraduatedSymbol.reset( mRenderer->sourceSymbol()->clone() );
626 mModel->setRenderer( mRenderer.get() );
627 viewGraduated->setModel( mModel );
629 if ( mGraduatedSymbol )
631 mSizeUnitWidget->blockSignals(
true );
632 mSizeUnitWidget->setUnit( mGraduatedSymbol->outputUnit() );
633 mSizeUnitWidget->setMapUnitScale( mGraduatedSymbol->mapUnitScale() );
634 mSizeUnitWidget->blockSignals(
false );
638 methodComboBox->blockSignals(
true );
641 methodComboBox->setCurrentIndex( 0 );
642 if ( mRenderer->sourceColorRamp() )
644 btnColorRamp->setColorRamp( mRenderer->sourceColorRamp() );
649 methodComboBox->setCurrentIndex( 1 );
650 if ( !mRenderer->ranges().isEmpty() )
652 minSizeSpinBox->setValue( mRenderer->minSymbolSize() );
653 maxSizeSpinBox->setValue( mRenderer->maxSymbolSize() );
656 toggleMethodWidgets( methodComboBox->currentIndex() );
657 methodComboBox->blockSignals(
false );
660 txtLegendFormat->setText( labelFormat.
format() );
661 spinPrecision->setValue( labelFormat.
precision() );
664 viewGraduated->resizeColumnToContents( 0 );
665 viewGraduated->resizeColumnToContents( 1 );
666 viewGraduated->resizeColumnToContents( 2 );
668 mHistogramWidget->refresh();
676 mRenderer->setClassAttribute( field );
679 void QgsGraduatedSymbolRendererWidget::methodComboBox_currentIndexChanged(
int idx )
681 toggleMethodWidgets( idx );
689 QMessageBox::critical(
this, tr(
"Select Method" ), tr(
"No color ramp defined." ) );
692 mRenderer->setSourceColorRamp( ramp );
697 lblColorRamp->setVisible(
false );
698 btnColorRamp->setVisible(
false );
699 lblSize->setVisible(
true );
700 minSizeSpinBox->setVisible(
true );
701 lblSize->setVisible(
true );
702 maxSizeSpinBox->setVisible(
true );
703 mSizeUnitWidget->setVisible(
true );
710 void QgsGraduatedSymbolRendererWidget::toggleMethodWidgets(
int idx )
714 lblColorRamp->setVisible(
true );
715 btnColorRamp->setVisible(
true );
716 lblSize->setVisible(
false );
717 minSizeSpinBox->setVisible(
false );
718 lblSizeTo->setVisible(
false );
719 maxSizeSpinBox->setVisible(
false );
720 mSizeUnitWidget->setVisible(
false );
724 lblColorRamp->setVisible(
false );
725 btnColorRamp->setVisible(
false );
726 lblSize->setVisible(
true );
727 minSizeSpinBox->setVisible(
true );
728 lblSizeTo->setVisible(
true );
729 maxSizeSpinBox->setVisible(
true );
730 mSizeUnitWidget->setVisible(
true );
739 mModel->updateSymbology( reset );
743 void QgsGraduatedSymbolRendererWidget::cleanUpSymbolSelector(
QgsPanelWidget *container )
752 void QgsGraduatedSymbolRendererWidget::updateSymbolsFromWidget()
762 mSizeUnitWidget->blockSignals(
true );
763 mSizeUnitWidget->setUnit( mGraduatedSymbol->outputUnit() );
764 mSizeUnitWidget->setMapUnitScale( mGraduatedSymbol->mapUnitScale() );
765 mSizeUnitWidget->blockSignals(
false );
767 QItemSelectionModel *m = viewGraduated->selectionModel();
768 QModelIndexList selectedIndexes = m->selectedRows( 1 );
769 if ( m && !selectedIndexes.isEmpty() )
771 Q_FOREACH (
const QModelIndex &idx, selectedIndexes )
775 int rangeIdx = idx.row();
776 QgsSymbol *newRangeSymbol = mGraduatedSymbol->clone();
777 if ( selectedIndexes.count() > 1 )
780 newRangeSymbol->
setColor( mRenderer->ranges().at( rangeIdx ).symbol()->color() );
782 mRenderer->updateRangeSymbol( rangeIdx, newRangeSymbol );
788 mRenderer->updateSymbols( mGraduatedSymbol.get() );
798 QString attrName = mExpressionWidget->currentField();
800 int nclasses = spinGraduatedClasses->value();
802 std::unique_ptr<QgsColorRamp> ramp( btnColorRamp->colorRamp() );
805 QMessageBox::critical(
this, tr(
"Apply Classification" ), tr(
"No color ramp defined." ) );
810 if ( cboGraduatedMode->currentIndex() == 0 )
812 else if ( cboGraduatedMode->currentIndex() == 2 )
814 else if ( cboGraduatedMode->currentIndex() == 3 )
816 else if ( cboGraduatedMode->currentIndex() == 4 )
825 if ( QMessageBox::Cancel == QMessageBox::question(
this, tr(
"Apply Classification" ), tr(
"Natural break classification (Jenks) is O(n2) complexity, your classification may take a long time.\nPress cancel to abort breaks calculation or OK to continue." ), QMessageBox::Cancel, QMessageBox::Ok ) )
831 mRenderer->setClassAttribute( attrName );
832 mRenderer->setMode( mode );
834 if ( methodComboBox->currentIndex() == 0 )
838 QMessageBox::critical(
this, tr(
"Apply Classification" ), tr(
"No color ramp defined." ) );
841 mRenderer->setSourceColorRamp( ramp.release() );
845 mRenderer->setSourceColorRamp(
nullptr );
848 QApplication::setOverrideCursor( Qt::WaitCursor );
849 mRenderer->updateClasses(
mLayer, mode, nclasses );
851 if ( methodComboBox->currentIndex() == 1 )
852 mRenderer->setSymbolSizes( minSizeSpinBox->value(), maxSizeSpinBox->value() );
854 mRenderer->calculateLabelPrecision();
855 QApplication::restoreOverrideCursor();
863 std::unique_ptr< QgsColorRamp > ramp( btnColorRamp->colorRamp() );
867 mRenderer->updateColorRamp( ramp.release() );
868 mRenderer->updateSymbols( mGraduatedSymbol.get() );
874 mRenderer->setSymbolSizes( minSizeSpinBox->value(), maxSizeSpinBox->value() );
875 mRenderer->updateSymbols( mGraduatedSymbol.get() );
882 std::unique_ptr< QgsSymbol > newSymbol( mGraduatedSymbol->clone() );
896 if ( !dlg.exec() || !newSymbol )
901 mGraduatedSymbol = std::move( newSymbol );
909 if ( !mGraduatedSymbol )
913 btnChangeGraduatedSymbol->setIcon( icon );
917 int QgsRendererPropertiesDialog::currentRangeRow()
919 QModelIndex idx = viewGraduated->selectionModel()->currentIndex();
920 if ( !idx.isValid() )
929 QModelIndexList selectedRows = viewGraduated->selectionModel()->selectedRows();
931 Q_FOREACH (
const QModelIndex &r, selectedRows )
935 rows.append( r.row() );
944 QModelIndexList selectedRows = viewGraduated->selectionModel()->selectedRows();
945 QModelIndexList::const_iterator sIt = selectedRows.constBegin();
947 for ( ; sIt != selectedRows.constEnd(); ++sIt )
949 selectedRanges.append( mModel->rendererRange( *sIt ) );
956 if ( idx.isValid() && idx.column() == 0 )
958 if ( idx.isValid() && idx.column() == 1 )
964 if ( !idx.isValid() )
967 mRowSelected = idx.row();
976 std::unique_ptr< QgsSymbol > newSymbol( mRenderer->ranges()[rangeIdx].symbol()->clone() );
978 if ( panel && panel->dockMode() )
990 if ( !dlg.exec() || !newSymbol )
995 mGraduatedSymbol = std::move( newSymbol );
1007 int decimalPlaces = mRenderer->labelFormat().precision() + 2;
1008 if ( decimalPlaces < 0 ) decimalPlaces = 0;
1012 if ( dialog.exec() == QDialog::Accepted )
1014 double lowerValue = dialog.
lowerValue().toDouble();
1015 double upperValue = dialog.
upperValue().toDouble();
1016 mRenderer->updateRangeUpperValue( rangeIdx, upperValue );
1017 mRenderer->updateRangeLowerValue( rangeIdx, lowerValue );
1020 if ( cbxLinkBoundaries->isChecked() )
1024 mRenderer->updateRangeUpperValue( rangeIdx - 1, lowerValue );
1027 if ( rangeIdx < mRenderer->ranges().size() - 1 )
1029 mRenderer->updateRangeLowerValue( rangeIdx + 1, upperValue );
1033 mHistogramWidget->refresh();
1039 mModel->addClass( mGraduatedSymbol.get() );
1040 mHistogramWidget->refresh();
1046 mModel->deleteRows( classIndexes );
1047 mHistogramWidget->refresh();
1052 mModel->removeAllRows();
1053 mHistogramWidget->refresh();
1059 bool ordered =
true;
1060 for (
int i = 1; i < ranges.size(); ++i )
1062 if ( ranges[i] < ranges[i - 1] )
1079 int result = QMessageBox::warning(
1081 tr(
"Link Class Boundaries" ),
1082 tr(
"Rows will be reordered before linking boundaries. Continue?" ),
1083 QMessageBox::Ok | QMessageBox::Cancel );
1084 if ( result != QMessageBox::Ok )
1086 cbxLinkBoundaries->setChecked(
false );
1089 mRenderer->sortByValue();
1093 for (
int i = 1; i < mRenderer->ranges().size(); ++i )
1095 mRenderer->updateRangeLowerValue( i, mRenderer->ranges()[i - 1].upperValue() );
1103 if ( item->column() == 2 )
1105 QString label = item->text();
1106 int idx = item->row();
1107 mRenderer->updateRangeLabel( idx, label );
1114 txtLegendFormat->text(),
1115 spinPrecision->value(),
1116 cbxTrimTrailingZeroes->isChecked() );
1117 mRenderer->setLabelFormat( labelFormat,
true );
1118 mModel->updateLabels();
1126 QItemSelectionModel *m = viewGraduated->selectionModel();
1127 QModelIndexList selectedIndexes = m->selectedRows( 1 );
1128 if ( m && !selectedIndexes.isEmpty() )
1131 QModelIndexList::const_iterator indexIt = selectedIndexes.constBegin();
1132 for ( ; indexIt != selectedIndexes.constEnd(); ++indexIt )
1134 QStringList list = m->model()->data( *indexIt ).toString().split(
' ' );
1135 if ( list.size() < 3 )
1140 double lowerBound = list.at( 0 ).toDouble();
1141 double upperBound = list.at( 2 ).toDouble();
1145 selectedSymbols.append( s );
1154 int decimalPlaces = mRenderer->labelFormat().precision() + 2;
1155 if ( decimalPlaces < 0 )
1157 double precision = 1.0 / std::pow( 10, decimalPlaces );
1159 for ( QgsRangeList::const_iterator it = ranges.begin(); it != ranges.end(); ++it )
1163 return it->symbol();
1173 mModel->updateSymbology();
1175 mHistogramWidget->refresh();
1186 viewGraduated->selectionModel()->clear();
1189 cbxLinkBoundaries->setChecked(
false );
1206 if ( event->key() == Qt::Key_C &&
event->modifiers() == Qt::ControlModifier )
1208 mCopyBuffer.clear();
1211 else if ( event->key() == Qt::Key_V &&
event->modifiers() == Qt::ControlModifier )
1213 QgsRangeList::const_iterator rIt = mCopyBuffer.constBegin();
1214 for ( ; rIt != mCopyBuffer.constEnd(); ++rIt )
1216 mModel->addClass( *rIt );
1222 void QgsGraduatedSymbolRendererWidget::dataDefinedSizeLegend()
const QgsRendererRangeLabelFormat & labelFormat() const
Returns the label format used to generate default classification labels.
static QgsGraduatedSymbolRenderer * convertFromRenderer(const QgsFeatureRenderer *renderer)
creates a QgsGraduatedSymbolRenderer from an existing renderer.
QString readEntry(const QString &scope, const QString &key, const QString &def=QString(), bool *ok=nullptr) const
QList< QgsRendererRange > QgsRangeList
bool qgsDoubleNear(double a, double b, double epsilon=4 *std::numeric_limits< double >::epsilon())
Compare two doubles (but allow some difference)
Abstract base class for color ramps.
QgsWkbTypes::GeometryType geometryType() const
Returns point, line or polygon.
static QgsExpressionContextScope * projectScope(const QgsProject *project)
Creates a new scope which contains variables and functions relating to a QGIS project.
A QProxyStyle subclass which correctly sets the base style to match the QGIS application style...
void setLowerValue(const QString &val)
void addClass(QgsSymbol *symbol)
QList< QgsUnitTypes::RenderUnit > RenderUnitList
List of render units.
The QgsMapSettings class contains configuration for rendering of the map.
void sortByValue(Qt::SortOrder order=Qt::AscendingOrder)
double lowerValue() const
static QgsSymbol * defaultSymbol(QgsWkbTypes::GeometryType geomType)
Returns new default symbol for specified geometry type.
static QgsExpressionContextScope * globalScope()
Creates a new scope which contains variables and functions relating to the global QGIS context...
static QIcon symbolPreviewIcon(QgsSymbol *symbol, QSize size, int padding=0)
Returns an icon preview for a color ramp.
long featureCount(const QString &legendKey) const
Number of features rendered with specified legend key.
Expression contexts are used to encapsulate the parameters around which a QgsExpression should be eva...
points (e.g., for font sizes)
QgsSymbol * symbol() const
Single scope for storing variables and functions for use within a QgsExpressionContext.
void moveClass(int from, int to)
Moves the category at index position from to index position to.
void setContext(const QgsSymbolWidgetContext &context)
Sets the context in which the symbol widget is shown, e.g., the associated map canvas and expression ...
static QgsExpressionContextScope * atlasScope(QgsLayoutAtlas *atlas)
Creates a new scope which contains variables and functions relating to a QgsLayoutAtlas.
static QgsExpressionContextScope * mapSettingsScope(const QgsMapSettings &mapSettings)
Creates a new scope which contains variables and functions relating to a QgsMapSettings object...
void sortByLabel(Qt::SortOrder order=Qt::AscendingOrder)
virtual QgsSymbol * clone() const =0
Gets a deep copy of this symbol.
void appendScope(QgsExpressionContextScope *scope)
Appends a scope to the end of the context.
static QgsProject * instance()
Returns the QgsProject singleton instance.
void setUpperValue(const QString &val)
double upperValue() const
bool updateRangeRenderState(int rangeIndex, bool render)
QString lowerValue() const
bool updateRangeLabel(int rangeIndex, const QString &label)
QString upperValue() const
static QgsExpressionContextScope * layerScope(const QgsMapLayer *layer)
Creates a new scope which contains variables and functions relating to a QgsMapLayer.
Gradient color ramp, which smoothly interpolates between two colors and also supports optional extra ...
Represents a vector layer which manages a vector based data sets.
const QgsRangeList & ranges() const
void deleteClass(int idx)
void setColor(const QColor &color)