QGIS API Documentation 3.37.0-Master (fdefdf9c27f)
qgsannotationitemwidget_impl.cpp
Go to the documentation of this file.
1/***************************************************************************
2 qgsannotationitemwidget_impl.cpp
3 ------------------------
4 Date : September 2021
5 Copyright : (C) 2021 Nyall Dawson
6 Email : nyall dot dawson at gmail dot com
7 ***************************************************************************
8 * *
9 * This program is free software; you can redistribute it and/or modify *
10 * it under the terms of the GNU General Public License as published by *
11 * the Free Software Foundation; either version 2 of the License, or *
12 * (at your option) any later version. *
13 * *
14 ***************************************************************************/
16
18#include "qgsstyle.h"
19#include "qgsfillsymbol.h"
20#include "qgslinesymbol.h"
21#include "qgsmarkersymbol.h"
28#include "qgstextformatwidget.h"
29#include "qgsapplication.h"
31#include "qgsexpressionfinder.h"
32
34
35QgsAnnotationPolygonItemWidget::QgsAnnotationPolygonItemWidget( QWidget *parent )
37{
38 setupUi( this );
39
40 mSelector = new QgsSymbolSelectorWidget( mSymbol.get(), QgsStyle::defaultStyle(), nullptr, nullptr );
41 mSelector->setDockMode( dockMode() );
42 connect( mSelector, &QgsSymbolSelectorWidget::symbolModified, this, [ = ]
43 {
44 if ( !mBlockChangedSignal )
45 {
46 emit itemChanged();
47 QgsApplication::recentStyleHandler()->pushRecentSymbol( QStringLiteral( "polygon_annotation_item" ), qgis::down_cast< QgsFillSymbol * >( mSelector->symbol()->clone() ) );
48 }
49 } );
50 connect( mSelector, &QgsPanelWidget::showPanel, this, &QgsPanelWidget::openPanel );
51
52 QVBoxLayout *layout = new QVBoxLayout();
53 layout->setContentsMargins( 0, 0, 0, 0 );
54 layout->addWidget( mSelector );
55 mSymbolSelectorFrame->setLayout( layout );
56
57 connect( mPropertiesWidget, &QgsAnnotationItemCommonPropertiesWidget::itemChanged, this, [ = ]
58 {
59 if ( !mBlockChangedSignal )
60 emit itemChanged();
61 } );
62}
63
64QgsAnnotationItem *QgsAnnotationPolygonItemWidget::createItem()
65{
66 QgsAnnotationPolygonItem *newItem = mItem->clone();
67 newItem->setSymbol( mSymbol->clone() );
68 mPropertiesWidget->updateItem( newItem );
69 return newItem;
70}
71
72void QgsAnnotationPolygonItemWidget::updateItem( QgsAnnotationItem *item )
73{
74 if ( QgsAnnotationPolygonItem *polygonItem = dynamic_cast< QgsAnnotationPolygonItem * >( item ) )
75 {
76 polygonItem->setSymbol( mSymbol->clone() );
77 mPropertiesWidget->updateItem( polygonItem );
78 }
79}
80
81void QgsAnnotationPolygonItemWidget::setDockMode( bool dockMode )
82{
84 if ( mSelector )
85 mSelector->setDockMode( dockMode );
86}
87
88void QgsAnnotationPolygonItemWidget::setContext( const QgsSymbolWidgetContext &context )
89{
91 if ( mSelector )
92 mSelector->setContext( context );
93 mPropertiesWidget->setContext( context );
94}
95
96QgsAnnotationPolygonItemWidget::~QgsAnnotationPolygonItemWidget() = default;
97
98bool QgsAnnotationPolygonItemWidget::setNewItem( QgsAnnotationItem *item )
99{
100 QgsAnnotationPolygonItem *polygonItem = dynamic_cast< QgsAnnotationPolygonItem * >( item );
101 if ( !polygonItem )
102 return false;
103
104 mItem.reset( polygonItem->clone() );
105 if ( mItem->symbol() )
106 {
107 mSymbol.reset( mItem->symbol()->clone() );
108 }
109 else
110 {
111 mSymbol.reset( QgsFillSymbol::createSimple( {} ) );
112 }
113 mBlockChangedSignal = true;
114 mSelector->loadSymbol( mSymbol.get() );
115 mSelector->updatePreview();
116 mPropertiesWidget->setItem( mItem.get() );
117 mBlockChangedSignal = false;
118
119 return true;
120}
121
122
123//
124// QgsAnnotationLineItemWidget
125//
126
127QgsAnnotationLineItemWidget::QgsAnnotationLineItemWidget( QWidget *parent )
129{
130 setupUi( this );
131
132 mSelector = new QgsSymbolSelectorWidget( mSymbol.get(), QgsStyle::defaultStyle(), nullptr, nullptr );
133 mSelector->setDockMode( dockMode() );
134 connect( mSelector, &QgsSymbolSelectorWidget::symbolModified, this, [ = ]
135 {
136 if ( !mBlockChangedSignal )
137 {
138 emit itemChanged();
139 QgsApplication::recentStyleHandler()->pushRecentSymbol( QStringLiteral( "line_annotation_item" ), qgis::down_cast< QgsLineSymbol * >( mSelector->symbol()->clone() ) );
140 }
141 } );
142 connect( mSelector, &QgsPanelWidget::showPanel, this, &QgsPanelWidget::openPanel );
143
144 QVBoxLayout *layout = new QVBoxLayout();
145 layout->setContentsMargins( 0, 0, 0, 0 );
146 layout->addWidget( mSelector );
147 mSymbolSelectorFrame->setLayout( layout );
148
149 connect( mPropertiesWidget, &QgsAnnotationItemCommonPropertiesWidget::itemChanged, this, [ = ]
150 {
151 if ( !mBlockChangedSignal )
152 emit itemChanged();
153 } );
154}
155
156QgsAnnotationItem *QgsAnnotationLineItemWidget::createItem()
157{
158 QgsAnnotationLineItem *newItem = mItem->clone();
159 newItem->setSymbol( mSymbol->clone() );
160 mPropertiesWidget->updateItem( newItem );
161 return newItem;
162}
163
164void QgsAnnotationLineItemWidget::updateItem( QgsAnnotationItem *item )
165{
166 if ( QgsAnnotationLineItem *lineItem = dynamic_cast< QgsAnnotationLineItem * >( item ) )
167 {
168 lineItem->setSymbol( mSymbol->clone() );
169 mPropertiesWidget->updateItem( lineItem );
170 }
171}
172
173void QgsAnnotationLineItemWidget::setDockMode( bool dockMode )
174{
176 if ( mSelector )
177 mSelector->setDockMode( dockMode );
178}
179
180void QgsAnnotationLineItemWidget::setContext( const QgsSymbolWidgetContext &context )
181{
183 if ( mSelector )
184 mSelector->setContext( context );
185 mPropertiesWidget->setContext( context );
186}
187
188QgsAnnotationLineItemWidget::~QgsAnnotationLineItemWidget() = default;
189
190bool QgsAnnotationLineItemWidget::setNewItem( QgsAnnotationItem *item )
191{
192 QgsAnnotationLineItem *lineItem = dynamic_cast< QgsAnnotationLineItem * >( item );
193 if ( !lineItem )
194 return false;
195
196 mItem.reset( lineItem->clone() );
197 if ( mItem->symbol() )
198 {
199 mSymbol.reset( mItem->symbol()->clone() );
200 }
201 else
202 {
203 mSymbol.reset( QgsLineSymbol::createSimple( {} ) );
204 }
205 mBlockChangedSignal = true;
206 mSelector->loadSymbol( mSymbol.get() );
207 mSelector->updatePreview();
208 mPropertiesWidget->setItem( mItem.get() );
209 mBlockChangedSignal = false;
210
211 return true;
212}
213
214
215//
216// QgsAnnotationMarkerItemWidget
217//
218
219QgsAnnotationMarkerItemWidget::QgsAnnotationMarkerItemWidget( QWidget *parent )
221{
222 setupUi( this );
223
224 mSelector = new QgsSymbolSelectorWidget( mSymbol.get(), QgsStyle::defaultStyle(), nullptr, nullptr );
225 mSelector->setDockMode( dockMode() );
226 connect( mSelector, &QgsSymbolSelectorWidget::symbolModified, this, [ = ]
227 {
228 if ( !mBlockChangedSignal )
229 {
230 emit itemChanged();
231 QgsApplication::recentStyleHandler()->pushRecentSymbol( QStringLiteral( "marker_annotation_item" ), qgis::down_cast< QgsMarkerSymbol * >( mSelector->symbol()->clone() ) );
232 }
233 } );
234 connect( mSelector, &QgsPanelWidget::showPanel, this, &QgsPanelWidget::openPanel );
235
236 QVBoxLayout *layout = new QVBoxLayout();
237 layout->setContentsMargins( 0, 0, 0, 0 );
238 layout->addWidget( mSelector );
239 mSymbolSelectorFrame->setLayout( layout );
240
241 connect( mPropertiesWidget, &QgsAnnotationItemCommonPropertiesWidget::itemChanged, this, [ = ]
242 {
243 if ( !mBlockChangedSignal )
244 emit itemChanged();
245 } );
246}
247
248QgsAnnotationItem *QgsAnnotationMarkerItemWidget::createItem()
249{
250 QgsAnnotationMarkerItem *newItem = mItem->clone();
251 newItem->setSymbol( mSymbol->clone() );
252 mPropertiesWidget->updateItem( newItem );
253 return newItem;
254}
255
256void QgsAnnotationMarkerItemWidget::updateItem( QgsAnnotationItem *item )
257{
258 if ( QgsAnnotationMarkerItem *markerItem = dynamic_cast< QgsAnnotationMarkerItem * >( item ) )
259 {
260 markerItem->setSymbol( mSymbol->clone() );
261 mPropertiesWidget->updateItem( markerItem );
262 }
263}
264
265void QgsAnnotationMarkerItemWidget::setDockMode( bool dockMode )
266{
268 if ( mSelector )
269 mSelector->setDockMode( dockMode );
270}
271
272void QgsAnnotationMarkerItemWidget::setContext( const QgsSymbolWidgetContext &context )
273{
275 if ( mSelector )
276 mSelector->setContext( context );
277 mPropertiesWidget->setContext( context );
278}
279
280QgsAnnotationMarkerItemWidget::~QgsAnnotationMarkerItemWidget() = default;
281
282bool QgsAnnotationMarkerItemWidget::setNewItem( QgsAnnotationItem *item )
283{
284 QgsAnnotationMarkerItem *markerItem = dynamic_cast< QgsAnnotationMarkerItem * >( item );
285 if ( !markerItem )
286 return false;
287
288 mItem.reset( markerItem->clone() );
289 if ( mItem->symbol() )
290 {
291 mSymbol.reset( mItem->symbol()->clone() );
292 }
293 else
294 {
295 mSymbol.reset( QgsMarkerSymbol::createSimple( {} ) );
296 }
297 mBlockChangedSignal = true;
298 mSelector->loadSymbol( mSymbol.get() );
299 mSelector->updatePreview();
300 mPropertiesWidget->setItem( mItem.get() );
301 mBlockChangedSignal = false;
302
303 return true;
304}
305
306
307
308//
309// QgsAnnotationPointTextItemWidget
310//
311
312QgsAnnotationPointTextItemWidget::QgsAnnotationPointTextItemWidget( QWidget *parent )
314{
315 setupUi( this );
316
317 mTextFormatWidget = new QgsTextFormatWidget();
318 QVBoxLayout *vLayout = new QVBoxLayout();
319 vLayout->setContentsMargins( 0, 0, 0, 0 );
320 vLayout->addWidget( mTextFormatWidget );
321 mTextFormatWidgetContainer->setLayout( vLayout );
322
323 mTextEdit->setMaximumHeight( mTextEdit->fontMetrics().height() * 10 );
324
325 mSpinTextAngle->setClearValue( 0 );
326
327 mRotationModeCombo->addItem( tr( "Ignore Map Rotation" ), QVariant::fromValue( Qgis::SymbolRotationMode::IgnoreMapRotation ) );
328 mRotationModeCombo->addItem( tr( "Rotate With Map" ), QVariant::fromValue( Qgis::SymbolRotationMode::RespectMapRotation ) );
329
330 mAlignmentComboBox->setAvailableAlignments( Qt::AlignLeft | Qt::AlignHCenter | Qt::AlignRight );
331
332 mTextFormatWidget->setDockMode( dockMode() );
333 connect( mTextFormatWidget, &QgsTextFormatWidget::widgetChanged, this, [ = ]
334 {
335 if ( !mBlockChangedSignal )
336 emit itemChanged();
337 } );
338 connect( mTextEdit, &QPlainTextEdit::textChanged, this, [ = ]
339 {
340 if ( !mBlockChangedSignal )
341 emit itemChanged();
342 } );
343 connect( mInsertExpressionButton, &QPushButton::clicked, this, &QgsAnnotationPointTextItemWidget::mInsertExpressionButton_clicked );
344 connect( mPropertiesWidget, &QgsAnnotationItemCommonPropertiesWidget::itemChanged, this, [ = ]
345 {
346 if ( !mBlockChangedSignal )
347 emit itemChanged();
348 } );
349
350 connect( mSpinTextAngle, qOverload< double >( &QgsDoubleSpinBox::valueChanged ), this, [ = ]
351 {
352 if ( !mBlockChangedSignal )
353 emit itemChanged();
354 } );
355
356 connect( mRotationModeCombo, qOverload< int >( &QComboBox::currentIndexChanged ), this, [ = ]
357 {
358 if ( !mBlockChangedSignal )
359 emit itemChanged();
360 } );
361
362 connect( mAlignmentComboBox, &QgsAlignmentComboBox::changed, this, [ = ]
363 {
364 if ( !mBlockChangedSignal )
365 emit itemChanged();
366 } );
367}
368
369QgsAnnotationItem *QgsAnnotationPointTextItemWidget::createItem()
370{
371 QgsAnnotationPointTextItem *newItem = mItem->clone();
372 newItem->setFormat( mTextFormatWidget->format() );
373 newItem->setText( mTextEdit->toPlainText() );
374 newItem->setAngle( mSpinTextAngle->value() );
375 newItem->setRotationMode( mRotationModeCombo->currentData().value< Qgis::SymbolRotationMode >() );
376 newItem->setAlignment( mAlignmentComboBox->currentAlignment() );
377 mPropertiesWidget->updateItem( newItem );
378 return newItem;
379}
380
381void QgsAnnotationPointTextItemWidget::updateItem( QgsAnnotationItem *item )
382{
383 if ( QgsAnnotationPointTextItem *pointTextItem = dynamic_cast< QgsAnnotationPointTextItem * >( item ) )
384 {
385 pointTextItem->setFormat( mTextFormatWidget->format() );
386 pointTextItem->setText( mTextEdit->toPlainText() );
387 pointTextItem->setAngle( mSpinTextAngle->value() );
388 pointTextItem->setRotationMode( mRotationModeCombo->currentData().value< Qgis::SymbolRotationMode >() );
389 pointTextItem->setAlignment( mAlignmentComboBox->currentAlignment() );
390 mPropertiesWidget->updateItem( pointTextItem );
391 }
392}
393
394void QgsAnnotationPointTextItemWidget::setDockMode( bool dockMode )
395{
397 if ( mTextFormatWidget )
398 mTextFormatWidget->setDockMode( dockMode );
399}
400
401void QgsAnnotationPointTextItemWidget::setContext( const QgsSymbolWidgetContext &context )
402{
404 if ( mTextFormatWidget )
405 mTextFormatWidget->setContext( context );
406 mPropertiesWidget->setContext( context );
407}
408
409void QgsAnnotationPointTextItemWidget::focusDefaultWidget()
410{
411 mTextEdit->selectAll();
412 mTextEdit->setFocus();
413}
414
415QgsAnnotationPointTextItemWidget::~QgsAnnotationPointTextItemWidget() = default;
416
417bool QgsAnnotationPointTextItemWidget::setNewItem( QgsAnnotationItem *item )
418{
419 QgsAnnotationPointTextItem *textItem = dynamic_cast< QgsAnnotationPointTextItem * >( item );
420 if ( !textItem )
421 return false;
422
423 mItem.reset( textItem->clone() );
424
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;
433
434 return true;
435}
436
437void QgsAnnotationPointTextItemWidget::mInsertExpressionButton_clicked()
438{
439 QString expression = QgsExpressionFinder::findAndSelectActiveExpression( mTextEdit );
440
441 QgsExpressionContext expressionContext;
442 if ( context().expressionContext() )
443 expressionContext = *( context().expressionContext() );
444 else
445 expressionContext = QgsProject::instance()->createExpressionContext();
446
447 QgsExpressionBuilderDialog exprDlg( nullptr, expression, this, QStringLiteral( "generic" ), expressionContext );
448
449 exprDlg.setWindowTitle( tr( "Insert Expression" ) );
450 if ( exprDlg.exec() == QDialog::Accepted )
451 {
452 expression = exprDlg.expressionText().trimmed();
453 if ( !expression.isEmpty() )
454 {
455 mTextEdit->insertPlainText( "[%" + expression + "%]" );
456 }
457 }
458}
459
460
461//
462// QgsAnnotationLineTextItemWidget
463//
464
465QgsAnnotationLineTextItemWidget::QgsAnnotationLineTextItemWidget( QWidget *parent )
467{
468 setupUi( this );
469
470 mTextFormatWidget = new QgsTextFormatWidget();
471 QVBoxLayout *vLayout = new QVBoxLayout();
472 vLayout->setContentsMargins( 0, 0, 0, 0 );
473 vLayout->addWidget( mTextFormatWidget );
474 mTextFormatWidgetContainer->setLayout( vLayout );
475
476 mTextEdit->setMaximumHeight( mTextEdit->fontMetrics().height() * 10 );
477
478 mTextFormatWidget->setDockMode( dockMode() );
479 connect( mTextFormatWidget, &QgsTextFormatWidget::widgetChanged, this, [ = ]
480 {
481 if ( !mBlockChangedSignal )
482 emit itemChanged();
483 } );
484 connect( mTextEdit, &QPlainTextEdit::textChanged, this, [ = ]
485 {
486 if ( !mBlockChangedSignal )
487 emit itemChanged();
488 } );
489 connect( mInsertExpressionButton, &QPushButton::clicked, this, &QgsAnnotationLineTextItemWidget::mInsertExpressionButton_clicked );
490 connect( mPropertiesWidget, &QgsAnnotationItemCommonPropertiesWidget::itemChanged, this, [ = ]
491 {
492 if ( !mBlockChangedSignal )
493 emit itemChanged();
494 } );
495
498 mSpinOffset->setClearValue( 0.0 );
499 connect( mSpinOffset, static_cast < void ( QDoubleSpinBox::* )( double ) > ( &QDoubleSpinBox::valueChanged ), this, [ = ]
500 {
501 if ( !mBlockChangedSignal )
502 emit itemChanged();
503 } );
504
505 connect( mOffsetUnitWidget, &QgsUnitSelectionWidget::changed, this, [ = ]
506 {
507 if ( !mBlockChangedSignal )
508 emit itemChanged();
509 } );
510}
511
512QgsAnnotationLineTextItemWidget::~QgsAnnotationLineTextItemWidget() = default;
513
514QgsAnnotationItem *QgsAnnotationLineTextItemWidget::createItem()
515{
516 QgsAnnotationLineTextItem *newItem = mItem->clone();
517 newItem->setFormat( mTextFormatWidget->format() );
518 newItem->setText( mTextEdit->toPlainText() );
519
520 newItem->setOffsetFromLine( mSpinOffset->value() );
521 newItem->setOffsetFromLineUnit( mOffsetUnitWidget->unit() );
522 newItem->setOffsetFromLineMapUnitScale( mOffsetUnitWidget->getMapUnitScale() );
523
524 mPropertiesWidget->updateItem( newItem );
525 return newItem;
526}
527
528void QgsAnnotationLineTextItemWidget::updateItem( QgsAnnotationItem *item )
529{
530 if ( QgsAnnotationLineTextItem *lineTextItem = dynamic_cast< QgsAnnotationLineTextItem * >( item ) )
531 {
532 lineTextItem->setFormat( mTextFormatWidget->format() );
533 lineTextItem->setText( mTextEdit->toPlainText() );
534
535 lineTextItem->setOffsetFromLine( mSpinOffset->value() );
536 lineTextItem->setOffsetFromLineUnit( mOffsetUnitWidget->unit() );
537 lineTextItem->setOffsetFromLineMapUnitScale( mOffsetUnitWidget->getMapUnitScale() );
538
539 mPropertiesWidget->updateItem( lineTextItem );
540 }
541}
542
543void QgsAnnotationLineTextItemWidget::setDockMode( bool dockMode )
544{
546 if ( mTextFormatWidget )
547 mTextFormatWidget->setDockMode( dockMode );
548}
549
550void QgsAnnotationLineTextItemWidget::setContext( const QgsSymbolWidgetContext &context )
551{
553 if ( mTextFormatWidget )
554 mTextFormatWidget->setContext( context );
555 mPropertiesWidget->setContext( context );
556}
557
558void QgsAnnotationLineTextItemWidget::focusDefaultWidget()
559{
560 mTextEdit->selectAll();
561 mTextEdit->setFocus();
562}
563
564bool QgsAnnotationLineTextItemWidget::setNewItem( QgsAnnotationItem *item )
565{
566 QgsAnnotationLineTextItem *textItem = dynamic_cast< QgsAnnotationLineTextItem * >( item );
567 if ( !textItem )
568 return false;
569
570 mItem.reset( textItem->clone() );
571
572 mBlockChangedSignal = true;
573 mTextFormatWidget->setFormat( mItem->format() );
574 mTextEdit->setPlainText( mItem->text() );
575 mPropertiesWidget->setItem( mItem.get() );
576
577 mSpinOffset->setValue( mItem->offsetFromLine() );
578 mOffsetUnitWidget->setUnit( mItem->offsetFromLineUnit() );
579 mOffsetUnitWidget->setMapUnitScale( mItem->offsetFromLineMapUnitScale() );
580
581 mBlockChangedSignal = false;
582
583 return true;
584}
585
586void QgsAnnotationLineTextItemWidget::mInsertExpressionButton_clicked()
587{
588 QString expression = QgsExpressionFinder::findAndSelectActiveExpression( mTextEdit );
589
590 QgsExpressionContext expressionContext;
591 if ( context().expressionContext() )
592 expressionContext = *( context().expressionContext() );
593 else
594 expressionContext = QgsProject::instance()->createExpressionContext();
595
596 QgsExpressionBuilderDialog exprDlg( nullptr, expression, this, QStringLiteral( "generic" ), expressionContext );
597
598 exprDlg.setWindowTitle( tr( "Insert Expression" ) );
599 if ( exprDlg.exec() == QDialog::Accepted )
600 {
601 expression = exprDlg.expressionText().trimmed();
602 if ( !expression.isEmpty() )
603 {
604 mTextEdit->insertPlainText( "[%" + expression + "%]" );
605 }
606 }
607}
608
610
SymbolRotationMode
Modes for handling how symbol and text entity rotation is handled when maps are rotated.
Definition: qgis.h:574
@ RespectMapRotation
Entity is rotated along with the map.
@ IgnoreMapRotation
Entity ignores map rotation.
@ Millimeters
Millimeters.
@ Points
Points (e.g., for font sizes)
@ MapUnits
Map units.
@ MetersInMapUnits
Meters value as Map units.
void changed()
Emitted when the alignment is changed.
A base class for property widgets for annotation items.
virtual void setContext(const QgsSymbolWidgetContext &context)
Sets the context in which the widget is shown, e.g., the associated map canvas and expression context...
void itemChanged()
Emitted when the annotation item definition in the widget is changed by the user.
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() const 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.
QgsAnnotationLineTextItem * clone() const override
Returns a clone of the item.
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.
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.
void setSymbol(QgsMarkerSymbol *symbol)
Sets the symbol used to render the marker item.
QgsAnnotationMarkerItem * clone() const override
Returns a clone of the 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.
QgsAnnotationPointTextItem * clone() const override
Returns a clone of the item.
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().
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() const 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.
void showPanel(QgsPanelWidget *panel)
Emit when you require a panel to be show in the interface.
void openPanel(QgsPanelWidget *panel)
Open a panel or dialog depending on dock mode setting If dock mode is true this method will emit the ...
virtual void setDockMode(bool dockMode)
Set the widget in dock mode which tells the widget to emit panel widgets and not open dialogs.
static QgsProject * instance()
Returns the QgsProject singleton instance.
Definition: qgsproject.cpp:481
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(bool initialize=true)
Returns the default application-wide style.
Definition: qgsstyle.cpp:145
Symbol selector widget that can be used to select and build a symbol.
void symbolModified()
Emitted when a symbol is modified in 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.
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.
Definition: qgsunittypes.h:81