35QgsAnnotationPolygonItemWidget::QgsAnnotationPolygonItemWidget( QWidget *parent )
41 mSelector->setDockMode( dockMode() );
44 if ( !mBlockChangedSignal )
52 QVBoxLayout *layout =
new QVBoxLayout();
53 layout->setContentsMargins( 0, 0, 0, 0 );
54 layout->addWidget( mSelector );
55 mSymbolSelectorFrame->setLayout( layout );
59 if ( !mBlockChangedSignal )
68 mPropertiesWidget->updateItem( newItem );
76 polygonItem->
setSymbol( mSymbol->clone() );
77 mPropertiesWidget->updateItem( polygonItem );
81void QgsAnnotationPolygonItemWidget::setDockMode(
bool dockMode )
85 mSelector->setDockMode( dockMode );
92 mSelector->setContext( context );
93 mPropertiesWidget->setContext( context );
96QgsAnnotationPolygonItemWidget::~QgsAnnotationPolygonItemWidget() =
default;
104 mItem.reset( polygonItem->
clone() );
105 if ( mItem->symbol() )
107 mSymbol.reset( mItem->symbol()->clone() );
113 mBlockChangedSignal =
true;
114 mSelector->loadSymbol( mSymbol.get() );
115 mSelector->updatePreview();
116 mPropertiesWidget->setItem( mItem.get() );
117 mBlockChangedSignal =
false;
127QgsAnnotationLineItemWidget::QgsAnnotationLineItemWidget( QWidget *parent )
133 mSelector->setDockMode( dockMode() );
136 if ( !mBlockChangedSignal )
144 QVBoxLayout *layout =
new QVBoxLayout();
145 layout->setContentsMargins( 0, 0, 0, 0 );
146 layout->addWidget( mSelector );
147 mSymbolSelectorFrame->setLayout( layout );
151 if ( !mBlockChangedSignal )
160 mPropertiesWidget->updateItem( newItem );
169 mPropertiesWidget->updateItem( lineItem );
173void QgsAnnotationLineItemWidget::setDockMode(
bool dockMode )
177 mSelector->setDockMode( dockMode );
184 mSelector->setContext( context );
185 mPropertiesWidget->setContext( context );
188QgsAnnotationLineItemWidget::~QgsAnnotationLineItemWidget() =
default;
196 mItem.reset( lineItem->
clone() );
197 if ( mItem->symbol() )
199 mSymbol.reset( mItem->symbol()->clone() );
205 mBlockChangedSignal =
true;
206 mSelector->loadSymbol( mSymbol.get() );
207 mSelector->updatePreview();
208 mPropertiesWidget->setItem( mItem.get() );
209 mBlockChangedSignal =
false;
219QgsAnnotationMarkerItemWidget::QgsAnnotationMarkerItemWidget( QWidget *parent )
225 mSelector->setDockMode( dockMode() );
228 if ( !mBlockChangedSignal )
236 QVBoxLayout *layout =
new QVBoxLayout();
237 layout->setContentsMargins( 0, 0, 0, 0 );
238 layout->addWidget( mSelector );
239 mSymbolSelectorFrame->setLayout( layout );
243 if ( !mBlockChangedSignal )
252 mPropertiesWidget->updateItem( newItem );
260 markerItem->
setSymbol( mSymbol->clone() );
261 mPropertiesWidget->updateItem( markerItem );
265void QgsAnnotationMarkerItemWidget::setDockMode(
bool dockMode )
269 mSelector->setDockMode( dockMode );
276 mSelector->setContext( context );
277 mPropertiesWidget->setContext( context );
280QgsAnnotationMarkerItemWidget::~QgsAnnotationMarkerItemWidget() =
default;
288 mItem.reset( markerItem->
clone() );
289 if ( mItem->symbol() )
291 mSymbol.reset( mItem->symbol()->clone() );
297 mBlockChangedSignal =
true;
298 mSelector->loadSymbol( mSymbol.get() );
299 mSelector->updatePreview();
300 mPropertiesWidget->setItem( mItem.get() );
301 mBlockChangedSignal =
false;
312QgsAnnotationPointTextItemWidget::QgsAnnotationPointTextItemWidget( QWidget *parent )
318 QVBoxLayout *vLayout =
new QVBoxLayout();
319 vLayout->setContentsMargins( 0, 0, 0, 0 );
320 vLayout->addWidget( mTextFormatWidget );
321 mTextFormatWidgetContainer->setLayout( vLayout );
323 mTextEdit->setMaximumHeight( mTextEdit->fontMetrics().height() * 10 );
325 mSpinTextAngle->setClearValue( 0 );
330 mAlignmentComboBox->setAvailableAlignments( Qt::AlignLeft | Qt::AlignHCenter | Qt::AlignRight );
332 mTextFormatWidget->setDockMode( dockMode() );
335 if ( !mBlockChangedSignal )
338 connect( mTextEdit, &QPlainTextEdit::textChanged,
this, [ = ]
340 if ( !mBlockChangedSignal )
343 connect( mInsertExpressionButton, &QPushButton::clicked,
this, &QgsAnnotationPointTextItemWidget::mInsertExpressionButton_clicked );
346 if ( !mBlockChangedSignal )
350 connect( mSpinTextAngle, qOverload< double >( &QgsDoubleSpinBox::valueChanged ),
this, [ = ]
352 if ( !mBlockChangedSignal )
356 connect( mRotationModeCombo, qOverload< int >( &QComboBox::currentIndexChanged ),
this, [ = ]
358 if ( !mBlockChangedSignal )
364 if ( !mBlockChangedSignal )
372 newItem->
setFormat( mTextFormatWidget->format() );
373 newItem->
setText( mTextEdit->toPlainText() );
374 newItem->
setAngle( mSpinTextAngle->value() );
376 newItem->
setAlignment( mAlignmentComboBox->currentAlignment() );
377 mPropertiesWidget->updateItem( newItem );
385 pointTextItem->
setFormat( mTextFormatWidget->format() );
386 pointTextItem->setText( mTextEdit->toPlainText() );
387 pointTextItem->setAngle( mSpinTextAngle->value() );
389 pointTextItem->setAlignment( mAlignmentComboBox->currentAlignment() );
390 mPropertiesWidget->updateItem( pointTextItem );
394void QgsAnnotationPointTextItemWidget::setDockMode(
bool dockMode )
397 if ( mTextFormatWidget )
398 mTextFormatWidget->setDockMode( dockMode );
404 if ( mTextFormatWidget )
405 mTextFormatWidget->setContext( context );
406 mPropertiesWidget->setContext( context );
409void QgsAnnotationPointTextItemWidget::focusDefaultWidget()
411 mTextEdit->selectAll();
412 mTextEdit->setFocus();
415QgsAnnotationPointTextItemWidget::~QgsAnnotationPointTextItemWidget() =
default;
423 mItem.reset( textItem->
clone() );
425 mBlockChangedSignal =
true;
426 mTextFormatWidget->
setFormat( mItem->format() );
427 mTextEdit->setPlainText( mItem->text() );
428 mSpinTextAngle->setValue( mItem->angle() );
429 mRotationModeCombo->setCurrentIndex( mRotationModeCombo->findData( QVariant::fromValue( mItem->rotationMode() ) ) );
430 mAlignmentComboBox->setCurrentAlignment( mItem->alignment() & Qt::AlignHorizontal_Mask );
431 mPropertiesWidget->setItem( mItem.get() );
432 mBlockChangedSignal =
false;
437void QgsAnnotationPointTextItemWidget::mInsertExpressionButton_clicked()
442 if ( context().expressionContext() )
449 exprDlg.setWindowTitle( tr(
"Insert Expression" ) );
450 if ( exprDlg.exec() == QDialog::Accepted )
452 expression = exprDlg.expressionText().trimmed();
453 if ( !expression.isEmpty() )
455 mTextEdit->insertPlainText(
"[%" + expression +
"%]" );
465QgsAnnotationLineTextItemWidget::QgsAnnotationLineTextItemWidget( QWidget *parent )
471 QVBoxLayout *vLayout =
new QVBoxLayout();
472 vLayout->setContentsMargins( 0, 0, 0, 0 );
473 vLayout->addWidget( mTextFormatWidget );
474 mTextFormatWidgetContainer->setLayout( vLayout );
476 mTextEdit->setMaximumHeight( mTextEdit->fontMetrics().height() * 10 );
478 mTextFormatWidget->setDockMode( dockMode() );
481 if ( !mBlockChangedSignal )
484 connect( mTextEdit, &QPlainTextEdit::textChanged,
this, [ = ]
486 if ( !mBlockChangedSignal )
489 connect( mInsertExpressionButton, &QPushButton::clicked,
this, &QgsAnnotationLineTextItemWidget::mInsertExpressionButton_clicked );
492 if ( !mBlockChangedSignal )
498 mSpinOffset->setClearValue( 0.0 );
499 connect( mSpinOffset,
static_cast < void ( QDoubleSpinBox::* )(
double )
> ( &QDoubleSpinBox::valueChanged ),
this, [ = ]
501 if ( !mBlockChangedSignal )
507 if ( !mBlockChangedSignal )
512QgsAnnotationLineTextItemWidget::~QgsAnnotationLineTextItemWidget() =
default;
517 newItem->
setFormat( mTextFormatWidget->format() );
518 newItem->
setText( mTextEdit->toPlainText() );
524 mPropertiesWidget->updateItem( newItem );
532 lineTextItem->
setFormat( mTextFormatWidget->format() );
533 lineTextItem->setText( mTextEdit->toPlainText() );
535 lineTextItem->setOffsetFromLine( mSpinOffset->value() );
536 lineTextItem->setOffsetFromLineUnit( mOffsetUnitWidget->unit() );
537 lineTextItem->setOffsetFromLineMapUnitScale( mOffsetUnitWidget->getMapUnitScale() );
539 mPropertiesWidget->updateItem( lineTextItem );
543void QgsAnnotationLineTextItemWidget::setDockMode(
bool dockMode )
546 if ( mTextFormatWidget )
547 mTextFormatWidget->setDockMode( dockMode );
553 if ( mTextFormatWidget )
554 mTextFormatWidget->setContext( context );
555 mPropertiesWidget->setContext( context );
558void QgsAnnotationLineTextItemWidget::focusDefaultWidget()
560 mTextEdit->selectAll();
561 mTextEdit->setFocus();
570 mItem.reset( textItem->
clone() );
572 mBlockChangedSignal =
true;
573 mTextFormatWidget->
setFormat( mItem->format() );
574 mTextEdit->setPlainText( mItem->text() );
575 mPropertiesWidget->setItem( mItem.get() );
577 mSpinOffset->setValue( mItem->offsetFromLine() );
578 mOffsetUnitWidget->setUnit( mItem->offsetFromLineUnit() );
579 mOffsetUnitWidget->setMapUnitScale( mItem->offsetFromLineMapUnitScale() );
581 mBlockChangedSignal =
false;
586void QgsAnnotationLineTextItemWidget::mInsertExpressionButton_clicked()
591 if ( context().expressionContext() )
598 exprDlg.setWindowTitle( tr(
"Insert Expression" ) );
599 if ( exprDlg.exec() == QDialog::Accepted )
601 expression = exprDlg.expressionText().trimmed();
602 if ( !expression.isEmpty() )
604 mTextEdit->insertPlainText(
"[%" + expression +
"%]" );
SymbolRotationMode
Modes for handling how symbol and text entity rotation is handled when maps are rotated.
@ RespectMapRotation
Entity is rotated along with the map.
@ IgnoreMapRotation
Entity ignores map rotation.
@ Millimeters
Millimeters.
@ Points
Points (e.g., for font sizes)
@ MetersInMapUnits
Meters value as Map units.
void changed()
Emitted when the alignment is changed.
Abstract base class for annotation items which are drawn with QgsAnnotationLayers.
An annotation item which renders a line symbol along a line geometry.
void setSymbol(QgsLineSymbol *symbol)
Sets the symbol used to render the marker item.
QgsAnnotationLineItem * clone() override
Returns a clone of the item.
An annotation item which renders text along a line geometry.
void setOffsetFromLine(double distance)
Sets the offset distance from the line geometry() to the text's baseline.
void setOffsetFromLineMapUnitScale(const QgsMapUnitScale &scale)
Sets the map unit scale for the offset from line geometry() distance.
void setText(const QString &text)
Sets the text rendered by the item.
void setOffsetFromLineUnit(Qgis::RenderUnit unit)
Sets the unit for the offset from line geometry() distance.
QgsAnnotationLineTextItem * clone() override
Returns a clone of the item.
void setFormat(const QgsTextFormat &format)
Sets the text format used to render the text.
An annotation item which renders a marker symbol at a point location.
QgsAnnotationMarkerItem * clone() override
Returns a clone of the item.
void setSymbol(QgsMarkerSymbol *symbol)
Sets the symbol used to render the marker item.
An annotation item which renders a text string at a point location.
void setText(const QString &text)
Sets the text rendered by the item.
void setFormat(const QgsTextFormat &format)
Sets the text format used to render the text.
void setAngle(double angle)
Sets the text's rotation angle, in degrees clockwise.
void setAlignment(Qt::Alignment alignment)
Sets the text's alignment relative to the reference point().
QgsAnnotationPointTextItem * clone() override
Returns a clone of the item.
void setRotationMode(Qgis::SymbolRotationMode mode)
Sets the rotation mode for the text item.
An annotation item which renders a fill symbol for a polygon geometry.
void setSymbol(QgsFillSymbol *symbol)
Sets the symbol used to render the polygon item.
QgsAnnotationPolygonItem * clone() override
Returns a clone of the item.
static QgsRecentStyleHandler * recentStyleHandler()
Returns the handler for recently used style items.
A generic dialog for building expression strings.
Expression contexts are used to encapsulate the parameters around which a QgsExpression should be eva...
static QString findAndSelectActiveExpression(QgsCodeEditor *editor, const QString &pattern=QString())
Find the expression under the cursor in the given editor and select it.
static QgsFillSymbol * createSimple(const QVariantMap &properties)
Create a fill symbol with one symbol layer: SimpleFill with specified properties.
static QgsLineSymbol * createSimple(const QVariantMap &properties)
Create a line symbol with one symbol layer: SimpleLine with specified properties.
static QgsMarkerSymbol * createSimple(const QVariantMap &properties)
Create a marker symbol with one symbol layer: SimpleMarker with specified properties.
static QgsProject * instance()
Returns the QgsProject singleton instance.
QgsExpressionContext createExpressionContext() const override
This method needs to be reimplemented in all classes which implement this interface and return an exp...
void pushRecentSymbol(const QString &identifier, QgsSymbol *symbol)
Pushes a recently used symbol with the specified identifier.
static QgsStyle * defaultStyle()
Returns default application-wide style.
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.
A widget for customizing text formatting settings.
void widgetChanged()
Emitted when the text format defined by the widget changes.
QList< Qgis::RenderUnit > RenderUnitList
List of render units.