16#include "moc_qgsrendererwidget.cpp"
34#include <QInputDialog>
42 contextMenu =
new QMenu( tr(
"Renderer Options" ),
this );
46 mCopyAction->setShortcut( QKeySequence( QKeySequence::Copy ) );
48 mPasteAction->setShortcut( QKeySequence( QKeySequence::Paste ) );
53 connect(
mCopySymbolAction, &QAction::triggered,
this, &QgsRendererWidget::copySymbol );
73 connect(
contextMenu, &QMenu::aboutToShow,
this, [=] {
87 if ( symbolList.isEmpty() )
104 const QColor currentColor = firstSymbol->
color();
126 if ( color.isValid() )
131 symbol->setColor( color );
141 if ( symbolList.isEmpty() )
147 const auto constSymbolList = symbolList;
148 for (
QgsSymbol *symbol : constSymbolList )
152 firstSymbol = symbol;
160 const double oldOpacity = firstSymbol->
opacity() * 100;
161 const double opacity = QInputDialog::getDouble(
this, tr(
"Opacity" ), tr(
"Change symbol opacity [%]" ), oldOpacity, 0.0, 100.0, 1, &ok );
164 const auto constSymbolList = symbolList;
165 for (
QgsSymbol *symbol : constSymbolList )
168 symbol->setOpacity( opacity / 100.0 );
177 if ( symbolList.isEmpty() )
183 const auto constSymbolList = symbolList;
184 for (
QgsSymbol *symbol : constSymbolList )
188 firstSymbol = symbol;
197 const QString item = QInputDialog::getItem(
this, tr(
"Symbol unit" ), tr(
"Select symbol unit" ), QStringList() << tr(
"Millimeter" ) << tr(
"Map unit" ), currentUnit,
false, &ok );
202 const auto constSymbolList = symbolList;
203 for (
QgsSymbol *symbol : constSymbolList )
206 symbol->setOutputUnit( unit );
215 if ( symbolList.isEmpty() )
224 if ( QDialog::Accepted == dlg.exec() )
226 if ( !dlg.mDDBtn->isActive() )
228 const auto constSymbolList = symbolList;
229 for (
QgsSymbol *symbol : constSymbolList )
245 if ( symbolList.isEmpty() )
253 if ( QDialog::Accepted == dlg.exec() )
255 if ( !dlg.mDDBtn->isActive() )
257 const auto constSymbolList = symbolList;
258 for (
QgsSymbol *symbol : constSymbolList )
274 if ( symbolList.isEmpty() )
282 if ( QDialog::Accepted == dlg.exec() )
284 if ( !dlg.mDDBtn->isActive() )
286 const auto constSymbolList = symbolList;
287 for (
QgsSymbol *symbol : constSymbolList )
304void QgsRendererWidget::copySymbol()
307 if ( symbolList.isEmpty() )
315void QgsRendererWidget::updateDataDefinedProperty()
380 if ( !ddSize || !ddSize.
isActive() )
382 QMessageBox::warning(
this, tr(
"Data-defined Size Legend" ), tr(
"Data-defined size is not enabled!" ) );
408 return *lExpressionContext;
422 QStringList highlights;
425 if ( expContext.
hasVariable( QStringLiteral(
"zoom_level" ) ) )
427 highlights << QStringLiteral(
"zoom_level" );
429 if ( expContext.
hasVariable( QStringLiteral(
"vector_tile_zoom" ) ) )
431 highlights << QStringLiteral(
"vector_tile_zoom" );
444 : mSymbolList( symbolList )
448 setWindowFlags( Qt::WindowStaysOnTopHint );
449 mLabel->setText( label );
466 if (
auto *lMapCanvas = mContext.
mapCanvas() )
468 expContext = lMapCanvas->createExpressionContext();
496 mDDBtn->registerExpressionContextGenerator(
this );
499 const auto constMSymbolList = mSymbolList;
500 for (
QgsSymbol *symbol : constMSymbolList )
504 initialSymbol = symbol;
507 mSpinBox->setValue( initialSymbol ? value( initialSymbol ) : 0 );
508 mSpinBox->setEnabled( !mDDBtn->isActive() );
511QgsProperty QgsDataDefinedValueDialog::symbolDataDefined()
const
513 if ( mSymbolList.isEmpty() || !mSymbolList.back() )
517 const QgsProperty dd = symbolDataDefined( mSymbolList.back() );
518 const auto constMSymbolList = mSymbolList;
521 const QgsProperty symbolDD( symbolDataDefined( it ) );
522 if ( !it || !dd || !symbolDD || symbolDD != dd )
531 mSpinBox->setEnabled( !dd.
isActive() );
541 const auto constMSymbolList = mSymbolList;
543 setDataDefined( it, dd );
551 if ( !symbolList.isEmpty() && symbolList.at( 0 ) &&
vectorLayer() )
554 mDDBtn->setSymbol( mAssistantSymbol );
613 return static_cast<const QgsLineSymbol *
>( symbol )->width();
618 static_cast<QgsLineSymbol *
>( symbol )->setDataDefinedWidth( dd );
621void QgsRendererWidget::apply()
@ ScaleDiameter
Calculate scale by the diameter.
RenderUnit
Rendering size units.
@ Millimeters
Millimeters.
static QColor getColor(const QColor &initialColor, QWidget *parent, const QString &title=QString(), bool allowOpacity=false)
Returns a color selection from a color dialog.
void setDataDefined(QgsSymbol *symbol, const QgsProperty &dd) override
QgsDataDefinedRotationDialog(const QList< QgsSymbol * > &symbolList, QgsVectorLayer *layer)
double value(const QgsSymbol *symbol) const override
QgsProperty symbolDataDefined(const QgsSymbol *symbol) const override
QgsProperty symbolDataDefined(const QgsSymbol *symbol) const override
void setDataDefined(QgsSymbol *symbol, const QgsProperty &dd) override
double value(const QgsSymbol *symbol) const override
QgsDataDefinedSizeDialog(const QList< QgsSymbol * > &symbolList, QgsVectorLayer *layer)
Object that keeps configuration of appearance of marker symbol's data-defined size in legend.
Utility classes for "en masse" size definition.
void setContext(const QgsSymbolWidgetContext &context)
Sets the context in which the symbol widget is shown, e.g., the associated map canvas and expression ...
void dataDefinedChanged()
QgsDataDefinedValueDialog(const QList< QgsSymbol * > &symbolList, QgsVectorLayer *layer, const QString &label)
Constructor.
const QgsVectorLayer * vectorLayer() const
Returns the vector layer associated with the widget.
QgsSymbolWidgetContext context() const
Returns the context in which the symbol widget is shown, e.g., the associated map canvas and expressi...
void init(int propertyKey)
Should be called in the constructor of child classes.
QgsProperty symbolDataDefined(const QgsSymbol *symbol) const override
double value(const QgsSymbol *symbol) const override
void setDataDefined(QgsSymbol *symbol, const QgsProperty &dd) override
QgsDataDefinedWidthDialog(const QList< QgsSymbol * > &symbolList, QgsVectorLayer *layer)
Single scope for storing variables and functions for use within a QgsExpressionContext.
static QgsExpressionContextScope * projectScope(const QgsProject *project)
Creates a new scope which contains variables and functions relating to a QGIS project.
static QgsExpressionContextScope * atlasScope(const 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.
static QgsExpressionContextScope * layerScope(const QgsMapLayer *layer)
Creates a new scope which contains variables and functions relating to a QgsMapLayer.
static QgsExpressionContextScope * globalScope()
Creates a new scope which contains variables and functions relating to the global QGIS context.
Expression contexts are used to encapsulate the parameters around which a QgsExpression should be eva...
void setOriginalValueVariable(const QVariant &value)
Sets the original value variable value for the context.
void appendScope(QgsExpressionContextScope *scope)
Appends a scope to the end of the context.
bool hasVariable(const QString &name) const
Check whether a variable is specified by any scope within the context.
void setHighlightedVariables(const QStringList &variableNames)
Sets the list of variable names within the context intended to be highlighted to the user.
static const QString EXPR_ORIGINAL_VALUE
Inbuilt variable name for value original value variable.
Abstract base class for all 2D vector feature renderers.
virtual QgsLegendSymbolList legendSymbolItems() const
Returns a list of symbology items for the legend.
Property
Data definable properties for renderers.
bool usingSymbolLevels() const
static const QgsPropertiesDefinition & propertyDefinitions()
Returns the symbol property definitions.
void setDataDefinedProperty(Property key, const QgsProperty &property)
Sets a data defined property for the renderer.
A line symbol type, for rendering LineString and MultiLineString geometries.
void setWidth(double width) const
Sets the width for the whole line symbol.
QgsProperty dataDefinedWidth() const
Returns data defined width for whole symbol (including all symbol layers).
The QgsMapSettings class contains configuration for rendering of the map.
A marker symbol type, for rendering Point and MultiPoint geometries.
void setAngle(double symbolAngle) const
Sets the angle for the whole symbol.
void setSize(double size) const
Sets the size for the whole symbol.
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).
QgsMarkerSymbol * clone() const override
Returns a deep copy of this symbol.
static QgsProject * instance()
Returns the QgsProject singleton instance.
A store for object properties.
bool isActive() const
Returns whether the property is currently active.
static QgsSymbol * symbolFromMimeData(const QMimeData *data)
Attempts to parse mime data as a symbol.
static QMimeData * symbolToMimeData(const QgsSymbol *symbol)
Creates new mime data from a symbol.
@ StrokeWidth
Stroke width.
static const QgsPropertiesDefinition & propertyDefinitions()
Returns the symbol layer property definitions.
A dialog which allows the user to modify the rendering order of symbol layers.
QgsLegendSymbolList symbolLevels() const
Returns the current legend symbols with rendering passes set, as defined in the widget.
bool usingLevels() const
Returns whether the level ordering is enabled.
Contains settings which reflect the context in which a symbol (or renderer) widget is shown,...
QList< QgsExpressionContextScope > additionalExpressionContextScopes() const
Returns the list of additional expression context scopes to show as available within the layer.
QList< QgsExpressionContextScope * > globalProjectAtlasMapLayerScopes(const QgsMapLayer *layer) const
Returns list of scopes: global, project, atlas, map, layer.
QgsExpressionContext * expressionContext() const
Returns the expression context used for the widget, if set.
QgsMapCanvas * mapCanvas() const
Returns the map canvas associated with the widget.
Abstract base class for all rendered symbols.
qreal opacity() const
Returns the opacity for the symbol.
QColor color() const
Returns the symbol's color.
Qgis::RenderUnit outputUnit() const
Returns the units to use for sizes and widths within the symbol.
Represents a vector layer which manages a vector based data sets.
Q_INVOKABLE Qgis::GeometryType geometryType() const
Returns point, line or polygon.