50#include <QButtonGroup>
54#include "moc_qgstextformatwidget.cpp"
56using namespace Qt::StringLiterals;
64 setWidgetMode(
Text );
78 setWidgetMode( mode );
81void QgsTextFormatWidget::initWidget()
85 mGeometryGeneratorGroupBox->setCollapsed(
true );
87 mTextItem =
new QListWidgetItem( tr(
"Text" ), mLabelingOptionsListWidget );
89 mTextItem->setToolTip( tr(
"Text style" ) );
91 mFormattingItem =
new QListWidgetItem( tr(
"Formatting" ), mLabelingOptionsListWidget );
95 mBufferItem =
new QListWidgetItem( tr(
"Buffer" ), mLabelingOptionsListWidget );
99 mMaskItem =
new QListWidgetItem( tr(
"Mask" ), mLabelingOptionsListWidget );
103 mBackgroundItem =
new QListWidgetItem( tr(
"Background" ), mLabelingOptionsListWidget );
107 mShadowItem =
new QListWidgetItem( tr(
"Shadow" ), mLabelingOptionsListWidget );
111 mCalloutItem =
new QListWidgetItem( tr(
"Callouts" ), mLabelingOptionsListWidget );
115 mPlacementItem =
new QListWidgetItem( tr(
"Placement" ), mLabelingOptionsListWidget );
119 mRenderingItem =
new QListWidgetItem( tr(
"Rendering" ), mLabelingOptionsListWidget );
123#if ( GEOS_VERSION_MAJOR == 3 && GEOS_VERSION_MINOR < 10 )
124 mDuplicatesStackedWidget->setCurrentWidget( mDuplicatesNotAvailableWidget );
125 mLabelSpacingStackedWidget->setCurrentWidget( mLabelSpacingNotAvailableWidget );
128 mLabelingOptionsListWidget->addItem(
mTextItem );
130 mLabelingOptionsListWidget->addItem(
mBufferItem );
131 mLabelingOptionsListWidget->addItem(
mMaskItem );
133 mLabelingOptionsListWidget->addItem(
mShadowItem );
138 QObject::connect( mOptionsTab, &QTabWidget::currentChanged,
this, [
this](
int index ) {
139 if ( index == mOptionsTab->indexOf( textTab ) )
140 mLabelStackedWidget->setCurrentWidget( mLabelPage_Text );
141 else if ( index == mOptionsTab->indexOf( formattingTab ) )
142 mLabelStackedWidget->setCurrentWidget( mLabelPage_Formatting );
143 else if ( index == mOptionsTab->indexOf( maskTab ) )
144 mLabelStackedWidget->setCurrentWidget( mLabelPage_Mask );
145 else if ( index == mOptionsTab->indexOf( bufferTab ) )
146 mLabelStackedWidget->setCurrentWidget( mLabelPage_Buffer );
147 else if ( index == mOptionsTab->indexOf( backgroundTab ) )
148 mLabelStackedWidget->setCurrentWidget( mLabelPage_Background );
149 else if ( index == mOptionsTab->indexOf( shadowTab ) )
150 mLabelStackedWidget->setCurrentWidget( mLabelPage_Shadow );
151 else if ( index == mOptionsTab->indexOf( calloutsTab ) )
152 mLabelStackedWidget->setCurrentWidget( mLabelPage_Callouts );
153 else if ( index == mOptionsTab->indexOf( placementTab ) )
154 mLabelStackedWidget->setCurrentWidget( mLabelPage_Placement );
155 else if ( index == mOptionsTab->indexOf( renderingTab ) )
156 mLabelStackedWidget->setCurrentWidget( mLabelPage_Rendering );
159 QObject::connect( mLabelingOptionsListWidget, &QListWidget::currentRowChanged,
this, [
this](
int ) {
160 QListWidgetItem *currentItem = mLabelingOptionsListWidget->currentItem();
164 mLabelStackedWidget->setCurrentWidget( mLabelPage_Text );
166 mLabelStackedWidget->setCurrentWidget( mLabelPage_Formatting );
168 mLabelStackedWidget->setCurrentWidget( mLabelPage_Mask );
170 mLabelStackedWidget->setCurrentWidget( mLabelPage_Buffer );
172 mLabelStackedWidget->setCurrentWidget( mLabelPage_Background );
174 mLabelStackedWidget->setCurrentWidget( mLabelPage_Shadow );
176 mLabelStackedWidget->setCurrentWidget( mLabelPage_Callouts );
178 mLabelStackedWidget->setCurrentWidget( mLabelPage_Placement );
180 mLabelStackedWidget->setCurrentWidget( mLabelPage_Rendering );
183 QObject::connect( mLabelingOptionsListWidget, &QListWidget::currentRowChanged, mLabelStackedWidget, &QStackedWidget::setCurrentIndex );
185 connect( mShapeSVGPathLineEdit, &QLineEdit::textChanged,
this, &QgsTextFormatWidget::mShapeSVGPathLineEdit_textChanged );
186 connect( mFontSizeSpinBox,
static_cast<void ( QDoubleSpinBox::* )(
double )
>( &QDoubleSpinBox::valueChanged ),
this, &QgsTextFormatWidget::mFontSizeSpinBox_valueChanged );
187 connect( mFontFamilyCmbBx, &QFontComboBox::currentFontChanged,
this, &QgsTextFormatWidget::mFontFamilyCmbBx_currentFontChanged );
188 connect( mFontStyleComboBox, &QComboBox::currentTextChanged,
this, &QgsTextFormatWidget::mFontStyleComboBox_currentIndexChanged );
189 connect( mFontUnderlineBtn, &QToolButton::toggled,
this, &QgsTextFormatWidget::mFontUnderlineBtn_toggled );
190 connect( mFontStrikethroughBtn, &QToolButton::toggled,
this, &QgsTextFormatWidget::mFontStrikethroughBtn_toggled );
191 connect( mFontWordSpacingSpinBox,
static_cast<void ( QDoubleSpinBox::* )(
double )
>( &QDoubleSpinBox::valueChanged ),
this, &QgsTextFormatWidget::mFontWordSpacingSpinBox_valueChanged );
192 connect( mFontLetterSpacingSpinBox,
static_cast<void ( QDoubleSpinBox::* )(
double )
>( &QDoubleSpinBox::valueChanged ),
this, &QgsTextFormatWidget::mFontLetterSpacingSpinBox_valueChanged );
194 connect( mFontMinPixelSpinBox,
static_cast<void ( QSpinBox::* )(
int )
>( &QSpinBox::valueChanged ),
this, &QgsTextFormatWidget::mFontMinPixelSpinBox_valueChanged );
195 connect( mFontMaxPixelSpinBox,
static_cast<void ( QSpinBox::* )(
int )
>( &QSpinBox::valueChanged ),
this, &QgsTextFormatWidget::mFontMaxPixelSpinBox_valueChanged );
204 connect( mShapeTypeCmbBx,
static_cast<void ( QComboBox::* )(
int )
>( &QComboBox::currentIndexChanged ),
this, &QgsTextFormatWidget::mShapeTypeCmbBx_currentIndexChanged );
205 connect( mShapeRotationCmbBx,
static_cast<void ( QComboBox::* )(
int )
>( &QComboBox::currentIndexChanged ),
this, &QgsTextFormatWidget::mShapeRotationCmbBx_currentIndexChanged );
206 connect( mShapeSVGParamsBtn, &QPushButton::clicked,
this, &QgsTextFormatWidget::mShapeSVGParamsBtn_clicked );
207 connect( mShapeSVGSelectorBtn, &QPushButton::clicked,
this, &QgsTextFormatWidget::mShapeSVGSelectorBtn_clicked );
208 connect( mPreviewTextEdit, &QLineEdit::textChanged,
this, &QgsTextFormatWidget::mPreviewTextEdit_textChanged );
209 connect( mPreviewTextBtn, &QToolButton::clicked,
this, &QgsTextFormatWidget::mPreviewTextBtn_clicked );
211 connect( mDirectSymbLeftToolBtn, &QToolButton::clicked,
this, &QgsTextFormatWidget::mDirectSymbLeftToolBtn_clicked );
212 connect( mDirectSymbRightToolBtn, &QToolButton::clicked,
this, &QgsTextFormatWidget::mDirectSymbRightToolBtn_clicked );
213 connect( chkLineOrientationDependent, &QCheckBox::toggled,
this, &QgsTextFormatWidget::chkLineOrientationDependent_toggled );
214 connect( mToolButtonConfigureSubstitutes, &QToolButton::clicked,
this, &QgsTextFormatWidget::mToolButtonConfigureSubstitutes_clicked );
215 connect( mKerningCheckBox, &QCheckBox::toggled,
this, &QgsTextFormatWidget::kerningToggled );
216 connect( mComboOverlapHandling, qOverload<int>( &QComboBox::currentIndexChanged ),
this, &QgsTextFormatWidget::overlapModeChanged );
217 connect( mTabStopsButton, &QToolButton::clicked,
this, &QgsTextFormatWidget::configureTabStops );
220 mOptionsTab->setIconSize( QSize( iconSize, iconSize ) );
221 mLabelingOptionsListWidget->setIconSize( QSize( iconSize, iconSize ) );
227 mPreviewTextBtn->setIconSize( QSize( iconSize16, iconSize16 ) );
228 mPointOffsetAboveLeft->setIconSize( QSize( iconSize32, iconSize18 ) );
229 mPointOffsetAbove->setIconSize( QSize( iconSize32, iconSize18 ) );
230 mPointOffsetAboveRight->setIconSize( QSize( iconSize32, iconSize18 ) );
231 mPointOffsetLeft->setIconSize( QSize( iconSize32, iconSize18 ) );
232 mPointOffsetOver->setIconSize( QSize( iconSize32, iconSize18 ) );
233 mPointOffsetRight->setIconSize( QSize( iconSize32, iconSize18 ) );
234 mPointOffsetBelowLeft->setIconSize( QSize( iconSize32, iconSize18 ) );
235 mPointOffsetBelow->setIconSize( QSize( iconSize32, iconSize18 ) );
236 mPointOffsetBelowRight->setIconSize( QSize( iconSize32, iconSize18 ) );
241 mFontUnderlineBtn->setMinimumSize( buttonSize, buttonSize );
242 mFontUnderlineBtn->setMaximumSize( buttonSize, buttonSize );
243 mFontStrikethroughBtn->setMinimumSize( buttonSize, buttonSize );
244 mFontStrikethroughBtn->setMaximumSize( buttonSize, buttonSize );
245 mFontBoldBtn->setMinimumSize( buttonSize, buttonSize );
246 mFontBoldBtn->setMaximumSize( buttonSize, buttonSize );
247 mFontItalicBtn->setMinimumSize( buttonSize, buttonSize );
248 mFontItalicBtn->setMaximumSize( buttonSize, buttonSize );
250 mPreviewScaleComboBox->setMapCanvas(
mMapCanvas );
251 mPreviewScaleComboBox->setShowCurrentScaleButton(
true );
254 const auto unitWidgets = findChildren<QgsUnitSelectionWidget *>();
255 for ( QgsUnitSelectionWidget *unitWidget : unitWidgets )
259 mFontSizeUnitWidget->setUnits(
262 mBufferUnitWidget->setUnits(
272 mMaskBufferUnitWidget->setUnits(
282 mShapeSizeUnitWidget->setUnits(
285 mShapeOffsetUnitWidget->setUnits(
288 mShapeRadiusUnitWidget->setUnits(
298 mShapeStrokeWidthUnitWidget->setUnits(
301 mShadowOffsetUnitWidget->setUnits(
311 mShadowRadiusUnitWidget->setUnits(
321 mPointOffsetUnitWidget->setUnits(
324 mLineDistanceUnitWidget->setUnits(
327 mMaximumDistanceUnitWidget->setUnits(
330 mRepeatDistanceUnitWidget->setUnits(
333 mOverrunDistanceUnitWidget->setUnits(
336 mLabelMarginUnitWidget->setUnits(
339 mLineHeightUnitWidget->setUnits(
342 mTabDistanceUnitWidget->setUnits(
345 mFontLineHeightSpinBox->setClearValue( 100.0 );
346 mShapeRotationDblSpnBx->setClearValue( 0.0 );
347 mShapeOffsetXSpnBx->setClearValue( 0.0 );
348 mShapeOffsetYSpnBx->setClearValue( 0.0 );
349 mPointOffsetXSpinBox->setClearValue( 0.0 );
350 mPointOffsetYSpinBox->setClearValue( 0.0 );
351 mPointAngleSpinBox->setClearValue( 0.0 );
352 mFontLetterSpacingSpinBox->setClearValue( 0.0 );
353 mFontWordSpacingSpinBox->setClearValue( 0.0 );
354 mZIndexSpinBox->setClearValue( 0.0 );
355 mLineDistanceSpnBx->setClearValue( 0.0 );
356 mMaximumDistanceSpnBx->setMinimum( 0 );
357 mMaximumDistanceSpnBx->setClearValue( 0.0, tr(
"Not set" ) );
358 mSpinStretch->setClearValue( 100 );
359 mTabStopDistanceSpin->setMinimum( 0 );
363 mFontLineHeightSpinBox->setClearValue( 100.0 );
365 mFontLineHeightSpinBox->setClearValue( 10.0 );
389 connect( mComboCurvedLabelMode, qOverload<int>( &QComboBox::currentIndexChanged ),
this, &QgsTextFormatWidget::updateCurvedLabelDescription );
390 QFont font = mCurvedModeDescriptionLabel->font();
391 font.setItalic(
true );
392 mCurvedModeDescriptionLabel->setFont( font );
393 updateCurvedLabelDescription();
399 updateAvailableShadowPositions();
402 mBackgroundMarkerSymbolButton->setDialogTitle( tr(
"Background Symbol" ) );
403 mBackgroundMarkerSymbolButton->registerExpressionContextGenerator(
this );
404 mBackgroundMarkerSymbolButton->setMapCanvas(
mMapCanvas );
406 mBackgroundFillSymbolButton->setDialogTitle( tr(
"Background Symbol" ) );
407 mBackgroundFillSymbolButton->registerExpressionContextGenerator(
this );
408 mBackgroundFillSymbolButton->setMapCanvas(
mMapCanvas );
410 mCharDlg =
new QgsCharacterSelectorDialog(
this );
412 mRefFont = lblFontPreview->font();
415 connect( mShadowOffsetAngleDial, &QAbstractSlider::valueChanged, mShadowOffsetAngleSpnBx, &QSpinBox::setValue );
416 connect( mShadowOffsetAngleSpnBx,
static_cast<void ( QSpinBox::* )(
int )
>( &QSpinBox::valueChanged ), mShadowOffsetAngleDial, &QAbstractSlider::setValue );
417 connect( mLimitLabelChkBox, &QAbstractButton::toggled, mLimitLabelSpinBox, &QWidget::setEnabled );
418 connect( mCheckBoxSubstituteText, &QAbstractButton::toggled, mToolButtonConfigureSubstitutes, &QWidget::setEnabled );
428 populateFontCapitalsComboBox();
431 mPreviewBackgroundBtn->setColorDialogTitle( tr(
"Select Fill Color" ) );
432 mPreviewBackgroundBtn->setContext( u
"labeling"_s );
433 mPreviewBackgroundBtn->setColor( QColor( 255, 255, 255 ) );
434 btnTextColor->setColorDialogTitle( tr(
"Select Text Color" ) );
435 btnTextColor->setContext( u
"labeling"_s );
436 btnTextColor->setDefaultColor( Qt::black );
437 btnBufferColor->setColorDialogTitle( tr(
"Select Buffer Color" ) );
438 btnBufferColor->setContext( u
"labeling"_s );
439 btnBufferColor->setDefaultColor( Qt::white );
440 mShapeStrokeColorBtn->setColorDialogTitle( tr(
"Select Stroke Color" ) );
441 mShapeStrokeColorBtn->setContext( u
"labeling"_s );
442 mShapeFillColorBtn->setColorDialogTitle( tr(
"Select Fill Color" ) );
443 mShapeFillColorBtn->setContext( u
"labeling"_s );
444 mShadowColorBtn->setColorDialogTitle( tr(
"Select Shadow Color" ) );
445 mShadowColorBtn->setContext( u
"labeling"_s );
446 mShadowColorBtn->setDefaultColor( Qt::black );
448 mFontColorDDBtn->registerLinkedWidget( btnTextColor );
449 mBufferColorDDBtn->registerLinkedWidget( btnBufferColor );
450 mShapeStrokeColorDDBtn->registerLinkedWidget( mShapeStrokeColorBtn );
451 mShapeFillColorDDBtn->registerLinkedWidget( mShapeFillColorBtn );
452 mShadowColorDDBtn->registerLinkedWidget( mShadowColorBtn );
493 const auto groupBoxes = findChildren<QgsCollapsibleGroupBox *>();
494 for ( QgsCollapsibleGroupBox *grpbox : groupBoxes )
496 grpbox->setSettingGroup( u
"mAdvLabelingDlg"_s );
502 mLabelingOptionsListWidget->setAttribute( Qt::WA_MacShowFocusRect,
false );
504 const QgsSettings settings;
507 QSizePolicy policy( mLabelingOptionsListFrame->sizePolicy() );
508 policy.setHorizontalStretch( 0 );
509 mLabelingOptionsListFrame->setSizePolicy( policy );
510 if ( !settings.
contains( u
"/Windows/Labeling/OptionsSplitState"_s ) )
513 QList<int> splitsizes;
515 mLabelingOptionsSplitter->setSizes( splitsizes );
519 connect( mLabelStackedWidget, &QStackedWidget::currentChanged,
this, &QgsTextFormatWidget::optionsStackedWidget_CurrentChanged );
522 mFontPreviewSplitter->restoreState( settings.
value( u
"Windows/Labeling/FontPreviewSplitState"_s ).toByteArray() );
523 mLabelingOptionsSplitter->restoreState( settings.
value( u
"Windows/Labeling/OptionsSplitState"_s ).toByteArray() );
525 mLabelingOptionsListWidget->setCurrentRow( settings.
value( u
"Windows/Labeling/Tab"_s, 0 ).toInt() );
529 mBufferEffectWidget->setPaintEffect( mBufferEffect.get() );
533 mMaskEffectWidget->setPaintEffect( mMaskEffect.get() );
537 mBackgroundEffectWidget->setPaintEffect( mBackgroundEffect.get() );
539 overlapModeChanged();
543 QList<QWidget *> widgets;
547 << mComboMultipartBehavior
551 << chkLineOrientationDependent
553 << chkPreserveRotation
555 << comboBufferBlendMode
557 << mBufferJoinStyleComboBox
558 << mBufferTranspFillChbx
559 << mBufferOpacityWidget
560 << mCentroidInsideCheckBox
562 << mCoordRotationUnitComboBox
564 << mDirectSymbLeftLineEdit
565 << mDirectSymbRevChkBx
566 << mDirectSymbRightLineEdit
567 << mFitInsidePolygonCheckBox
568 << mFontCapitalsComboBox
569 << mFontLetterSpacingSpinBox
570 << mFontLimitPixelChkBox
571 << mFontLineHeightSpinBox
572 << mLineHeightUnitWidget
573 << mFontMaxPixelSpinBox
574 << mFontMinPixelSpinBox
575 << mFontMultiLineAlignComboBox
577 << mFontStyleComboBox
578 << mTextOrientationComboBox
579 << mTextOpacityWidget
581 << mFontWordSpacingSpinBox
583 << mFormatNumDecimalsSpnBx
584 << mFormatNumPlusSignChkBx
586 << mLimitLabelSpinBox
587 << mLineDistanceSpnBx
588 << mLineDistanceUnitWidget
589 << mMaximumDistanceSpnBx
590 << mMaximumDistanceUnitWidget
591 << mMaxCharAngleInDSpinBox
592 << mMaxCharAngleOutDSpinBox
594 << mOffsetTypeComboBox
595 << mCheckAllowDegradedPlacement
596 << mComboOverlapHandling
597 << mPointAngleSpinBox
598 << mPointOffsetUnitWidget
599 << mPointOffsetXSpinBox
600 << mPointOffsetYSpinBox
601 << mPreviewBackgroundBtn
604 << mRepeatDistanceSpinBox
605 << mRepeatDistanceUnitWidget
606 << mOverrunDistanceSpinBox
607 << mOverrunDistanceUnitWidget
608 << mLabelMarginSpinBox
609 << mLabelMarginUnitWidget
610 << mScaleBasedVisibilityChkBx
616 << mShadowOffsetAngleSpnBx
617 << mShadowOffsetGlobalChkBx
618 << mShadowOffsetSpnBx
619 << mShadowOffsetUnitWidget
620 << mShadowRadiusAlphaChkBx
621 << mShadowRadiusDblSpnBx
622 << mShadowRadiusUnitWidget
624 << mShadowOpacityWidget
627 << mShapeStrokeColorBtn
628 << mShapeStrokeWidthSpnBx
629 << mShapeStrokeWidthUnitWidget
631 << mShapeFillColorBtn
632 << mShapeOffsetXSpnBx
633 << mShapeOffsetYSpnBx
634 << mShapeOffsetUnitWidget
635 << mShapeRadiusXDbSpnBx
636 << mShapeRadiusYDbSpnBx
637 << mShapeRotationCmbBx
638 << mShapeRotationDblSpnBx
639 << mShapeRadiusUnitWidget
640 << mShapeSVGPathLineEdit
642 << mShapeSizeUnitWidget
645 << mBackgroundOpacityWidget
650 << mAutoWrapLengthSpinBox
651 << mAutoWrapTypeComboBox
652 << mCentroidRadioVisible
653 << mCentroidRadioWhole
654 << mDirectSymbRadioBtnAbove
655 << mDirectSymbRadioBtnBelow
656 << mDirectSymbRadioBtnLR
657 << mUpsidedownRadioAll
658 << mUpsidedownRadioDefined
659 << mUpsidedownRadioOff
660 << mPlacementModeComboBox
661 << mFieldExpressionWidget
662 << mCheckBoxSubstituteText
663 << mGeometryGeneratorGroupBox
664 << mGeometryGenerator
665 << mGeometryGeneratorType
666 << mBackgroundMarkerSymbolButton
667 << mBackgroundFillSymbolButton
668 << mCalloutsDrawCheckBox
669 << mCalloutStyleComboBox
672 << mMaskJoinStyleComboBox
673 << mMaskBufferSizeSpinBox
674 << mMaskOpacityWidget
675 << mCheckAllowLabelsOutsidePolygons
676 << mHtmlFormattingCheckBox
677 << mPrioritizationComboBox
678 << mComboCurvedLabelMode
679 << mTabDistanceUnitWidget
680 << mTabStopDistanceSpin
682 << mCheckWhitespaceIsNotACollision;
684 connectValueChanged( widgets );
689 connect( mBufferDrawChkBx, &QCheckBox::stateChanged,
this, [
this](
int ) { updateBufferFrameStatus(); } );
691 connect( mShapeDrawChkBx, &QCheckBox::stateChanged,
this, [
this](
int ) { updateShapeFrameStatus(); } );
693 connect( mShadowDrawChkBx, &QCheckBox::stateChanged,
this, [
this](
int ) { updateShadowFrameStatus(); } );
695 connect( mCalloutsDrawCheckBox, &QCheckBox::stateChanged,
this, [
this](
int ) { updateCalloutFrameStatus(); } );
702 whileBlocking( mOptionsTab )->setCurrentIndex( mLabelStackedWidget->currentIndex() );
703 mOptionsTab->tabBar()->setUsesScrollButtons(
true );
708 lblFontPreview->setMapUnits(
mMapCanvas->mapSettings().mapUnits() );
709 mPreviewScaleComboBox->setScale(
mMapCanvas->mapSettings().scale() );
731 const int prevIndex = mOptionsTab->currentIndex();
741 mOptionsTab->removeTab( mOptionsTab->indexOf( renderingTab ) );
742 mOptionsTab->removeTab( mOptionsTab->indexOf( placementTab ) );
743 mOptionsTab->removeTab( mOptionsTab->indexOf( calloutsTab ) );
744 mOptionsTab->removeTab( mOptionsTab->indexOf( maskTab ) );
745 mLabelStackedWidget->removeWidget( mLabelPage_Rendering );
746 mLabelStackedWidget->removeWidget( mLabelPage_Callouts );
747 mLabelStackedWidget->removeWidget( mLabelPage_Mask );
748 mLabelStackedWidget->removeWidget( mLabelPage_Placement );
758 mLabelStackedWidget->setCurrentIndex( prevIndex - 1 );
759 mOptionsTab->setCurrentIndex( prevIndex - 1 );
766 mLabelStackedWidget->setCurrentIndex( 0 );
767 mOptionsTab->setCurrentIndex( 0 );
771 mStackedWidgetLabelWith->hide();
772 mDirectSymbolsFrame->hide();
773 mFormatNumFrame->hide();
774 mFormatNumChkBx->hide();
775 mFormatNumDDBtn->hide();
776 mCheckBoxSubstituteText->hide();
777 mToolButtonConfigureSubstitutes->hide();
778 mLabelWrapOnCharacter->hide();
779 wrapCharacterEdit->hide();
780 mWrapCharDDBtn->hide();
781 mLabelWrapLinesTo->hide();
782 mAutoWrapLengthSpinBox->hide();
783 mAutoWrapLengthDDBtn->hide();
784 mAutoWrapTypeComboBox->hide();
785 mFontMultiLineLabel->hide();
786 mFontMultiLineAlignComboBox->hide();
787 mFontMultiLineAlignDDBtn->hide();
797 const QList<QgsPropertyOverrideButton *> buttons = findChildren<QgsPropertyOverrideButton *>();
800 button->setVisible( visible );
806 mOptionsTab->setVisible( enabled );
807 if (
int tabIndex = mOptionsTab->indexOf( textTab ); tabIndex >= 0 )
808 mOptionsTab->setTabToolTip( tabIndex, tr(
"Text" ) );
809 if (
int tabIndex = mOptionsTab->indexOf( formattingTab ); tabIndex >= 0 )
810 mOptionsTab->setTabToolTip( tabIndex, tr(
"Formatting" ) );
811 if (
int tabIndex = mOptionsTab->indexOf( bufferTab ); tabIndex >= 0 )
812 mOptionsTab->setTabToolTip( tabIndex, tr(
"Buffer" ) );
813 if (
int tabIndex = mOptionsTab->indexOf( maskTab ); tabIndex >= 0 )
814 mOptionsTab->setTabToolTip( tabIndex, tr(
"Mask" ) );
815 if (
int tabIndex = mOptionsTab->indexOf( backgroundTab ); tabIndex >= 0 )
816 mOptionsTab->setTabToolTip( tabIndex, tr(
"Background" ) );
817 if (
int tabIndex = mOptionsTab->indexOf( shadowTab ); tabIndex >= 0 )
818 mOptionsTab->setTabToolTip( tabIndex, tr(
"Shadow" ) );
819 if (
int tabIndex = mOptionsTab->indexOf( calloutsTab ); tabIndex >= 0 )
820 mOptionsTab->setTabToolTip( tabIndex, tr(
"Callouts" ) );
821 if (
int tabIndex = mOptionsTab->indexOf( placementTab ); tabIndex >= 0 )
822 mOptionsTab->setTabToolTip( tabIndex, tr(
"Placement" ) );
823 if (
int tabIndex = mOptionsTab->indexOf( renderingTab ); tabIndex >= 0 )
824 mOptionsTab->setTabToolTip( tabIndex, tr(
"Rendering" ) );
826 mLabelingOptionsListFrame->setVisible( !enabled );
827 groupBox_mPreview->setVisible( !enabled );
831void QgsTextFormatWidget::connectValueChanged(
const QList<QWidget *> &widgets )
833 const auto constWidgets = widgets;
834 for ( QWidget *widget : constWidgets )
840 else if ( QgsFieldExpressionWidget *w = qobject_cast<QgsFieldExpressionWidget *>( widget ) )
844 else if ( QgsOpacityWidget *w = qobject_cast<QgsOpacityWidget *>( widget ) )
848 else if ( QgsScaleWidget *w = qobject_cast<QgsScaleWidget *>( widget ) )
852 else if ( QgsUnitSelectionWidget *w = qobject_cast<QgsUnitSelectionWidget *>( widget ) )
856 else if ( QComboBox *w = qobject_cast<QComboBox *>( widget ) )
860 else if ( QSpinBox *w = qobject_cast<QSpinBox *>( widget ) )
864 else if ( QDoubleSpinBox *w = qobject_cast<QDoubleSpinBox *>( widget ) )
868 else if ( QgsColorButton *w = qobject_cast<QgsColorButton *>( widget ) )
872 else if ( QCheckBox *w = qobject_cast<QCheckBox *>( widget ) )
876 else if ( QRadioButton *w = qobject_cast<QRadioButton *>( widget ) )
880 else if ( QLineEdit *w = qobject_cast<QLineEdit *>( widget ) )
884 else if ( QSlider *w = qobject_cast<QSlider *>( widget ) )
888 else if ( QGroupBox *w = qobject_cast<QGroupBox *>( widget ) )
892 else if ( QgsCodeEditorExpression *w = qobject_cast<QgsCodeEditorExpression *>( widget ) )
898 QgsLogger::warning( u
"Could not create connection for widget %1"_s.arg( widget->objectName() ) );
931 mDirectSymbDDBtn->registerCheckedWidget( mDirectSymbChkBx );
939 mFormatNumDDBtn->registerCheckedWidget( mFormatNumChkBx );
954 mEnableMaskDDBtn->registerCheckedWidget( mEnableMaskChkBx );
962 mShapeDrawDDBtn->registerCheckedWidget( mShapeDrawChkBx );
984 mShadowDrawDDBtn->registerCheckedWidget( mShadowDrawChkBx );
1031 updateDataDefinedAlignment();
1034 const QString ddScaleVisInfo = tr(
1035 "Value < 0 represents a scale closer than 1:1, e.g. -10 = 10:1<br>"
1036 "Value of 0 disables the specific limit."
1039 mScaleBasedVisibilityDDBtn->registerCheckedWidget( mScaleBasedVisibilityChkBx );
1041 mScaleBasedVisibilityMinDDBtn->setUsageInfo( ddScaleVisInfo );
1043 mScaleBasedVisibilityMaxDDBtn->setUsageInfo( ddScaleVisInfo );
1049 mMinScaleWidget->setPredefinedScales( scales );
1050 mMaxScaleWidget->setPredefinedScales( scales );
1055 mMinScaleWidget->updateScales();
1056 mMaxScaleWidget->updateScales();
1060 mFontLimitPixelDDBtn->registerCheckedWidget( mFontLimitPixelChkBox );
1083 if ( !mButtons.contains( key ) )
1088 mButtons[key] = button;
1108 mBufferDrawChkBx->setChecked( buffer.
enabled() );
1109 mBufferFrame->setEnabled( buffer.
enabled() );
1110 spinBufferSize->setValue( buffer.
size() );
1111 mBufferUnitWidget->setUnit( buffer.
sizeUnit() );
1113 btnBufferColor->setColor( buffer.
color() );
1114 mBufferOpacityWidget->setOpacity( buffer.
opacity() );
1115 mBufferJoinStyleComboBox->setPenJoinStyle( buffer.
joinStyle() );
1117 comboBufferBlendMode->setBlendMode( buffer.
blendMode() );
1119 mBufferEffect.reset( lPaintEffect->clone() );
1123 mBufferEffect->setEnabled(
false );
1125 mBufferEffectWidget->setPaintEffect( mBufferEffect.get() );
1129 mEnableMaskChkBx->setChecked( mask.
enabled() );
1130 mMaskBufferSizeSpinBox->setValue( mask.
size() );
1131 mMaskBufferUnitWidget->setUnit( mask.
sizeUnit() );
1133 mMaskOpacityWidget->setOpacity( mask.
opacity() );
1134 mMaskJoinStyleComboBox->setPenJoinStyle( mask.
joinStyle() );
1136 mMaskEffect.reset( lPaintEffect->clone() );
1140 mMaskEffect->setEnabled(
false );
1142 mMaskEffectWidget->setPaintEffect( mMaskEffect.get() );
1144 mFontSizeUnitWidget->setUnit(
format.sizeUnit() );
1145 mFontSizeUnitWidget->setMapUnitScale(
format.sizeMapUnitScale() );
1146 mRefFont =
format.font();
1147 mFontSizeSpinBox->setValue(
format.size() );
1148 btnTextColor->setColor(
format.color() );
1150 mTextOpacityWidget->setOpacity(
format.opacity() );
1151 comboBlendMode->setBlendMode(
format.blendMode() );
1152 mTextOrientationComboBox->setCurrentIndex( mTextOrientationComboBox->findData(
static_cast<int>(
format.orientation() ) ) );
1153 mHtmlFormattingCheckBox->setChecked(
format.allowHtmlFormatting() );
1155 mFontWordSpacingSpinBox->setValue(
format.font().wordSpacing() );
1156 mFontLetterSpacingSpinBox->setValue(
format.font().letterSpacing() );
1159 mTabDistanceUnitWidget->setUnit(
format.tabStopDistanceUnit() );
1160 mTabDistanceUnitWidget->setMapUnitScale(
format.tabStopDistanceMapUnitScale() );
1163 whileBlocking( mFontCapitalsComboBox )->setCurrentIndex( mFontCapitalsComboBox->findData(
static_cast<int>(
format.capitalization() ) ) );
1165 updateFont( mRefFont );
1168 mFontMissingLabel->setVisible( !
format.fontFound() );
1169 if ( !
format.fontFound() )
1171 const QString missingTxt = tr(
"%1 not found. Default substituted." );
1172 QString txtPrepend = tr(
"Chosen font" );
1173 if ( !
format.resolvedFontFamily().isEmpty() )
1175 txtPrepend = u
"'%1'"_s.arg(
format.resolvedFontFamily() );
1177 mFontMissingLabel->setText( missingTxt.arg( txtPrepend ) );
1180 mLabelingOptionsListWidget->setCurrentItem(
mTextItem );
1181 whileBlocking( mOptionsTab )->setCurrentIndex( mOptionsTab->indexOf( textTab ) );
1184 mLineHeightUnitWidget->setUnit(
format.lineHeightUnit() );
1187 mShapeDrawChkBx->setChecked( background.
enabled() );
1188 mShapeFrame->setEnabled( background.
enabled() );
1189 mShapeTypeCmbBx->blockSignals(
true );
1190 mShapeTypeCmbBx->setCurrentIndex( mShapeTypeCmbBx->findData( background.
type() ) );
1191 mShapeTypeCmbBx->blockSignals(
false );
1192 updateAvailableShadowPositions();
1193 mShapeSVGPathLineEdit->setText( background.
svgFile() );
1195 mShapeSizeCmbBx->setCurrentIndex( background.
sizeType() );
1196 mShapeSizeXSpnBx->setValue( background.
size().width() );
1197 mShapeSizeYSpnBx->setValue( background.
size().height() );
1198 mShapeSizeUnitWidget->setUnit( background.
sizeUnit() );
1200 mShapeRotationCmbBx->setCurrentIndex( background.
rotationType() );
1203 mShapeRotationDblSpnBx->setValue( background.
rotation() );
1204 mShapeOffsetXSpnBx->setValue( background.
offset().x() );
1205 mShapeOffsetYSpnBx->setValue( background.
offset().y() );
1206 mShapeOffsetUnitWidget->setUnit( background.
offsetUnit() );
1208 mShapeRadiusXDbSpnBx->setValue( background.
radii().width() );
1209 mShapeRadiusYDbSpnBx->setValue( background.
radii().height() );
1210 mShapeRadiusUnitWidget->setUnit( background.
radiiUnit() );
1213 mShapeFillColorBtn->setColor( background.
fillColor() );
1214 mShapeStrokeColorBtn->setColor( background.
strokeColor() );
1215 mShapeStrokeWidthSpnBx->setValue( background.
strokeWidth() );
1219 mBackgroundOpacityWidget->setOpacity( background.
opacity() );
1220 mShapeBlendCmbBx->setBlendMode( background.
blendMode() );
1222 mLoadSvgParams =
false;
1223 mShapeTypeCmbBx_currentIndexChanged( background.
type() );
1225 if (
auto *lPaintEffect = background.
paintEffect() )
1226 mBackgroundEffect.reset( lPaintEffect->clone() );
1230 mBackgroundEffect->setEnabled(
false );
1232 mBackgroundEffectWidget->setPaintEffect( mBackgroundEffect.get() );
1238 mShadowDrawChkBx->setChecked( shadow.
enabled() );
1239 mShadowFrame->setEnabled( shadow.
enabled() );
1240 mShadowUnderCmbBx->setCurrentIndex( mShadowUnderCmbBx->findData( shadow.
shadowPlacement() ) );
1241 mShadowOffsetAngleSpnBx->setValue( shadow.
offsetAngle() );
1243 mShadowOffsetUnitWidget->setUnit( shadow.
offsetUnit() );
1245 mShadowOffsetGlobalChkBx->setChecked( shadow.
offsetGlobal() );
1247 mShadowRadiusDblSpnBx->setValue( shadow.
blurRadius() );
1250 mShadowRadiusAlphaChkBx->setChecked( shadow.
blurAlphaOnly() );
1251 mShadowOpacityWidget->setOpacity( shadow.
opacity() );
1252 mShadowScaleSpnBx->setValue( shadow.
scale() );
1254 mShadowColorBtn->setColor( shadow.
color() );
1255 mShadowBlendCmbBx->setBlendMode( shadow.
blendMode() );
1257 mPreviewBackgroundBtn->setColor(
format.previewBackgroundColor() );
1258 mPreviewBackgroundBtn->setDefaultColor(
format.previewBackgroundColor() );
1267 settings.
setValue( u
"Windows/Labeling/FontPreviewSplitState"_s, mFontPreviewSplitter->saveState() );
1268 settings.
setValue( u
"Windows/Labeling/OptionsSplitState"_s, mLabelingOptionsSplitter->saveState() );
1270 int prevIndex = mLabelingOptionsListWidget->currentRow();
1271 if ( mWidgetMode ==
Text )
1273 switch ( prevIndex )
1282 settings.
setValue( u
"Windows/Labeling/Tab"_s, prevIndex );
1288 format.setColor( btnTextColor->color() );
1289 format.setFont( mRefFont );
1290 format.setSize( mFontSizeSpinBox->value() );
1291 format.setNamedStyle( mFontStyleComboBox->currentText() );
1292 format.setOpacity( mTextOpacityWidget->opacity() );
1293 format.setStretchFactor( mSpinStretch->value() );
1294 format.setBlendMode( comboBlendMode->blendMode() );
1295 format.setSizeUnit( mFontSizeUnitWidget->unit() );
1296 format.setSizeMapUnitScale( mFontSizeUnitWidget->getMapUnitScale() );
1298 format.setLineHeightUnit( mLineHeightUnitWidget->unit() );
1299 format.setPreviewBackgroundColor( mPreviewBackgroundColor );
1301 format.setAllowHtmlFormatting( mHtmlFormattingCheckBox->isChecked() );
1303 format.setTabStopDistance( mTabDistanceUnitWidget->unit() ==
Qgis::RenderUnit::Percentage ? ( mTabStopDistanceSpin->value() / 100 ) : mTabStopDistanceSpin->value() );
1304 format.setTabStopDistanceUnit( mTabDistanceUnitWidget->unit() );
1305 format.setTabStopDistanceMapUnitScale( mTabDistanceUnitWidget->getMapUnitScale() );
1310 buffer.
setEnabled( mBufferDrawChkBx->isChecked() );
1311 buffer.
setSize( spinBufferSize->value() );
1312 buffer.
setColor( btnBufferColor->color() );
1313 buffer.
setOpacity( mBufferOpacityWidget->opacity() );
1316 buffer.
setJoinStyle( mBufferJoinStyleComboBox->penJoinStyle() );
1318 buffer.
setBlendMode( comboBufferBlendMode->blendMode() );
1323 format.setBuffer( buffer );
1327 mask.
setEnabled( mEnableMaskChkBx->isChecked() );
1328 mask.
setSize( mMaskBufferSizeSpinBox->value() );
1329 mask.
setOpacity( mMaskOpacityWidget->opacity() );
1330 mask.
setSizeUnit( mMaskBufferUnitWidget->unit() );
1332 mask.
setJoinStyle( mMaskJoinStyleComboBox->penJoinStyle() );
1342 background.
setEnabled( mShapeDrawChkBx->isChecked() );
1344 background.
setSvgFile( mShapeSVGPathLineEdit->text() );
1346 background.
setSize( QSizeF( mShapeSizeXSpnBx->value(), mShapeSizeYSpnBx->value() ) );
1347 background.
setSizeUnit( mShapeSizeUnitWidget->unit() );
1350 background.
setRotation( mShapeRotationDblSpnBx->value() );
1351 background.
setOffset( QPointF( mShapeOffsetXSpnBx->value(), mShapeOffsetYSpnBx->value() ) );
1354 background.
setRadii( QSizeF( mShapeRadiusXDbSpnBx->value(), mShapeRadiusYDbSpnBx->value() ) );
1355 background.
setRadiiUnit( mShapeRadiusUnitWidget->unit() );
1358 background.
setFillColor( mShapeFillColorBtn->color() );
1363 background.
setOpacity( mBackgroundOpacityWidget->opacity() );
1364 background.
setBlendMode( mShapeBlendCmbBx->blendMode() );
1371 format.setBackground( background );
1375 shadow.
setEnabled( mShadowDrawChkBx->isChecked() );
1386 shadow.
setOpacity( mShadowOpacityWidget->opacity() );
1387 shadow.
setScale( mShadowScaleSpnBx->value() );
1388 shadow.
setColor( mShadowColorBtn->color() );
1390 format.setShadow( shadow );
1392 if ( includeDataDefinedProperties )
1423 if ( mButtons.contains( key ) )
1432void QgsTextFormatWidget::optionsStackedWidget_CurrentChanged(
int )
1434 mLabelingOptionsListWidget->blockSignals(
true );
1435 QWidget *currentPage = mLabelStackedWidget->currentWidget();
1436 if ( currentPage == mLabelPage_Text )
1437 mLabelingOptionsListWidget->setCurrentItem(
mTextItem );
1438 else if ( currentPage == mLabelPage_Formatting )
1440 else if ( currentPage == mLabelPage_Mask )
1441 mLabelingOptionsListWidget->setCurrentItem(
mMaskItem );
1442 if ( currentPage == mLabelPage_Buffer )
1443 mLabelingOptionsListWidget->setCurrentItem(
mBufferItem );
1444 if ( currentPage == mLabelPage_Background )
1446 if ( currentPage == mLabelPage_Shadow )
1447 mLabelingOptionsListWidget->setCurrentItem(
mShadowItem );
1448 if ( currentPage == mLabelPage_Callouts )
1449 mLabelingOptionsListWidget->setCurrentItem(
mCalloutItem );
1450 if ( currentPage == mLabelPage_Rendering )
1452 if ( currentPage == mLabelPage_Placement )
1454 mLabelingOptionsListWidget->blockSignals(
false );
1461 if (
auto *lExpressionContext =
mContext.expressionContext() )
1463 mPreviewExpressionContext = *lExpressionContext;
1468 const auto symbolButtonWidgets = findChildren<QgsSymbolButton *>();
1471 symbolWidget->setMapCanvas(
mContext.mapCanvas() );
1472 symbolWidget->setMessageBar(
mContext.messageBar() );
1476void QgsTextFormatWidget::collapseSample(
bool collapse )
1480 QList<int> splitSizes = mFontPreviewSplitter->sizes();
1481 if ( splitSizes[0] > groupBox_mPreview->height() )
1483 const int delta = splitSizes[0] - groupBox_mPreview->height();
1484 splitSizes[0] -= delta;
1485 splitSizes[1] += delta;
1486 mFontPreviewSplitter->setSizes( splitSizes );
1491void QgsTextFormatWidget::changeTextColor(
const QColor &color )
1497void QgsTextFormatWidget::updateFont(
const QFont &newFont )
1500 if ( newFont != mRefFont )
1509 QFont symbolFont = mRefFont;
1510 symbolFont.setPointSize( font().pointSize() );
1511 mDirectSymbLeftLineEdit->setFont( symbolFont );
1512 mDirectSymbRightLineEdit->setFont( symbolFont );
1514 blockFontChangeSignals(
true );
1515 mFontFamilyCmbBx->setCurrentFont( symbolFont );
1516 populateFontStyleComboBox();
1517 mFontUnderlineBtn->setChecked( mRefFont.underline() );
1518 mFontStrikethroughBtn->setChecked( mRefFont.strikeOut() );
1519 mKerningCheckBox->setChecked( mRefFont.kerning() );
1520 blockFontChangeSignals(
false );
1528void QgsTextFormatWidget::blockFontChangeSignals(
bool blk )
1530 mFontFamilyCmbBx->blockSignals( blk );
1531 mFontStyleComboBox->blockSignals( blk );
1532 mFontCapitalsComboBox->blockSignals( blk );
1533 mFontUnderlineBtn->blockSignals( blk );
1534 mFontStrikethroughBtn->blockSignals( blk );
1535 mFontWordSpacingSpinBox->blockSignals( blk );
1536 mFontLetterSpacingSpinBox->blockSignals( blk );
1537 mKerningCheckBox->blockSignals( blk );
1552 lblFontPreview->setFormat(
format() );
1555void QgsTextFormatWidget::scrollPreview()
1557 scrollArea_mPreview->ensureVisible( 0, 0, 0, 0 );
1562 mPreviewBackgroundColor = color;
1564 scrollArea_mPreview->widget()->setStyleSheet( u
"background: rgb(%1, %2, %3);"_s.arg( QString::number( color.red() ), QString::number( color.green() ), QString::number( color.blue() ) ) );
1567void QgsTextFormatWidget::changeBufferColor(
const QColor &color )
1576 bool showLineFrame =
false;
1577 bool showCentroidFrame =
false;
1578 bool showQuadrantFrame =
false;
1579 bool showFixedQuadrantFrame =
false;
1580 bool showPlacementPriorityFrame =
false;
1581 bool showOffsetTypeFrame =
false;
1582 bool showOffsetFrame =
false;
1583 bool showDistanceFrame =
false;
1584 bool showMaximumDistanceFrame =
false;
1585 bool showPrioritizationFrame =
false;
1586 bool showRotationFrame =
false;
1587 bool showMaxCharAngleFrame =
false;
1588 bool showCurvedLabelModeFrame =
false;
1589 bool showWhitespaceCollisionFrame =
false;
1592 const bool showPolygonPlacementOptions
1595 bool enableMultiLinesFrame =
true;
1600 showDistanceFrame =
true;
1601 mPlacementDistanceFrame->setEnabled(
true );
1602 showMaximumDistanceFrame =
true;
1609 showQuadrantFrame =
true;
1610 showFixedQuadrantFrame =
true;
1611 showOffsetFrame =
true;
1612 showRotationFrame =
true;
1616 showDistanceFrame =
true;
1617 showMaximumDistanceFrame =
true;
1618 showPlacementPriorityFrame =
true;
1619 showPrioritizationFrame =
true;
1620 showOffsetTypeFrame =
true;
1627 showLineFrame =
true;
1628 showDistanceFrame =
true;
1633 const bool offline = chkLineAbove->isChecked() || chkLineBelow->isChecked();
1634 chkLineOrientationDependent->setEnabled( offline );
1635 mPlacementDistanceFrame->setEnabled( offline );
1639 showMaxCharAngleFrame = isCurved;
1641 enableMultiLinesFrame = !isCurved;
1646 showDistanceFrame =
true;
1647 mPlacementDistanceFrame->setEnabled(
true );
1650 mPlacementLineFrame->setVisible( showLineFrame );
1651 mPlacementPolygonFrame->setVisible( showPolygonPlacementOptions );
1652 mPlacementCentroidFrame->setVisible( showCentroidFrame );
1653 mPlacementQuadrantFrame->setVisible( showQuadrantFrame );
1654 mPlacementFixedQuadrantFrame->setVisible( showFixedQuadrantFrame );
1655 mPlacementCartographicFrame->setVisible( showPlacementPriorityFrame );
1656 mPlacementOffsetFrame->setVisible( showOffsetFrame );
1657 mPlacementDistanceFrame->setVisible( showDistanceFrame );
1658 mPlacementMaximumDistanceFrame->setVisible( showMaximumDistanceFrame );
1659 mPlacementPrioritizationFrame->setVisible( showPrioritizationFrame );
1660 mPlacementOffsetTypeFrame->setVisible( showOffsetTypeFrame );
1661 mWhitespaceCollisionFrame->setVisible( showWhitespaceCollisionFrame );
1662 mPlacementRotationFrame->setVisible( showRotationFrame );
1663 mPlacementRepeatGroupBox->setVisible(
1669 mPlacementMaxCharAngleFrame->setVisible( showMaxCharAngleFrame );
1670 mCurvedLabelModeFrame->setVisible( showCurvedLabelModeFrame );
1672 mMultiLinesFrame->setEnabled( enableMultiLinesFrame );
1676 switch ( currentPlacement )
1680 helperText = tr(
"Arranges label candidates in a clockwise circle around the feature, preferring placements to the top-right of the feature." );
1682 helperText = tr(
"Arranges label candidates in a cluster around the feature's centroid, preferring placements directly over the centroid." );
1686 helperText = tr(
"Arranges label candidates directly over the feature or at a preset offset from the feature." );
1688 helperText = tr(
"Arranges label candidates directly over the feature's centroid, or at a preset offset from the centroid." );
1692 helperText = tr(
"Arranges label candidates parallel to a generalised line representing the feature. Placements which fall over straighter portions of the line are preferred." );
1694 helperText = tr(
"Arranges label candidates parallel to a generalised line representing the polygon's perimeter. Placements which fall over straighter portions of the perimeter are preferred." );
1698 helperText = tr(
"Arranges candidates following the curvature of a line feature. Placements which fall over straighter portions of the line are preferred." );
1702 helperText = tr(
"Arranges label candidates scattered throughout the polygon. Labels will always be placed horizontally, with placements further from the edges of the polygon preferred." );
1704 helperText = tr(
"Label candidates are arranged horizontally along the length of the feature." );
1709 "Arranges label candidates scattered throughout the polygon. Labels are rotated to respect the polygon's orientation, with placements further from the edges of the polygon preferred."
1715 = tr(
"Label candidates are placed in predefined positions around the features. Preference is given to positions with greatest cartographic appeal, e.g., top right and bottom right of the feature." );
1719 helperText = tr(
"Arranges candidates following the curvature of the feature's perimeter. Placements which fall over straighter portions of the perimeter are preferred." );
1723 helperText = tr(
"Label candidates are placed outside of the features, preferring placements which give greatest visual association between the label and the feature." );
1726 mPlacementModeDescriptionLabel->setText( u
"<i>%1</i>"_s.arg( helperText ) );
1729void QgsTextFormatWidget::populateFontCapitalsComboBox()
1740void QgsTextFormatWidget::populateFontStyleComboBox()
1742 mFontStyleComboBox->clear();
1743 const QStringList styles = mFontDB.styles( mRefFont.family() );
1744 const auto constStyles = styles;
1745 for (
const QString &style : constStyles )
1747 mFontStyleComboBox->addItem( style );
1750 QString targetStyle = mFontDB.styleString( mRefFont );
1751 if ( !styles.contains( targetStyle ) )
1754 targetStyle = QFontInfo( f ).styleName();
1755 mRefFont.setStyleName( targetStyle );
1758 const int stylIndx = mFontStyleComboBox->findText( targetStyle );
1759 if ( stylIndx > -1 )
1764 mFontStyleComboBox->setCurrentIndex( curIndx );
1767void QgsTextFormatWidget::mFontSizeSpinBox_valueChanged(
double d )
1769 mRefFont.setPointSizeF( d );
1770 updateFont( mRefFont );
1773void QgsTextFormatWidget::mFontFamilyCmbBx_currentFontChanged(
const QFont &f )
1776 updateFont( mRefFont );
1779void QgsTextFormatWidget::mFontStyleComboBox_currentIndexChanged(
const QString &text )
1782 updateFont( mRefFont );
1785void QgsTextFormatWidget::mFontUnderlineBtn_toggled(
bool ckd )
1787 mRefFont.setUnderline( ckd );
1788 updateFont( mRefFont );
1791void QgsTextFormatWidget::mFontStrikethroughBtn_toggled(
bool ckd )
1793 mRefFont.setStrikeOut( ckd );
1794 updateFont( mRefFont );
1797void QgsTextFormatWidget::kerningToggled(
bool checked )
1799 mRefFont.setKerning( checked );
1800 updateFont( mRefFont );
1803void QgsTextFormatWidget::mFontWordSpacingSpinBox_valueChanged(
double spacing )
1805 mRefFont.setWordSpacing( spacing );
1806 updateFont( mRefFont );
1809void QgsTextFormatWidget::mFontLetterSpacingSpinBox_valueChanged(
double spacing )
1811 mRefFont.setLetterSpacing( QFont::AbsoluteSpacing, spacing );
1812 updateFont( mRefFont );
1815void QgsTextFormatWidget::mFontSizeUnitWidget_changed()
1820 mFontLimitPixelChkBox->setChecked(
false );
1826 mFontLimitPixelChkBox->setChecked(
true );
1828 updateFont( mRefFont );
1831void QgsTextFormatWidget::mFontMinPixelSpinBox_valueChanged(
int px )
1834 mFontMaxPixelSpinBox->setMinimum( px );
1835 mFontMaxPixelSpinBox->update();
1838void QgsTextFormatWidget::mFontMaxPixelSpinBox_valueChanged(
int px )
1841 if ( px < mFontMinPixelSpinBox->value() )
1843 mFontMaxPixelSpinBox->blockSignals(
true );
1844 mFontMaxPixelSpinBox->setValue( mFontMinPixelSpinBox->value() );
1845 mFontMaxPixelSpinBox->blockSignals(
false );
1847 mFontMaxPixelSpinBox->setMinimum( mFontMinPixelSpinBox->value() );
1850void QgsTextFormatWidget::mBufferUnitWidget_changed()
1852 updateFont( mRefFont );
1855void QgsTextFormatWidget::mMaskBufferUnitWidget_changed()
1857 updateFont( mRefFont );
1860void QgsTextFormatWidget::mCoordXDDBtn_changed()
1862 updateDataDefinedAlignment();
1865void QgsTextFormatWidget::mCoordXDDBtn_activated(
bool isActive )
1870 mCoordPointDDBtn->setActive(
false );
1873void QgsTextFormatWidget::mCoordYDDBtn_changed()
1875 updateDataDefinedAlignment();
1878void QgsTextFormatWidget::mCoordYDDBtn_activated(
bool isActive )
1883 mCoordPointDDBtn->setActive(
false );
1886void QgsTextFormatWidget::mCoordPointDDBtn_changed()
1888 updateDataDefinedAlignment();
1891void QgsTextFormatWidget::mCoordPointDDBtn_activated(
bool isActive )
1896 mCoordXDDBtn->setActive(
false );
1897 mCoordYDDBtn->setActive(
false );
1900void QgsTextFormatWidget::mShapeTypeCmbBx_currentIndexChanged(
int )
1908 showBackgroundRadius( isRect );
1910 mShapeSVGPathFrame->setVisible( isSVG );
1911 mBackgroundMarkerSymbolButton->setVisible( isMarker );
1912 mBackgroundFillSymbolButton->setVisible( !isSVG && !isMarker );
1916 mShapeSizeYLabel->setVisible( !isSVG && !isMarker );
1917 mShapeSizeYSpnBx->setVisible( !isSVG && !isMarker );
1918 mShapeSizeYDDBtn->setVisible( !isSVG && !isMarker );
1919 mShapeSizeXLabel->setText( tr(
"Size%1" ).arg( !isSVG && !isMarker ? tr(
" X" ) : QString() ) );
1922 mShapeFillColorBtn->setAllowOpacity( !isSVG );
1923 mShapeFillColorBtn->setButtonBackground();
1924 mShapeStrokeColorBtn->setAllowOpacity( !isSVG );
1925 mShapeStrokeColorBtn->setButtonBackground();
1928 mShapeFillColorLabel->setVisible( isSVG );
1929 mShapeFillColorLabel->setEnabled( isSVG );
1930 mShapeFillColorBtn->setVisible( isSVG );
1931 mShapeFillColorBtn->setEnabled( isSVG );
1932 mShapeFillColorDDBtn->setVisible( isSVG );
1933 mShapeFillColorDDBtn->setEnabled( isSVG );
1934 mShapeStrokeColorLabel->setVisible( isSVG );
1935 mShapeStrokeColorLabel->setEnabled( isSVG );
1936 mShapeStrokeColorBtn->setVisible( isSVG );
1937 mShapeStrokeColorBtn->setEnabled( isSVG );
1938 mShapeStrokeColorDDBtn->setVisible( isSVG );
1939 mShapeStrokeColorDDBtn->setEnabled( isSVG );
1940 mShapeStrokeWidthLabel->setVisible( isSVG );
1941 mShapeStrokeWidthLabel->setEnabled( isSVG );
1942 mShapeStrokeWidthSpnBx->setVisible( isSVG );
1943 mShapeStrokeWidthSpnBx->setEnabled( isSVG );
1944 mShapeStrokeWidthDDBtn->setVisible( isSVG );
1945 mShapeStrokeWidthDDBtn->setEnabled( isSVG );
1948 mShapeSVGParamsBtn->setVisible( isSVG );
1951 updateSvgWidgets( mShapeSVGPathLineEdit->text() );
1955 mShapeSVGUnitsLabel->setVisible( isSVG );
1956 mShapeStrokeWidthUnitWidget->setVisible(
false );
1957 mShapeStrokeUnitsDDBtn->setVisible(
false );
1958 mShapeStrokeUnitsDDBtn->setEnabled(
false );
1960 updateAvailableShadowPositions();
1963void QgsTextFormatWidget::mShapeSVGPathLineEdit_textChanged(
const QString &text )
1965 updateSvgWidgets( text );
1970 const int numOptionsChecked = ( chkLineAbove->isChecked() ? 1 : 0 ) + ( chkLineBelow->isChecked() ? 1 : 0 ) + ( chkLineOn->isChecked() ? 1 : 0 );
1972 if ( numOptionsChecked == 1 )
1975 chkLineAbove->setEnabled( !chkLineAbove->isChecked() );
1976 chkLineBelow->setEnabled( !chkLineBelow->isChecked() );
1977 chkLineOn->setEnabled( !chkLineOn->isChecked() );
1981 chkLineAbove->setEnabled(
true );
1982 chkLineBelow->setEnabled(
true );
1983 chkLineOn->setEnabled(
true );
1993void QgsTextFormatWidget::previewScaleChanged(
double scale )
1995 lblFontPreview->setScale( scale );
1998void QgsTextFormatWidget::updateSvgWidgets(
const QString &svgPath )
2000 if ( mShapeSVGPathLineEdit->text() != svgPath )
2002 mShapeSVGPathLineEdit->setText( svgPath );
2005 QString resolvedPath;
2006 bool validSVG =
true;
2007 if ( !svgPath.startsWith(
"base64:"_L1, Qt::CaseInsensitive ) )
2010 validSVG = QFileInfo::exists( resolvedPath );
2014 resolvedPath = svgPath;
2019 mShapeSVGPathLineEdit->setStyleSheet( !validSVG ? u
"QLineEdit{ color: rgb(225, 0, 0); }"_s : QString() );
2020 mShapeSVGPathLineEdit->setToolTip( !validSVG ? tr(
"File not found" ) : resolvedPath );
2022 QColor fill, stroke;
2023 double strokeWidth = 0.0;
2024 bool fillParam =
false, strokeParam =
false, strokeWidthParam =
false;
2030 mShapeSVGParamsBtn->setEnabled( validSVG && ( fillParam || strokeParam || strokeWidthParam ) );
2032 mShapeFillColorLabel->setEnabled( validSVG && fillParam );
2033 mShapeFillColorBtn->setEnabled( validSVG && fillParam );
2034 mShapeFillColorDDBtn->setEnabled( validSVG && fillParam );
2035 if ( mLoadSvgParams && validSVG && fillParam )
2036 mShapeFillColorBtn->setColor( fill );
2038 mShapeStrokeColorLabel->setEnabled( validSVG && strokeParam );
2039 mShapeStrokeColorBtn->setEnabled( validSVG && strokeParam );
2040 mShapeStrokeColorDDBtn->setEnabled( validSVG && strokeParam );
2041 if ( mLoadSvgParams && validSVG && strokeParam )
2042 mShapeStrokeColorBtn->setColor( stroke );
2044 mShapeStrokeWidthLabel->setEnabled( validSVG && strokeWidthParam );
2045 mShapeStrokeWidthSpnBx->setEnabled( validSVG && strokeWidthParam );
2046 mShapeStrokeWidthDDBtn->setEnabled( validSVG && strokeWidthParam );
2047 if ( mLoadSvgParams && validSVG && strokeWidthParam )
2048 mShapeStrokeWidthSpnBx->setValue( strokeWidth );
2054 mShapeSVGUnitsLabel->setEnabled( validSVG && strokeWidthParam );
2057void QgsTextFormatWidget::updateAvailableShadowPositions()
2059 if ( mShadowUnderCmbBx->count() == 0
2065 mShadowUnderCmbBx->clear();
2073 mShadowUnderCmbBx->setCurrentIndex( mShadowUnderCmbBx->findData( currentPlacement ) );
2074 if ( mShadowUnderCmbBx->currentIndex() == -1 )
2075 mShadowUnderCmbBx->setCurrentIndex( 0 );
2079void QgsTextFormatWidget::updateProperty()
2081 QgsPropertyOverrideButton *button = qobject_cast<QgsPropertyOverrideButton *>( sender() );
2087void QgsTextFormatWidget::createAuxiliaryField()
2092 QgsVectorLayer *vLayer = qobject_cast<QgsVectorLayer *>(
mLayer );
2100 QgsNewAuxiliaryLayerDialog dlg( vLayer,
this );
2108 QgsPropertyOverrideButton *button = qobject_cast<QgsPropertyOverrideButton *>( sender() );
2119 property.setActive(
true );
2128void QgsTextFormatWidget::updateShapeFrameStatus()
2130 mShapeFrame->setEnabled( mShapeDrawDDBtn->isActive() || mShapeDrawChkBx->isChecked() );
2133void QgsTextFormatWidget::updateBufferFrameStatus()
2135 mBufferFrame->setEnabled( mBufferDrawDDBtn->isActive() || mBufferDrawChkBx->isChecked() );
2138void QgsTextFormatWidget::updateShadowFrameStatus()
2140 mShadowFrame->setEnabled( mShadowDrawDDBtn->isActive() || mShadowDrawChkBx->isChecked() );
2143void QgsTextFormatWidget::updateCalloutFrameStatus()
2145 mCalloutFrame->setEnabled( mCalloutDrawDDBtn->isActive() || mCalloutsDrawCheckBox->isChecked() );
2148void QgsTextFormatWidget::updateDataDefinedAlignment()
2151 mCoordAlignmentFrame->setEnabled( ( mCoordXDDBtn->isActive() && mCoordYDDBtn->isActive() ) || mCoordPointDDBtn->isActive() );
2154void QgsTextFormatWidget::overlapModeChanged()
2156 QString description;
2160 description = tr(
"Overlapping labels will never be placed for the layer, even if it means some labels will be missing. (To see unplaced labels use the \"Show Unplaced Labels\" toolbar action.)" );
2163 description = tr(
"If a label cannot otherwise be placed for a feature then an overlapping label is permitted." );
2166 description = tr(
"Labels from this layer may freely overlap other labels or label obstacles without penalty." );
2170 mOverlapModeDescriptionLabel->setText( u
"<i>%1</i>"_s.arg( description ) );
2173void QgsTextFormatWidget::updateCurvedLabelDescription()
2178 mCurvedModeDescriptionLabel->hide();
2181 mCurvedModeDescriptionLabel->setText( tr(
"Places individual characters from the label at each corresponding vertex in the line." ) );
2182 mCurvedModeDescriptionLabel->show();
2185 mCurvedModeDescriptionLabel->setText( tr(
"Stretches (or shrinks) character spacing so that the curved label fits the whole line." ) );
2186 mCurvedModeDescriptionLabel->show();
2189 mCurvedModeDescriptionLabel->setText( tr(
"Stretches (or shrinks) word spacing so that the curved label fits the whole line." ) );
2190 mCurvedModeDescriptionLabel->show();
2197 if ( name.isEmpty() )
2241 saveDlg.
setDefaultTags( mTextFormatsListWidget->currentTagFilter() );
2242 if ( !saveDlg.exec() )
2245 if ( saveDlg.
name().isEmpty() )
2255 const int res = QMessageBox::warning(
this, tr(
"Save Text Format" ), tr(
"Format with name '%1' already exists. Overwrite?" ).arg( saveDlg.
name() ), QMessageBox::Yes | QMessageBox::No );
2256 if ( res != QMessageBox::Yes )
2263 const QStringList symbolTags = saveDlg.
tags().split(
',' );
2270void QgsTextFormatWidget::mShapeSVGSelectorBtn_clicked()
2273 svgDlg.setWindowTitle( tr(
"Select SVG file" ) );
2274 svgDlg.svgSelector()->setSvgPath( mShapeSVGPathLineEdit->text().trimmed() );
2276 if ( svgDlg.exec() == QDialog::Accepted )
2278 const QString svgPath = svgDlg.svgSelector()->currentSvgPath();
2279 if ( !svgPath.isEmpty() )
2281 mShapeSVGPathLineEdit->setText( svgPath );
2287void QgsTextFormatWidget::mShapeSVGParamsBtn_clicked()
2289 const QString svgPath = mShapeSVGPathLineEdit->text();
2290 mLoadSvgParams =
true;
2291 updateSvgWidgets( svgPath );
2292 mLoadSvgParams =
false;
2295void QgsTextFormatWidget::mShapeRotationCmbBx_currentIndexChanged(
int index )
2301void QgsTextFormatWidget::mPreviewTextEdit_textChanged(
const QString &text )
2303 lblFontPreview->setText( text );
2307void QgsTextFormatWidget::mPreviewTextBtn_clicked()
2309 mPreviewTextEdit->setText( u
"Lorem Ipsum"_s );
2313void QgsTextFormatWidget::mPreviewBackgroundBtn_colorChanged(
const QColor &color )
2318void QgsTextFormatWidget::mDirectSymbLeftToolBtn_clicked()
2320 bool gotChar =
false;
2322 const QChar initial = !mDirectSymbLeftLineEdit->text().isEmpty() ? mDirectSymbLeftLineEdit->text().at( 0 ) : QChar();
2323 const QChar dirSymb = mCharDlg->selectCharacter( &gotChar, mRefFont, mFontDB.styleString( mRefFont ), initial );
2328 if ( !dirSymb.isNull() )
2329 mDirectSymbLeftLineEdit->setText( QString( dirSymb ) );
2332void QgsTextFormatWidget::mDirectSymbRightToolBtn_clicked()
2334 bool gotChar =
false;
2335 const QChar initial = !mDirectSymbRightLineEdit->text().isEmpty() ? mDirectSymbRightLineEdit->text().at( 0 ) : QChar();
2336 const QChar dirSymb = mCharDlg->selectCharacter( &gotChar, mRefFont, mFontDB.styleString( mRefFont ), initial );
2341 if ( !dirSymb.isNull() )
2342 mDirectSymbRightLineEdit->setText( QString( dirSymb ) );
2345void QgsTextFormatWidget::chkLineOrientationDependent_toggled(
bool active )
2349 chkLineAbove->setText( tr(
"Left of line" ) );
2350 chkLineBelow->setText( tr(
"Right of line" ) );
2354 chkLineAbove->setText( tr(
"Above line" ) );
2355 chkLineBelow->setText( tr(
"Below line" ) );
2360void QgsTextFormatWidget::mToolButtonConfigureSubstitutes_clicked()
2365 QgsSubstitutionListWidget *widget =
new QgsSubstitutionListWidget( panel );
2373 QgsSubstitutionListDialog dlg(
this );
2375 if ( dlg.exec() == QDialog::Accepted )
2382void QgsTextFormatWidget::configureTabStops()
2387 QgsTabPositionWidget *widget =
new QgsTabPositionWidget( panel );
2390 widget->
setUnit( mTabDistanceUnitWidget->unit() );
2400 QgsTabPositionDialog dlg(
this );
2402 dlg.setUnit( mTabDistanceUnitWidget->unit() );
2403 if ( dlg.exec() == QDialog::Accepted )
2412void QgsTextFormatWidget::showBackgroundRadius(
bool show )
2414 mShapeRadiusLabel->setVisible( show );
2415 mShapeRadiusXDbSpnBx->setVisible( show );
2417 mShapeRadiusYDbSpnBx->setVisible( show );
2419 mShapeRadiusUnitWidget->setVisible( show );
2421 mShapeRadiusDDBtn->setVisible( show );
2422 mShapeRadiusUnitsDDBtn->setVisible( show );
2427 if (
auto *lExpressionContext =
mContext.expressionContext() )
2428 return *lExpressionContext;
2433 expContext =
mMapCanvas->createExpressionContext();
2456 if ( mGeometryGeneratorGroupBox->isChecked() )
2470 : QDialog( parent, fl )
2472 setWindowTitle( tr(
"Text Settings" ) );
2475 mFormatWidget->layout()->setContentsMargins( 0, 0, 0, 0 );
2477 QVBoxLayout *layout =
new QVBoxLayout(
this );
2478 layout->addWidget( mFormatWidget );
2480 mButtonBox =
new QDialogButtonBox( QDialogButtonBox::Ok | QDialogButtonBox::Cancel | QDialogButtonBox::Help, Qt::Horizontal,
this );
2481 layout->addWidget( mButtonBox );
2483 setLayout( layout );
2486 connect( mButtonBox->button( QDialogButtonBox::Ok ), &QAbstractButton::clicked,
this, &QDialog::accept );
2487 connect( mButtonBox->button( QDialogButtonBox::Cancel ), &QAbstractButton::clicked,
this, &QDialog::reject );
2488 connect( mButtonBox->button( QDialogButtonBox::Help ), &QAbstractButton::clicked,
this, &QgsTextFormatDialog::showHelp );
2493 return mFormatWidget->format();
2496void QgsTextFormatDialog::showHelp()
2498 QgsHelp::openHelp( u
"style_library/label_settings.html#formatting-the-label-text"_s );
2503 mFormatWidget->setContext( context );
2514 mFormatWidget = qobject_cast<QgsTextFormatWidget *>(
widget() );
2516 if ( !mBlockSignals )
2523 return mFormatWidget->format();
2528 mBlockSignals =
true;
2529 mFormatWidget->setFormat(
format );
2530 mBlockSignals =
false;
2535 mFormatWidget->setContext( context );
2540 mFormatWidget->setDockMode(
dockMode );
CurvedLabelMode
Modes which determine how curved labels are generated and placed.
@ StretchCharacterSpacingToFitLine
Increases (or decreases) the character spacing used for each label in order to fit the entire text ov...
@ Default
Default curved placement, characters are placed in an optimal position along the line....
@ StretchWordSpacingToFitLine
Increases (or decreases) the word spacing used for each label in order to fit the entire text over th...
@ PlaceCharactersAtVertices
Each individual character from the label text is placed such that their left-baseline position is loc...
@ LabelLargestPartOnly
Place a label only on the largest part from the geometry.
@ SplitLabelTextLinesOverParts
Splits the label text over the parts of the geometry, such that each consecutive part is labeled with...
@ LabelEveryPartWithEntireLabel
Place the (same) entire label over every part from the geometry.
@ FromPoint
Offset distance applies from point geometry.
@ FromSymbolBounds
Offset distance applies from rendered symbol bounds.
@ PreferCloser
Prefer closer labels, falling back to alternate positions before larger distances.
@ PreferPositionOrdering
Prefer labels follow position ordering, falling back to more distance labels before alternate positio...
LabelPlacement
Placement modes which determine how label candidates are generated for a feature.
@ OverPoint
Arranges candidates over a point (or centroid of a polygon), or at a preset offset from the point....
@ Curved
Arranges candidates following the curvature of a line feature. Applies to line layers only.
@ AroundPoint
Arranges candidates in a circle around a point (or centroid of a polygon). Applies to point or polygo...
@ Line
Arranges candidates parallel to a generalised line representing the feature or parallel to a polygon'...
@ Free
Arranges candidates scattered throughout a polygon feature. Candidates are rotated to respect the pol...
@ OrderedPositionsAroundPoint
Candidates are placed in predefined positions around a point. Preference is given to positions with g...
@ Horizontal
Arranges horizontal candidates scattered throughout a polygon feature. Applies to polygon layers only...
@ PerimeterCurved
Arranges candidates following the curvature of a polygon's boundary. Applies to polygon layers only.
@ OutsidePolygons
Candidates are placed outside of polygon boundaries. Applies to polygon layers only.
Capitalization
String capitalization options.
@ AllSmallCaps
Force all characters to small caps.
@ MixedCase
Mixed case, ie no change.
@ AllLowercase
Convert all characters to lowercase.
@ TitleCase
Simple title case conversion - does not fully grammatically parse the text and uses simple rules only...
@ SmallCaps
Mixed case small caps.
@ ForceFirstLetterToCapital
Convert just the first letter of each word to uppercase, leave the rest untouched.
@ AllUppercase
Convert all characters to uppercase.
TextOrientation
Text orientations.
@ Vertical
Vertically oriented text.
@ RotationBased
Horizontally or vertically oriented text based on rotation (only available for map labeling).
@ Horizontal
Horizontally oriented text.
GeometryType
The geometry types are used to group Qgis::WkbType in a coarse way.
@ Percentage
Percentage of another measurement (e.g., canvas size, feature size).
@ Millimeters
Millimeters.
@ Points
Points (e.g., for font sizes).
@ MetersInMapUnits
Meters value as Map units.
LabelOverlapHandling
Label overlap handling.
@ AllowOverlapAtNoCost
Labels may freely overlap other labels, at no cost.
@ AllowOverlapIfRequired
Avoids overlapping labels when possible, but permit overlaps if labels for features cannot otherwise ...
@ PreventOverlap
Do not allow labels to overlap other labels.
@ FlipUpsideDownLabels
Upside-down labels (90 <= angle < 270) are shown upright.
@ AlwaysAllowUpsideDown
Show upside down for all labels, including dynamic ones.
@ AllowUpsideDownWhenRotationIsDefined
Show upside down when rotation is layer- or data-defined.
static QIcon getThemeIcon(const QString &name, const QColor &fillColor=QColor(), const QColor &strokeColor=QColor())
Helper to get a theme icon.
static QgsSvgCache * svgCache()
Returns the application's SVG cache, used for caching SVG images and handling parameter replacement w...
static QString nameFromProperty(const QgsPropertyDefinition &def, bool joined=false)
Returns the name of the auxiliary field for a property definition.
bool addAuxiliaryField(const QgsPropertyDefinition &definition)
Adds an auxiliary field for the given property.
bool exists(const QgsPropertyDefinition &definition) const
Returns true if the property is stored in the layer already, false otherwise.
void collapsedStateChanged(bool collapsed)
Signal emitted when groupbox collapsed/expanded state is changed, and when first shown.
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 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.
A fill symbol type, for rendering Polygon and MultiPolygon geometries.
QgsFillSymbol * clone() const override
Returns a deep copy of this symbol.
static QFont createFont(const QString &family, int pointSize=-1, int weight=-1, bool italic=false)
Creates a font with the specified family.
static bool fontFamilyMatchOnSystem(const QString &family, QString *chosen=nullptr, bool *match=nullptr)
Check whether font family is on system.
static bool updateFontViaStyle(QFont &f, const QString &fontstyle, bool fallback=false)
Updates font with named style and retain all font properties.
static void setFontFamily(QFont &font, const QString &family)
Sets the family for a font object.
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.
static QIcon iconForWkbType(Qgis::WkbType type)
Returns the icon for a vector layer whose geometry type is provided.
@ SymbolLeftRight
Place direction symbols on left/right of label.
@ SymbolAbove
Place direction symbols on above label.
@ SymbolBelow
Place direction symbols on below label.
static void warning(const QString &msg)
Goes to qWarning.
Map canvas is a class for displaying all GIS data types on a canvas.
Base class for all map layer types.
Contains configuration for rendering maps.
A marker symbol type, for rendering Point and MultiPoint geometries.
QgsMarkerSymbol * clone() const override
Returns a deep copy of this symbol.
static QgsPaintEffect * defaultStack()
Returns a new effect stack consisting of a sensible selection of default effects.
static bool isDefaultStack(QgsPaintEffect *effect)
Tests whether a paint effect matches the default effects stack.
Property
Data definable properties.
@ PositionX
X-coordinate data defined label position.
@ LinePlacementOptions
Line placement flags.
@ FontSizeUnit
Font size units.
@ WhitespaceCollisionHandling
Whitespace collision handling.
@ LabelRotation
Label rotation.
@ FontStyle
Font style name.
@ Italic
Use italic style.
@ ShapeOpacity
Shape opacity.
@ AllowDegradedPlacement
Allow degraded label placements.
@ MaskEnabled
Whether the mask is enabled.
@ PredefinedPositionOrder
@ OverlapHandling
Overlap handling technique.
@ PositionY
Y-coordinate data defined label position.
@ MaximumScale
Maximum map scale (ie most "zoomed in").
@ Vali
Vertical alignment for data defined label position (Bottom, Base, Half, Cap, Top).
@ MinimumScale
Minimum map scale (ie most "zoomed out").
@ FontStretchFactor
Font stretch factor, since QGIS 3.24.
@ PolygonLabelOutside
Whether labels outside a polygon feature are permitted, or should be forced.
@ BufferOpacity
Buffer opacity.
@ MaskJoinStyle
Mask join style.
@ Strikeout
Use strikeout.
@ LabelAllParts
Multipart geometry behavior.
@ LabelMarginDistance
Minimum distance from labels for this feature to other labels.
@ Underline
Use underline.
@ FontBlendMode
Text blend mode.
@ FontCase
Label text case.
@ Hali
Horizontal alignment for data defined label position (Left, Center, Right).
@ MaskOpacity
Mask opacity.
@ OverrunDistance
Distance which labels can extend past either end of linear features.
@ MaskBufferUnit
Mask buffer size unit.
@ FontOpacity
Text opacity.
@ FontWordSpacing
Word spacing.
@ CalloutDraw
Show callout.
@ CurvedLabelMode
Mode which determine how curved labels are generated and placed.
@ MaskBufferSize
Mask buffer size.
@ FontLetterSpacing
Letter spacing.
@ TabStopDistance
Tab stop distance, since QGIS 3.38.
@ ShadowOpacity
Shadow opacity.
@ RemoveDuplicateLabels
Whether this feature can cause removal of duplicate labels.
@ PositionPoint
Point-coordinate data defined label position.
@ MaximumDistance
Maximum distance of label from feature.
const QgsTextFormat & format() const
Returns the label text formatting settings, e.g., font settings, buffer settings, etc.
static const QgsPropertiesDefinition & propertyDefinitions()
Returns the labeling property definitions.
QgsStyle * styleAtPath(const QString &path)
Returns a reference to the style database associated with the project with matching file path.
QVector< double > mapScales() const
Returns the list of custom project map scales.
static QgsProject * instance()
Returns the QgsProject singleton instance.
const QgsProjectStyleSettings * styleSettings() const
Returns the project's style settings, which contains settings and properties relating to how a QgsPro...
const QgsProjectViewSettings * viewSettings() const
Returns the project's view settings, which contains settings and properties relating to how a QgsProj...
A grouped map of multiple QgsProperty objects, each referenced by an integer key value.
QSet< int > propertyKeys() const final
Returns a list of property keys contained within the collection.
bool isActive(int key) const final
Returns true if the collection contains an active property with the specified key.
QgsProperty property(int key) const final
Returns a matching property from the collection, if one exists.
A store for object properties.
void setField(const QString &field)
Sets the field name the property references.
Stores settings for use within QGIS.
QVariant value(const QString &key, const QVariant &defaultValue=QVariant(), Section section=NoSection) const
Returns the value for setting key.
bool contains(const QString &key, QgsSettings::Section section=QgsSettings::NoSection) const
Returns true if there exists a setting called key; returns false otherwise.
void setValue(const QString &key, const QVariant &value, QgsSettings::Section section=QgsSettings::NoSection)
Sets the value of setting key to value.
A collection of string replacements (specified using QgsStringReplacement objects).
A dialog for setting properties of a newly saved style.
bool isFavorite() const
Returns true if the favorite is checked for the symbol.
QString name() const
Returns the entered name for the new symbol.
void setDefaultTags(const QString &tags)
Sets the default tags for the newly created item.
QString tags() const
Returns any tags entered for the new symbol (as a comma separated value list).
QgsStyle * destinationStyle()
Returns the destination style database.
A database of saved style entities, including symbols, color ramps, text formats and others.
QgsTextFormat textFormat(const QString &name) const
Returns the text format with the specified name.
QStringList textFormatNames() const
Returns a list of names of text formats in the style.
bool removeTextFormat(const QString &name)
Removes a text format from the style.
StyleEntity
Enum for Entities involved in a style.
@ LabelSettingsEntity
Label settings.
@ TextFormatEntity
Text formats.
@ SmartgroupEntity
Smart groups.
@ Symbol3DEntity
3D symbol entity
@ ColorrampEntity
Color ramps.
@ LegendPatchShapeEntity
Legend patch shape.
@ MaterialSettingsEntity
Material settings.
static QgsStyle * defaultStyle(bool initialize=true)
Returns the default application-wide style.
QStringList labelSettingsNames() const
Returns a list of names of label settings in the style.
static QgsTextFormat defaultTextFormatForProject(QgsProject *project, QgsStyle::TextFormatContext context=QgsStyle::TextFormatContext::Labeling)
Returns the default text format to use for new text based objects for the specified project,...
bool addTextFormat(const QString &name, const QgsTextFormat &format, bool update=false)
Adds a text format with the specified name to the style.
QgsPalLayerSettings labelSettings(const QString &name) const
Returns the label settings with the specified name.
bool saveTextFormat(const QString &name, const QgsTextFormat &format, bool favorite, const QStringList &tags)
Adds a text format to the database.
void containsParams(const QString &path, bool &hasFillParam, QColor &defaultFillColor, bool &hasStrokeParam, QColor &defaultStrokeColor, bool &hasStrokeWidthParam, double &defaultStrokeWidth, bool blocking=false) const
Tests if an SVG file contains parameters for fill, stroke color, stroke width.
A dialog for selection of an SVG file.
static QString svgSymbolNameToPath(const QString &name, const QgsPathResolver &pathResolver)
Determines an SVG symbol's path from its name.
Contains settings which reflect the context in which a symbol (or renderer) widget is shown,...
static QgsSymbol * defaultSymbol(Qgis::GeometryType geomType)
Returns a new default symbol for the specified geometry type.
Container for settings relating to a text background object.
QgsMapUnitScale strokeWidthMapUnitScale() const
Returns the map unit scale object for the shape stroke width.
void setRadiiUnit(Qgis::RenderUnit units)
Sets the units used for the shape's radii.
void setFillSymbol(QgsFillSymbol *symbol)
Sets the current fill symbol for the background shape.
RotationType rotationType() const
Returns the method used for rotating the background shape.
QString svgFile() const
Returns the absolute path to the background SVG file, if set.
QSizeF size() const
Returns the size of the background shape.
QSizeF radii() const
Returns the radii used for rounding the corners of shapes.
QgsMapUnitScale radiiMapUnitScale() const
Returns the map unit scale object for the shape radii.
void setOpacity(double opacity)
Sets the background shape's opacity.
void setStrokeColor(const QColor &color)
Sets the color used for outlining the background shape.
Qgis::RenderUnit radiiUnit() const
Returns the units used for the shape's radii.
void setSizeMapUnitScale(const QgsMapUnitScale &scale)
Sets the map unit scale object for the shape size.
QPainter::CompositionMode blendMode() const
Returns the blending mode used for drawing the background shape.
SizeType
Methods for determining the background shape size.
bool enabled() const
Returns whether the background is enabled.
double opacity() const
Returns the background shape's opacity.
void setStrokeWidthMapUnitScale(const QgsMapUnitScale &scale)
Sets the map unit scale object for the shape stroke width.
double rotation() const
Returns the rotation for the background shape, in degrees clockwise.
QColor fillColor() const
Returns the color used for filing the background shape.
void setMarkerSymbol(QgsMarkerSymbol *symbol)
Sets the current marker symbol for the background shape.
void setRadii(QSizeF radii)
Sets the radii used for rounding the corners of shapes.
SizeType sizeType() const
Returns the method used to determine the size of the background shape (e.g., fixed size or buffer aro...
Qgis::RenderUnit strokeWidthUnit() const
Returns the units used for the shape's stroke width.
ShapeType type() const
Returns the type of background shape (e.g., square, ellipse, SVG).
double strokeWidth() const
Returns the width of the shape's stroke (stroke).
void setSizeType(SizeType type)
Sets the method used to determine the size of the background shape (e.g., fixed size or buffer around...
ShapeType
Background shape types.
@ ShapeMarkerSymbol
Marker symbol.
@ ShapeSquare
Square - buffered sizes only.
@ ShapeRectangle
Rectangle.
void setFillColor(const QColor &color)
Sets the color used for filing the background shape.
void setPaintEffect(QgsPaintEffect *effect)
Sets the current paint effect for the background shape.
void setSizeUnit(Qgis::RenderUnit unit)
Sets the units used for the shape's size.
Qgis::RenderUnit offsetUnit() const
Returns the units used for the shape's offset.
QColor strokeColor() const
Returns the color used for outlining the background shape.
void setRotationType(RotationType type)
Sets the method used for rotating the background shape.
void setOffsetMapUnitScale(const QgsMapUnitScale &scale)
Sets the map unit scale object for the shape offset.
QgsFillSymbol * fillSymbol() const
Returns the fill symbol to be rendered in the background.
void setBlendMode(QPainter::CompositionMode mode)
Sets the blending mode used for drawing the background shape.
QgsMapUnitScale sizeMapUnitScale() const
Returns the map unit scale object for the shape size.
void setType(ShapeType type)
Sets the type of background shape to draw (e.g., square, ellipse, SVG).
Qgis::RenderUnit sizeUnit() const
Returns the units used for the shape's size.
RotationType
Methods for determining the rotation of the background shape.
@ RotationSync
Shape rotation is synced with text rotation.
void setEnabled(bool enabled)
Sets whether the text background will be drawn.
QgsMarkerSymbol * markerSymbol() const
Returns the marker symbol to be rendered in the background.
void setRadiiMapUnitScale(const QgsMapUnitScale &scale)
Sets the map unit scale object for the shape radii.
void setRotation(double rotation)
Sets the rotation for the background shape, in degrees clockwise.
void setStrokeWidthUnit(Qgis::RenderUnit units)
Sets the units used for the shape's stroke width.
void setOffsetUnit(Qgis::RenderUnit units)
Sets the units used for the shape's offset.
void setOffset(QPointF offset)
Sets the offset used for drawing the background shape.
void setSize(QSizeF size)
Sets the size of the background shape.
const QgsPaintEffect * paintEffect() const
Returns the current paint effect for the background shape.
void setSvgFile(const QString &file)
Sets the path to the background SVG file.
QgsMapUnitScale offsetMapUnitScale() const
Returns the map unit scale object for the shape offset.
void setStrokeWidth(double width)
Sets the width of the shape's stroke (stroke).
QPointF offset() const
Returns the offset used for drawing the background shape.
Container for settings relating to a text buffer.
void setFillBufferInterior(bool fill)
Sets whether the interior of the buffer will be filled in.
void setBlendMode(QPainter::CompositionMode mode)
Sets the blending mode used for drawing the buffer.
Qgis::RenderUnit sizeUnit() const
Returns the units for the buffer size.
Qt::PenJoinStyle joinStyle() const
Returns the buffer join style.
double size() const
Returns the size of the buffer.
void setColor(const QColor &color)
Sets the color for the buffer.
void setSizeMapUnitScale(const QgsMapUnitScale &scale)
Sets the map unit scale object for the buffer size.
void setOpacity(double opacity)
Sets the buffer opacity.
QgsMapUnitScale sizeMapUnitScale() const
Returns the map unit scale object for the buffer size.
bool enabled() const
Returns whether the buffer is enabled.
double opacity() const
Returns the buffer opacity.
void setSizeUnit(Qgis::RenderUnit unit)
Sets the units used for the buffer size.
bool fillBufferInterior() const
Returns whether the interior of the buffer will be filled in.
void setEnabled(bool enabled)
Sets whether the text buffer will be drawn.
void setPaintEffect(QgsPaintEffect *effect)
Sets the current paint effect for the buffer.
const QgsPaintEffect * paintEffect() const
Returns the current paint effect for the buffer.
QColor color() const
Returns the color of the buffer.
QPainter::CompositionMode blendMode() const
Returns the blending mode used for drawing the buffer.
void setJoinStyle(Qt::PenJoinStyle style)
Sets the join style used for drawing the buffer.
void setSize(double size)
Sets the size of the buffer.
QgsTextFormat format() const
Returns the current formatting settings defined by the widget.
QDialogButtonBox * buttonBox() const
Returns a reference to the dialog's button box.
void setContext(const QgsSymbolWidgetContext &context)
Sets the context in which the widget is shown, e.g., the associated map canvas and expression context...
QgsTextFormatDialog(const QgsTextFormat &format, QgsMapCanvas *mapCanvas=nullptr, QWidget *parent=nullptr, Qt::WindowFlags fl=QgsGuiUtils::ModalDialogFlags, QgsMapLayer *layer=nullptr)
Constructor for QgsTextFormatDialog.
void setFormat(const QgsTextFormat &format)
Sets the format to show in the widget.
QgsTextFormatPanelWidget(const QgsTextFormat &format, QgsMapCanvas *mapCanvas=nullptr, QWidget *parent=nullptr, QgsMapLayer *layer=nullptr)
Constructor for QgsTextFormatPanelWidget.
void setDockMode(bool dockMode) override
Set the widget in dock mode which tells the widget to emit panel widgets and not open dialogs.
QgsTextFormat format() const
Returns the current formatting settings defined by the widget.
void setContext(const QgsSymbolWidgetContext &context)
Sets the context in which the widget is shown, e.g., the associated map canvas and expression context...
A widget for customizing text formatting settings.
void updatePlacementWidgets()
Updates label placement options to reflect current state of widget.
QListWidgetItem * mMaskItem
Mask widget item.
QButtonGroup * mUpsidedownBtnGrp
Upside down labels button group.
int mMinPixelLimit
Pixel size font limit.
QListWidgetItem * mBackgroundItem
Background widget item.
void setDockMode(bool enabled)
Sets whether the widget should be shown in a compact dock mode.
QgsMapCanvas * mMapCanvas
Associated map canvas.
void setPropertyOverrideButtonsVisible(bool visible)
Toggles whether data defined buttons should be shown in the widget.
QgsSymbolWidgetContext context() const
Returns the context in which the widget is shown, e.g., the associated map canvas and expression cont...
QgsTextFormatWidget(const QgsTextFormat &format=QgsTextFormat(), QgsMapCanvas *mapCanvas=nullptr, QWidget *parent=nullptr, QgsMapLayer *layer=nullptr)
Constructor for QgsTextFormatWidget.
QListWidgetItem * mFormattingItem
Formatting widget item.
~QgsTextFormatWidget() override
void deactivateField(QgsPalLayerSettings::Property key)
Deactivate a field from data defined properties and update the corresponding button.
void setFormat(const QgsTextFormat &format)
Sets the current formatting settings.
QListWidgetItem * mTextItem
Text widget item.
Qgis::GeometryType mGeomType
Geometry type for layer, if known.
QButtonGroup * mDirectSymbBtnGrp
Symbol direction button group.
void updateWidgetForFormat(const QgsTextFormat &format)
Updates the widget's state to reflect the settings in a QgsTextFormat.
QList< QgsSymbolLayerReference > mMaskedSymbolLayers
void widgetChanged()
Emitted when the text format defined by the widget changes.
void setPreviewBackground(const QColor &color)
Sets the background color for the text preview widget.
QButtonGroup * mQuadrantBtnGrp
Quadrant button group.
QListWidgetItem * mShadowItem
Shadow widget item.
QList< QgsTextFormat::Tab > mTabPositions
Tab positions.
QgsExpressionContext createExpressionContext() const override
This method needs to be reimplemented in all classes which implement this interface and return an exp...
QgsSymbolWidgetContext mContext
Context in which widget is shown.
QListWidgetItem * mBufferItem
Buffer widget item.
void updateLinePlacementOptions()
Updates line placement options to reflect current state of widget.
QListWidgetItem * mCalloutItem
Callout widget item.
void populateDataDefinedButtons()
Sets up connections required for data defined buttons, or updates the existing definition of these bu...
virtual void setContext(const QgsSymbolWidgetContext &context)
Sets the context in which the widget is shown, e.g., the associated map canvas and expression context...
QListWidgetItem * mRenderingItem
Rendering widget item.
void updatePreview()
Updates the text preview.
QListWidgetItem * mPlacementItem
Placement widget item.
void auxiliaryFieldCreated()
Emitted when an auxiliary field is created in the widget.
virtual void setFormatFromStyle(const QString &name, QgsStyle::StyleEntity type, const QString &stylePath)
Sets the current text settings from a style entry.
Qgis::GeometryType labelGeometryType() const
Returns the geometry type which will be used by the labeling engine when registering labels for the l...
QgsMapLayer * mLayer
Associated vector layer.
QgsStringReplacementCollection mSubstitutions
Text substitution list.
@ Text
Default mode, show text formatting settings only.
@ Labeling
Show labeling settings in addition to text formatting settings.
virtual void saveFormat()
Saves the current text settings to a style entry.
QgsPropertyCollection mDataDefinedProperties
Data defined properties as defined in the widget.
Container for all settings relating to text rendering.
Container for settings relating to a selective masking around a text.
void setEnabled(bool)
Returns whether the mask is enabled.
void setMaskedSymbolLayers(const QList< QgsSymbolLayerReference > &maskedLayers)
Sets the symbol layers that will be masked by this buffer.
Qgis::RenderUnit sizeUnit() const
Returns the units for the buffer size.
QList< QgsSymbolLayerReference > maskedSymbolLayers() const
Returns a list of references to symbol layers that are masked by this buffer.
void setSize(double size)
Sets the size of the buffer.
QgsMapUnitScale sizeMapUnitScale() const
Returns the map unit scale object for the buffer size.
double size() const
Returns the size of the buffer.
void setSizeMapUnitScale(const QgsMapUnitScale &scale)
Sets the map unit scale object for the buffer size.
QgsPaintEffect * paintEffect() const
Returns the current paint effect for the mask.
void setJoinStyle(Qt::PenJoinStyle style)
Sets the join style used for drawing the buffer.
double opacity() const
Returns the mask's opacity.
bool enabled() const
Returns whether the mask is enabled.
void setSizeUnit(Qgis::RenderUnit unit)
Sets the units used for the buffer size.
void setPaintEffect(QgsPaintEffect *effect)
Sets the current paint effect for the mask.
Qt::PenJoinStyle joinStyle() const
Returns the buffer join style.
void setOpacity(double opacity)
Sets the mask's opacity.
Container for settings relating to a text shadow.
int offsetAngle() const
Returns the angle for offsetting the position of the shadow from the text.
void setBlurRadiusMapUnitScale(const QgsMapUnitScale &scale)
Sets the map unit scale object for the shadow blur radius.
void setBlurRadiusUnit(Qgis::RenderUnit units)
Sets the units used for the shadow's blur radius.
bool enabled() const
Returns whether the shadow is enabled.
void setOffsetUnit(Qgis::RenderUnit units)
Sets the units used for the shadow's offset.
int scale() const
Returns the scaling used for the drop shadow (in percentage of original size).
Qgis::RenderUnit offsetUnit() const
Returns the units used for the shadow's offset.
void setShadowPlacement(QgsTextShadowSettings::ShadowPlacement placement)
Sets the placement for the drop shadow.
double opacity() const
Returns the shadow's opacity.
QgsMapUnitScale blurRadiusMapUnitScale() const
Returns the map unit scale object for the shadow blur radius.
void setOffsetMapUnitScale(const QgsMapUnitScale &scale)
Sets the map unit scale object for the shadow offset distance.
void setBlendMode(QPainter::CompositionMode mode)
Sets the blending mode used for drawing the drop shadow.
void setColor(const QColor &color)
Sets the color for the drop shadow.
QColor color() const
Returns the color of the drop shadow.
void setOffsetGlobal(bool global)
Sets whether the global shadow offset should be used.
ShadowPlacement
Placement positions for text shadow.
@ ShadowBuffer
Draw shadow under buffer.
@ ShadowShape
Draw shadow under background shape.
@ ShadowLowest
Draw shadow below all text components.
@ ShadowText
Draw shadow under text.
void setScale(int scale)
Sets the scaling used for the drop shadow (in percentage of original size).
void setBlurAlphaOnly(bool alphaOnly)
Sets whether only the alpha channel for the shadow should be blurred.
QgsTextShadowSettings::ShadowPlacement shadowPlacement() const
Returns the placement for the drop shadow.
Qgis::RenderUnit blurRadiusUnit() const
Returns the units used for the shadow's blur radius.
double offsetDistance() const
Returns the distance for offsetting the position of the shadow from the text.
QPainter::CompositionMode blendMode() const
Returns the blending mode used for drawing the drop shadow.
void setOffsetDistance(double distance)
Sets the distance for offsetting the position of the shadow from the text.
void setOpacity(double opacity)
Sets the shadow's opacity.
QgsMapUnitScale offsetMapUnitScale() const
Returns the map unit scale object for the shadow offset distance.
bool blurAlphaOnly() const
Returns whether only the alpha channel for the shadow will be blurred.
bool offsetGlobal() const
Returns true if the global shadow offset will be used.
void setOffsetAngle(int angle)
Sets the angle for offsetting the position of the shadow from the text.
double blurRadius() const
Returns the blur radius for the shadow.
void setBlurRadius(double blurRadius)
Sets the blur radius for the shadow.
void setEnabled(bool enabled)
Sets whether the text shadow will be drawn.
QList< Qgis::RenderUnit > RenderUnitList
List of render units.
Represents a vector layer which manages a vector based dataset.
QgsAuxiliaryLayer * auxiliaryLayer()
Returns the current auxiliary layer.
Q_INVOKABLE Qgis::GeometryType geometryType() const
Returns point, line or polygon.
QSize iconSize(bool dockableToolbar)
Returns the user-preferred size of a window's toolbar icons.
int scaleIconSize(int standardSize)
Scales an icon size to compensate for display pixel density, making the icon size hi-dpi friendly,...
QgsSignalBlocker< Object > whileBlocking(Object *object)
Temporarily blocks signals from a QObject while calling a single method from the object.