51#include <QButtonGroup>
55#include "moc_qgstextformatwidget.cpp"
57using namespace Qt::StringLiterals;
65 setWidgetMode(
Text );
79 setWidgetMode( mode );
82void QgsTextFormatWidget::initWidget()
86 mGeometryGeneratorGroupBox->setCollapsed(
true );
88 mTextItem =
new QListWidgetItem( tr(
"Text" ), mLabelingOptionsListWidget );
90 mTextItem->setToolTip( tr(
"Text style" ) );
92 mFormattingItem =
new QListWidgetItem( tr(
"Formatting" ), mLabelingOptionsListWidget );
96 mBufferItem =
new QListWidgetItem( tr(
"Buffer" ), mLabelingOptionsListWidget );
100 mMaskItem =
new QListWidgetItem( tr(
"Mask" ), mLabelingOptionsListWidget );
104 mBackgroundItem =
new QListWidgetItem( tr(
"Background" ), mLabelingOptionsListWidget );
108 mShadowItem =
new QListWidgetItem( tr(
"Shadow" ), mLabelingOptionsListWidget );
112 mCalloutItem =
new QListWidgetItem( tr(
"Callouts" ), mLabelingOptionsListWidget );
116 mPlacementItem =
new QListWidgetItem( tr(
"Placement" ), mLabelingOptionsListWidget );
120 mRenderingItem =
new QListWidgetItem( tr(
"Rendering" ), mLabelingOptionsListWidget );
124#if GEOS_VERSION_NUM < GEOS_COMPUTE_VERSION( 3, 10, 0 )
125 mDuplicatesStackedWidget->setCurrentWidget( mDuplicatesNotAvailableWidget );
126 mLabelSpacingStackedWidget->setCurrentWidget( mLabelSpacingNotAvailableWidget );
129 mLabelingOptionsListWidget->addItem(
mTextItem );
131 mLabelingOptionsListWidget->addItem(
mBufferItem );
132 mLabelingOptionsListWidget->addItem(
mMaskItem );
134 mLabelingOptionsListWidget->addItem(
mShadowItem );
139 QObject::connect( mOptionsTab, &QTabWidget::currentChanged,
this, [
this](
int index ) {
140 if ( index == mOptionsTab->indexOf( textTab ) )
141 mLabelStackedWidget->setCurrentWidget( mLabelPage_Text );
142 else if ( index == mOptionsTab->indexOf( formattingTab ) )
143 mLabelStackedWidget->setCurrentWidget( mLabelPage_Formatting );
144 else if ( index == mOptionsTab->indexOf( maskTab ) )
145 mLabelStackedWidget->setCurrentWidget( mLabelPage_Mask );
146 else if ( index == mOptionsTab->indexOf( bufferTab ) )
147 mLabelStackedWidget->setCurrentWidget( mLabelPage_Buffer );
148 else if ( index == mOptionsTab->indexOf( backgroundTab ) )
149 mLabelStackedWidget->setCurrentWidget( mLabelPage_Background );
150 else if ( index == mOptionsTab->indexOf( shadowTab ) )
151 mLabelStackedWidget->setCurrentWidget( mLabelPage_Shadow );
152 else if ( index == mOptionsTab->indexOf( calloutsTab ) )
153 mLabelStackedWidget->setCurrentWidget( mLabelPage_Callouts );
154 else if ( index == mOptionsTab->indexOf( placementTab ) )
155 mLabelStackedWidget->setCurrentWidget( mLabelPage_Placement );
156 else if ( index == mOptionsTab->indexOf( renderingTab ) )
157 mLabelStackedWidget->setCurrentWidget( mLabelPage_Rendering );
160 QObject::connect( mLabelingOptionsListWidget, &QListWidget::currentRowChanged,
this, [
this](
int ) {
161 QListWidgetItem *currentItem = mLabelingOptionsListWidget->currentItem();
165 mLabelStackedWidget->setCurrentWidget( mLabelPage_Text );
167 mLabelStackedWidget->setCurrentWidget( mLabelPage_Formatting );
169 mLabelStackedWidget->setCurrentWidget( mLabelPage_Mask );
171 mLabelStackedWidget->setCurrentWidget( mLabelPage_Buffer );
173 mLabelStackedWidget->setCurrentWidget( mLabelPage_Background );
175 mLabelStackedWidget->setCurrentWidget( mLabelPage_Shadow );
177 mLabelStackedWidget->setCurrentWidget( mLabelPage_Callouts );
179 mLabelStackedWidget->setCurrentWidget( mLabelPage_Placement );
181 mLabelStackedWidget->setCurrentWidget( mLabelPage_Rendering );
184 QObject::connect( mLabelingOptionsListWidget, &QListWidget::currentRowChanged, mLabelStackedWidget, &QStackedWidget::setCurrentIndex );
186 connect( mShapeSVGPathLineEdit, &QLineEdit::textChanged,
this, &QgsTextFormatWidget::mShapeSVGPathLineEdit_textChanged );
187 connect( mFontSizeSpinBox,
static_cast<void ( QDoubleSpinBox::* )(
double )
>( &QDoubleSpinBox::valueChanged ),
this, &QgsTextFormatWidget::mFontSizeSpinBox_valueChanged );
188 connect( mFontFamilyCmbBx, &QFontComboBox::currentFontChanged,
this, &QgsTextFormatWidget::mFontFamilyCmbBx_currentFontChanged );
189 connect( mFontStyleComboBox, &QComboBox::currentTextChanged,
this, &QgsTextFormatWidget::mFontStyleComboBox_currentIndexChanged );
190 connect( mFontUnderlineBtn, &QToolButton::toggled,
this, &QgsTextFormatWidget::mFontUnderlineBtn_toggled );
191 connect( mFontStrikethroughBtn, &QToolButton::toggled,
this, &QgsTextFormatWidget::mFontStrikethroughBtn_toggled );
192 connect( mFontWordSpacingSpinBox,
static_cast<void ( QDoubleSpinBox::* )(
double )
>( &QDoubleSpinBox::valueChanged ),
this, &QgsTextFormatWidget::mFontWordSpacingSpinBox_valueChanged );
193 connect( mFontLetterSpacingSpinBox,
static_cast<void ( QDoubleSpinBox::* )(
double )
>( &QDoubleSpinBox::valueChanged ),
this, &QgsTextFormatWidget::mFontLetterSpacingSpinBox_valueChanged );
195 connect( mFontMinPixelSpinBox,
static_cast<void ( QSpinBox::* )(
int )
>( &QSpinBox::valueChanged ),
this, &QgsTextFormatWidget::mFontMinPixelSpinBox_valueChanged );
196 connect( mFontMaxPixelSpinBox,
static_cast<void ( QSpinBox::* )(
int )
>( &QSpinBox::valueChanged ),
this, &QgsTextFormatWidget::mFontMaxPixelSpinBox_valueChanged );
205 connect( mShapeTypeCmbBx,
static_cast<void ( QComboBox::* )(
int )
>( &QComboBox::currentIndexChanged ),
this, &QgsTextFormatWidget::mShapeTypeCmbBx_currentIndexChanged );
206 connect( mShapeRotationCmbBx,
static_cast<void ( QComboBox::* )(
int )
>( &QComboBox::currentIndexChanged ),
this, &QgsTextFormatWidget::mShapeRotationCmbBx_currentIndexChanged );
207 connect( mShapeSVGParamsBtn, &QPushButton::clicked,
this, &QgsTextFormatWidget::mShapeSVGParamsBtn_clicked );
208 connect( mShapeSVGSelectorBtn, &QPushButton::clicked,
this, &QgsTextFormatWidget::mShapeSVGSelectorBtn_clicked );
209 connect( mPreviewTextEdit, &QLineEdit::textChanged,
this, &QgsTextFormatWidget::mPreviewTextEdit_textChanged );
210 connect( mPreviewTextBtn, &QToolButton::clicked,
this, &QgsTextFormatWidget::mPreviewTextBtn_clicked );
212 connect( mDirectSymbLeftToolBtn, &QToolButton::clicked,
this, &QgsTextFormatWidget::mDirectSymbLeftToolBtn_clicked );
213 connect( mDirectSymbRightToolBtn, &QToolButton::clicked,
this, &QgsTextFormatWidget::mDirectSymbRightToolBtn_clicked );
214 connect( chkLineOrientationDependent, &QCheckBox::toggled,
this, &QgsTextFormatWidget::chkLineOrientationDependent_toggled );
215 connect( mToolButtonConfigureSubstitutes, &QToolButton::clicked,
this, &QgsTextFormatWidget::mToolButtonConfigureSubstitutes_clicked );
216 connect( mKerningCheckBox, &QCheckBox::toggled,
this, &QgsTextFormatWidget::kerningToggled );
217 connect( mComboOverlapHandling, qOverload<int>( &QComboBox::currentIndexChanged ),
this, &QgsTextFormatWidget::overlapModeChanged );
218 connect( mTabStopsButton, &QToolButton::clicked,
this, &QgsTextFormatWidget::configureTabStops );
221 mOptionsTab->setIconSize( QSize( iconSize, iconSize ) );
222 mLabelingOptionsListWidget->setIconSize( QSize( iconSize, iconSize ) );
228 mPreviewTextBtn->setIconSize( QSize( iconSize16, iconSize16 ) );
229 mPointOffsetAboveLeft->setIconSize( QSize( iconSize32, iconSize18 ) );
230 mPointOffsetAbove->setIconSize( QSize( iconSize32, iconSize18 ) );
231 mPointOffsetAboveRight->setIconSize( QSize( iconSize32, iconSize18 ) );
232 mPointOffsetLeft->setIconSize( QSize( iconSize32, iconSize18 ) );
233 mPointOffsetOver->setIconSize( QSize( iconSize32, iconSize18 ) );
234 mPointOffsetRight->setIconSize( QSize( iconSize32, iconSize18 ) );
235 mPointOffsetBelowLeft->setIconSize( QSize( iconSize32, iconSize18 ) );
236 mPointOffsetBelow->setIconSize( QSize( iconSize32, iconSize18 ) );
237 mPointOffsetBelowRight->setIconSize( QSize( iconSize32, iconSize18 ) );
242 mFontUnderlineBtn->setMinimumSize( buttonSize, buttonSize );
243 mFontUnderlineBtn->setMaximumSize( buttonSize, buttonSize );
244 mFontStrikethroughBtn->setMinimumSize( buttonSize, buttonSize );
245 mFontStrikethroughBtn->setMaximumSize( buttonSize, buttonSize );
246 mFontBoldBtn->setMinimumSize( buttonSize, buttonSize );
247 mFontBoldBtn->setMaximumSize( buttonSize, buttonSize );
248 mFontItalicBtn->setMinimumSize( buttonSize, buttonSize );
249 mFontItalicBtn->setMaximumSize( buttonSize, buttonSize );
251 mPreviewScaleComboBox->setMapCanvas(
mMapCanvas );
252 mPreviewScaleComboBox->setShowCurrentScaleButton(
true );
255 const auto unitWidgets = findChildren<QgsUnitSelectionWidget *>();
256 for ( QgsUnitSelectionWidget *unitWidget : unitWidgets )
260 mFontSizeUnitWidget->setUnits(
263 mBufferUnitWidget->setUnits(
273 mMaskBufferUnitWidget->setUnits(
283 mShapeSizeUnitWidget->setUnits(
286 mShapeOffsetUnitWidget->setUnits(
289 mShapeRadiusUnitWidget->setUnits(
299 mShapeStrokeWidthUnitWidget->setUnits(
302 mShadowOffsetUnitWidget->setUnits(
312 mShadowRadiusUnitWidget->setUnits(
322 mPointOffsetUnitWidget->setUnits(
325 mLineDistanceUnitWidget->setUnits(
328 mMaximumDistanceUnitWidget->setUnits(
331 mRepeatDistanceUnitWidget->setUnits(
334 mOverrunDistanceUnitWidget->setUnits(
337 mLabelMarginUnitWidget->setUnits(
340 mLineHeightUnitWidget->setUnits(
343 mTabDistanceUnitWidget->setUnits(
346 mFontLineHeightSpinBox->setClearValue( 100.0 );
347 mShapeRotationDblSpnBx->setClearValue( 0.0 );
348 mShapeOffsetXSpnBx->setClearValue( 0.0 );
349 mShapeOffsetYSpnBx->setClearValue( 0.0 );
350 mPointOffsetXSpinBox->setClearValue( 0.0 );
351 mPointOffsetYSpinBox->setClearValue( 0.0 );
352 mPointAngleSpinBox->setClearValue( 0.0 );
353 mFontLetterSpacingSpinBox->setClearValue( 0.0 );
354 mFontWordSpacingSpinBox->setClearValue( 0.0 );
355 mZIndexSpinBox->setClearValue( 0.0 );
356 mLineDistanceSpnBx->setClearValue( 0.0 );
357 mMaximumDistanceSpnBx->setMinimum( 0 );
358 mMaximumDistanceSpnBx->setClearValue( 0.0, tr(
"Not set" ) );
359 mSpinStretch->setClearValue( 100 );
360 mTabStopDistanceSpin->setMinimum( 0 );
364 mFontLineHeightSpinBox->setClearValue( 100.0 );
366 mFontLineHeightSpinBox->setClearValue( 10.0 );
390 connect( mComboCurvedLabelMode, qOverload<int>( &QComboBox::currentIndexChanged ),
this, &QgsTextFormatWidget::updateCurvedLabelDescription );
391 QFont font = mCurvedModeDescriptionLabel->font();
392 font.setItalic(
true );
393 mCurvedModeDescriptionLabel->setFont( font );
394 updateCurvedLabelDescription();
400 updateAvailableShadowPositions();
403 mBackgroundMarkerSymbolButton->setDialogTitle( tr(
"Background Symbol" ) );
404 mBackgroundMarkerSymbolButton->registerExpressionContextGenerator(
this );
405 mBackgroundMarkerSymbolButton->setMapCanvas(
mMapCanvas );
407 mBackgroundFillSymbolButton->setDialogTitle( tr(
"Background Symbol" ) );
408 mBackgroundFillSymbolButton->registerExpressionContextGenerator(
this );
409 mBackgroundFillSymbolButton->setMapCanvas(
mMapCanvas );
411 mCharDlg =
new QgsCharacterSelectorDialog(
this );
413 mRefFont = lblFontPreview->font();
416 connect( mShadowOffsetAngleDial, &QAbstractSlider::valueChanged, mShadowOffsetAngleSpnBx, &QSpinBox::setValue );
417 connect( mShadowOffsetAngleSpnBx,
static_cast<void ( QSpinBox::* )(
int )
>( &QSpinBox::valueChanged ), mShadowOffsetAngleDial, &QAbstractSlider::setValue );
418 connect( mLimitLabelChkBox, &QAbstractButton::toggled, mLimitLabelSpinBox, &QWidget::setEnabled );
419 connect( mCheckBoxSubstituteText, &QAbstractButton::toggled, mToolButtonConfigureSubstitutes, &QWidget::setEnabled );
429 populateFontCapitalsComboBox();
432 mPreviewBackgroundBtn->setColorDialogTitle( tr(
"Select Fill Color" ) );
433 mPreviewBackgroundBtn->setContext( u
"labeling"_s );
434 mPreviewBackgroundBtn->setColor( QColor( 255, 255, 255 ) );
435 btnTextColor->setColorDialogTitle( tr(
"Select Text Color" ) );
436 btnTextColor->setContext( u
"labeling"_s );
437 btnTextColor->setDefaultColor( Qt::black );
438 btnBufferColor->setColorDialogTitle( tr(
"Select Buffer Color" ) );
439 btnBufferColor->setContext( u
"labeling"_s );
440 btnBufferColor->setDefaultColor( Qt::white );
441 mShapeStrokeColorBtn->setColorDialogTitle( tr(
"Select Stroke Color" ) );
442 mShapeStrokeColorBtn->setContext( u
"labeling"_s );
443 mShapeFillColorBtn->setColorDialogTitle( tr(
"Select Fill Color" ) );
444 mShapeFillColorBtn->setContext( u
"labeling"_s );
445 mShadowColorBtn->setColorDialogTitle( tr(
"Select Shadow Color" ) );
446 mShadowColorBtn->setContext( u
"labeling"_s );
447 mShadowColorBtn->setDefaultColor( Qt::black );
449 mFontColorDDBtn->registerLinkedWidget( btnTextColor );
450 mBufferColorDDBtn->registerLinkedWidget( btnBufferColor );
451 mShapeStrokeColorDDBtn->registerLinkedWidget( mShapeStrokeColorBtn );
452 mShapeFillColorDDBtn->registerLinkedWidget( mShapeFillColorBtn );
453 mShadowColorDDBtn->registerLinkedWidget( mShadowColorBtn );
494 const auto groupBoxes = findChildren<QgsCollapsibleGroupBox *>();
495 for ( QgsCollapsibleGroupBox *grpbox : groupBoxes )
497 grpbox->setSettingGroup( u
"mAdvLabelingDlg"_s );
503 mLabelingOptionsListWidget->setAttribute( Qt::WA_MacShowFocusRect,
false );
505 const QgsSettings settings;
508 QSizePolicy policy( mLabelingOptionsListFrame->sizePolicy() );
509 policy.setHorizontalStretch( 0 );
510 mLabelingOptionsListFrame->setSizePolicy( policy );
511 if ( !settings.
contains( u
"/Windows/Labeling/OptionsSplitState"_s ) )
514 QList<int> splitsizes;
516 mLabelingOptionsSplitter->setSizes( splitsizes );
520 connect( mLabelStackedWidget, &QStackedWidget::currentChanged,
this, &QgsTextFormatWidget::optionsStackedWidget_CurrentChanged );
523 mFontPreviewSplitter->restoreState( settings.
value( u
"Windows/Labeling/FontPreviewSplitState"_s ).toByteArray() );
524 mLabelingOptionsSplitter->restoreState( settings.
value( u
"Windows/Labeling/OptionsSplitState"_s ).toByteArray() );
526 mLabelingOptionsListWidget->setCurrentRow( settings.
value( u
"Windows/Labeling/Tab"_s, 0 ).toInt() );
530 mBufferEffectWidget->setPaintEffect( mBufferEffect.get() );
534 mMaskEffectWidget->setPaintEffect( mMaskEffect.get() );
538 mBackgroundEffectWidget->setPaintEffect( mBackgroundEffect.get() );
540 overlapModeChanged();
544 QList<QWidget *> widgets;
548 << mComboMultipartBehavior
552 << chkLineOrientationDependent
554 << chkPreserveRotation
556 << comboBufferBlendMode
558 << mBufferJoinStyleComboBox
559 << mBufferTranspFillChbx
560 << mBufferOpacityWidget
561 << mCentroidInsideCheckBox
563 << mCoordRotationUnitComboBox
565 << mDirectSymbLeftLineEdit
566 << mDirectSymbRevChkBx
567 << mDirectSymbRightLineEdit
568 << mFitInsidePolygonCheckBox
569 << mFontCapitalsComboBox
570 << mFontLetterSpacingSpinBox
571 << mFontLimitPixelChkBox
572 << mFontLineHeightSpinBox
573 << mLineHeightUnitWidget
574 << mFontMaxPixelSpinBox
575 << mFontMinPixelSpinBox
576 << mFontMultiLineAlignComboBox
578 << mFontStyleComboBox
579 << mTextOrientationComboBox
580 << mTextOpacityWidget
582 << mFontWordSpacingSpinBox
584 << mFormatNumDecimalsSpnBx
585 << mFormatNumPlusSignChkBx
587 << mLimitLabelSpinBox
588 << mLineDistanceSpnBx
589 << mLineDistanceUnitWidget
590 << mMaximumDistanceSpnBx
591 << mMaximumDistanceUnitWidget
592 << mMaxCharAngleInDSpinBox
593 << mMaxCharAngleOutDSpinBox
595 << mOffsetTypeComboBox
596 << mCheckAllowDegradedPlacement
597 << mComboOverlapHandling
598 << mPointAngleSpinBox
599 << mPointOffsetUnitWidget
600 << mPointOffsetXSpinBox
601 << mPointOffsetYSpinBox
602 << mPreviewBackgroundBtn
605 << mRepeatDistanceSpinBox
606 << mRepeatDistanceUnitWidget
607 << mOverrunDistanceSpinBox
608 << mOverrunDistanceUnitWidget
609 << mLabelMarginSpinBox
610 << mLabelMarginUnitWidget
611 << mScaleBasedVisibilityChkBx
617 << mShadowOffsetAngleSpnBx
618 << mShadowOffsetGlobalChkBx
619 << mShadowOffsetSpnBx
620 << mShadowOffsetUnitWidget
621 << mShadowRadiusAlphaChkBx
622 << mShadowRadiusDblSpnBx
623 << mShadowRadiusUnitWidget
625 << mShadowOpacityWidget
628 << mShapeStrokeColorBtn
629 << mShapeStrokeWidthSpnBx
630 << mShapeStrokeWidthUnitWidget
632 << mShapeFillColorBtn
633 << mShapeOffsetXSpnBx
634 << mShapeOffsetYSpnBx
635 << mShapeOffsetUnitWidget
636 << mShapeRadiusXDbSpnBx
637 << mShapeRadiusYDbSpnBx
638 << mShapeRotationCmbBx
639 << mShapeRotationDblSpnBx
640 << mShapeRadiusUnitWidget
641 << mShapeSVGPathLineEdit
643 << mShapeSizeUnitWidget
646 << mBackgroundOpacityWidget
651 << mAutoWrapLengthSpinBox
652 << mAutoWrapTypeComboBox
653 << mCentroidRadioVisible
654 << mCentroidRadioWhole
655 << mDirectSymbRadioBtnAbove
656 << mDirectSymbRadioBtnBelow
657 << mDirectSymbRadioBtnLR
658 << mUpsidedownRadioAll
659 << mUpsidedownRadioDefined
660 << mUpsidedownRadioOff
661 << mPlacementModeComboBox
662 << mFieldExpressionWidget
663 << mCheckBoxSubstituteText
664 << mGeometryGeneratorGroupBox
665 << mGeometryGenerator
666 << mGeometryGeneratorType
667 << mBackgroundMarkerSymbolButton
668 << mBackgroundFillSymbolButton
669 << mCalloutsDrawCheckBox
670 << mCalloutStyleComboBox
673 << mMaskJoinStyleComboBox
674 << mMaskBufferSizeSpinBox
675 << mMaskOpacityWidget
676 << mCheckAllowLabelsOutsidePolygons
677 << mHtmlFormattingCheckBox
678 << mPrioritizationComboBox
679 << mComboCurvedLabelMode
680 << mTabDistanceUnitWidget
681 << mTabStopDistanceSpin
683 << mCheckWhitespaceIsNotACollision;
685 connectValueChanged( widgets );
690 connect( mBufferDrawChkBx, &QCheckBox::stateChanged,
this, [
this](
int ) { updateBufferFrameStatus(); } );
692 connect( mShapeDrawChkBx, &QCheckBox::stateChanged,
this, [
this](
int ) { updateShapeFrameStatus(); } );
694 connect( mShadowDrawChkBx, &QCheckBox::stateChanged,
this, [
this](
int ) { updateShadowFrameStatus(); } );
696 connect( mCalloutsDrawCheckBox, &QCheckBox::stateChanged,
this, [
this](
int ) { updateCalloutFrameStatus(); } );
703 whileBlocking( mOptionsTab )->setCurrentIndex( mLabelStackedWidget->currentIndex() );
704 mOptionsTab->tabBar()->setUsesScrollButtons(
true );
709 lblFontPreview->setMapUnits(
mMapCanvas->mapSettings().mapUnits() );
710 mPreviewScaleComboBox->setScale(
mMapCanvas->mapSettings().scale() );
732 const int prevIndex = mOptionsTab->currentIndex();
742 mOptionsTab->removeTab( mOptionsTab->indexOf( renderingTab ) );
743 mOptionsTab->removeTab( mOptionsTab->indexOf( placementTab ) );
744 mOptionsTab->removeTab( mOptionsTab->indexOf( calloutsTab ) );
745 mOptionsTab->removeTab( mOptionsTab->indexOf( maskTab ) );
746 mLabelStackedWidget->removeWidget( mLabelPage_Rendering );
747 mLabelStackedWidget->removeWidget( mLabelPage_Callouts );
748 mLabelStackedWidget->removeWidget( mLabelPage_Mask );
749 mLabelStackedWidget->removeWidget( mLabelPage_Placement );
759 mLabelStackedWidget->setCurrentIndex( prevIndex - 1 );
760 mOptionsTab->setCurrentIndex( prevIndex - 1 );
767 mLabelStackedWidget->setCurrentIndex( 0 );
768 mOptionsTab->setCurrentIndex( 0 );
772 mStackedWidgetLabelWith->hide();
773 mDirectSymbolsFrame->hide();
774 mFormatNumFrame->hide();
775 mFormatNumChkBx->hide();
776 mFormatNumDDBtn->hide();
777 mCheckBoxSubstituteText->hide();
778 mToolButtonConfigureSubstitutes->hide();
779 mLabelWrapOnCharacter->hide();
780 wrapCharacterEdit->hide();
781 mWrapCharDDBtn->hide();
782 mLabelWrapLinesTo->hide();
783 mAutoWrapLengthSpinBox->hide();
784 mAutoWrapLengthDDBtn->hide();
785 mAutoWrapTypeComboBox->hide();
786 mFontMultiLineLabel->hide();
787 mFontMultiLineAlignComboBox->hide();
788 mFontMultiLineAlignDDBtn->hide();
798 const QList<QgsPropertyOverrideButton *> buttons = findChildren<QgsPropertyOverrideButton *>();
801 button->setVisible( visible );
807 mOptionsTab->setVisible( enabled );
808 if (
int tabIndex = mOptionsTab->indexOf( textTab ); tabIndex >= 0 )
809 mOptionsTab->setTabToolTip( tabIndex, tr(
"Text" ) );
810 if (
int tabIndex = mOptionsTab->indexOf( formattingTab ); tabIndex >= 0 )
811 mOptionsTab->setTabToolTip( tabIndex, tr(
"Formatting" ) );
812 if (
int tabIndex = mOptionsTab->indexOf( bufferTab ); tabIndex >= 0 )
813 mOptionsTab->setTabToolTip( tabIndex, tr(
"Buffer" ) );
814 if (
int tabIndex = mOptionsTab->indexOf( maskTab ); tabIndex >= 0 )
815 mOptionsTab->setTabToolTip( tabIndex, tr(
"Mask" ) );
816 if (
int tabIndex = mOptionsTab->indexOf( backgroundTab ); tabIndex >= 0 )
817 mOptionsTab->setTabToolTip( tabIndex, tr(
"Background" ) );
818 if (
int tabIndex = mOptionsTab->indexOf( shadowTab ); tabIndex >= 0 )
819 mOptionsTab->setTabToolTip( tabIndex, tr(
"Shadow" ) );
820 if (
int tabIndex = mOptionsTab->indexOf( calloutsTab ); tabIndex >= 0 )
821 mOptionsTab->setTabToolTip( tabIndex, tr(
"Callouts" ) );
822 if (
int tabIndex = mOptionsTab->indexOf( placementTab ); tabIndex >= 0 )
823 mOptionsTab->setTabToolTip( tabIndex, tr(
"Placement" ) );
824 if (
int tabIndex = mOptionsTab->indexOf( renderingTab ); tabIndex >= 0 )
825 mOptionsTab->setTabToolTip( tabIndex, tr(
"Rendering" ) );
827 mLabelingOptionsListFrame->setVisible( !enabled );
828 groupBox_mPreview->setVisible( !enabled );
832void QgsTextFormatWidget::connectValueChanged(
const QList<QWidget *> &widgets )
834 const auto constWidgets = widgets;
835 for ( QWidget *widget : constWidgets )
841 else if ( QgsFieldExpressionWidget *w = qobject_cast<QgsFieldExpressionWidget *>( widget ) )
845 else if ( QgsOpacityWidget *w = qobject_cast<QgsOpacityWidget *>( widget ) )
849 else if ( QgsScaleWidget *w = qobject_cast<QgsScaleWidget *>( widget ) )
853 else if ( QgsUnitSelectionWidget *w = qobject_cast<QgsUnitSelectionWidget *>( widget ) )
857 else if ( QComboBox *w = qobject_cast<QComboBox *>( widget ) )
861 else if ( QSpinBox *w = qobject_cast<QSpinBox *>( widget ) )
865 else if ( QDoubleSpinBox *w = qobject_cast<QDoubleSpinBox *>( widget ) )
869 else if ( QgsColorButton *w = qobject_cast<QgsColorButton *>( widget ) )
873 else if ( QCheckBox *w = qobject_cast<QCheckBox *>( widget ) )
877 else if ( QRadioButton *w = qobject_cast<QRadioButton *>( widget ) )
881 else if ( QLineEdit *w = qobject_cast<QLineEdit *>( widget ) )
885 else if ( QSlider *w = qobject_cast<QSlider *>( widget ) )
889 else if ( QGroupBox *w = qobject_cast<QGroupBox *>( widget ) )
893 else if ( QgsCodeEditorExpression *w = qobject_cast<QgsCodeEditorExpression *>( widget ) )
899 QgsLogger::warning( u
"Could not create connection for widget %1"_s.arg( widget->objectName() ) );
932 mDirectSymbDDBtn->registerCheckedWidget( mDirectSymbChkBx );
940 mFormatNumDDBtn->registerCheckedWidget( mFormatNumChkBx );
955 mEnableMaskDDBtn->registerCheckedWidget( mEnableMaskChkBx );
963 mShapeDrawDDBtn->registerCheckedWidget( mShapeDrawChkBx );
985 mShadowDrawDDBtn->registerCheckedWidget( mShadowDrawChkBx );
1032 updateDataDefinedAlignment();
1035 const QString ddScaleVisInfo = tr(
1036 "Value < 0 represents a scale closer than 1:1, e.g. -10 = 10:1<br>"
1037 "Value of 0 disables the specific limit."
1040 mScaleBasedVisibilityDDBtn->registerCheckedWidget( mScaleBasedVisibilityChkBx );
1042 mScaleBasedVisibilityMinDDBtn->setUsageInfo( ddScaleVisInfo );
1044 mScaleBasedVisibilityMaxDDBtn->setUsageInfo( ddScaleVisInfo );
1050 mMinScaleWidget->setPredefinedScales( scales );
1051 mMaxScaleWidget->setPredefinedScales( scales );
1056 mMinScaleWidget->updateScales();
1057 mMaxScaleWidget->updateScales();
1061 mFontLimitPixelDDBtn->registerCheckedWidget( mFontLimitPixelChkBox );
1084 if ( !mButtons.contains( key ) )
1089 mButtons[key] = button;
1109 mBufferDrawChkBx->setChecked( buffer.
enabled() );
1110 mBufferFrame->setEnabled( buffer.
enabled() );
1111 spinBufferSize->setValue( buffer.
size() );
1112 mBufferUnitWidget->setUnit( buffer.
sizeUnit() );
1114 btnBufferColor->setColor( buffer.
color() );
1115 mBufferOpacityWidget->setOpacity( buffer.
opacity() );
1116 mBufferJoinStyleComboBox->setPenJoinStyle( buffer.
joinStyle() );
1118 comboBufferBlendMode->setBlendMode( buffer.
blendMode() );
1120 mBufferEffect.reset( lPaintEffect->clone() );
1124 mBufferEffect->setEnabled(
false );
1126 mBufferEffectWidget->setPaintEffect( mBufferEffect.get() );
1130 mEnableMaskChkBx->setChecked( mask.
enabled() );
1131 mMaskBufferSizeSpinBox->setValue( mask.
size() );
1132 mMaskBufferUnitWidget->setUnit( mask.
sizeUnit() );
1134 mMaskOpacityWidget->setOpacity( mask.
opacity() );
1135 mMaskJoinStyleComboBox->setPenJoinStyle( mask.
joinStyle() );
1137 mMaskEffect.reset( lPaintEffect->clone() );
1141 mMaskEffect->setEnabled(
false );
1143 mMaskEffectWidget->setPaintEffect( mMaskEffect.get() );
1145 mFontSizeUnitWidget->setUnit(
format.sizeUnit() );
1146 mFontSizeUnitWidget->setMapUnitScale(
format.sizeMapUnitScale() );
1147 mRefFont =
format.font();
1148 mFontSizeSpinBox->setValue(
format.size() );
1149 btnTextColor->setColor(
format.color() );
1151 mTextOpacityWidget->setOpacity(
format.opacity() );
1152 comboBlendMode->setBlendMode(
format.blendMode() );
1153 mTextOrientationComboBox->setCurrentIndex( mTextOrientationComboBox->findData(
static_cast<int>(
format.orientation() ) ) );
1154 mHtmlFormattingCheckBox->setChecked(
format.allowHtmlFormatting() );
1156 mFontWordSpacingSpinBox->setValue(
format.font().wordSpacing() );
1157 mFontLetterSpacingSpinBox->setValue(
format.font().letterSpacing() );
1160 mTabDistanceUnitWidget->setUnit(
format.tabStopDistanceUnit() );
1161 mTabDistanceUnitWidget->setMapUnitScale(
format.tabStopDistanceMapUnitScale() );
1164 whileBlocking( mFontCapitalsComboBox )->setCurrentIndex( mFontCapitalsComboBox->findData(
static_cast<int>(
format.capitalization() ) ) );
1166 updateFont( mRefFont );
1169 mFontMissingLabel->setVisible( !
format.fontFound() );
1170 if ( !
format.fontFound() )
1172 const QString missingTxt = tr(
"%1 not found. Default substituted." );
1173 QString txtPrepend = tr(
"Chosen font" );
1174 if ( !
format.resolvedFontFamily().isEmpty() )
1176 txtPrepend = u
"'%1'"_s.arg(
format.resolvedFontFamily() );
1178 mFontMissingLabel->setText( missingTxt.arg( txtPrepend ) );
1181 mLabelingOptionsListWidget->setCurrentItem(
mTextItem );
1182 whileBlocking( mOptionsTab )->setCurrentIndex( mOptionsTab->indexOf( textTab ) );
1185 mLineHeightUnitWidget->setUnit(
format.lineHeightUnit() );
1188 mShapeDrawChkBx->setChecked( background.
enabled() );
1189 mShapeFrame->setEnabled( background.
enabled() );
1190 mShapeTypeCmbBx->blockSignals(
true );
1191 mShapeTypeCmbBx->setCurrentIndex( mShapeTypeCmbBx->findData( background.
type() ) );
1192 mShapeTypeCmbBx->blockSignals(
false );
1193 updateAvailableShadowPositions();
1194 mShapeSVGPathLineEdit->setText( background.
svgFile() );
1196 mShapeSizeCmbBx->setCurrentIndex( background.
sizeType() );
1197 mShapeSizeXSpnBx->setValue( background.
size().width() );
1198 mShapeSizeYSpnBx->setValue( background.
size().height() );
1199 mShapeSizeUnitWidget->setUnit( background.
sizeUnit() );
1201 mShapeRotationCmbBx->setCurrentIndex( background.
rotationType() );
1204 mShapeRotationDblSpnBx->setValue( background.
rotation() );
1205 mShapeOffsetXSpnBx->setValue( background.
offset().x() );
1206 mShapeOffsetYSpnBx->setValue( background.
offset().y() );
1207 mShapeOffsetUnitWidget->setUnit( background.
offsetUnit() );
1209 mShapeRadiusXDbSpnBx->setValue( background.
radii().width() );
1210 mShapeRadiusYDbSpnBx->setValue( background.
radii().height() );
1211 mShapeRadiusUnitWidget->setUnit( background.
radiiUnit() );
1214 mShapeFillColorBtn->setColor( background.
fillColor() );
1215 mShapeStrokeColorBtn->setColor( background.
strokeColor() );
1216 mShapeStrokeWidthSpnBx->setValue( background.
strokeWidth() );
1220 mBackgroundOpacityWidget->setOpacity( background.
opacity() );
1221 mShapeBlendCmbBx->setBlendMode( background.
blendMode() );
1223 mLoadSvgParams =
false;
1224 mShapeTypeCmbBx_currentIndexChanged( background.
type() );
1226 if (
auto *lPaintEffect = background.
paintEffect() )
1227 mBackgroundEffect.reset( lPaintEffect->clone() );
1231 mBackgroundEffect->setEnabled(
false );
1233 mBackgroundEffectWidget->setPaintEffect( mBackgroundEffect.get() );
1239 mShadowDrawChkBx->setChecked( shadow.
enabled() );
1240 mShadowFrame->setEnabled( shadow.
enabled() );
1241 mShadowUnderCmbBx->setCurrentIndex( mShadowUnderCmbBx->findData( shadow.
shadowPlacement() ) );
1242 mShadowOffsetAngleSpnBx->setValue( shadow.
offsetAngle() );
1244 mShadowOffsetUnitWidget->setUnit( shadow.
offsetUnit() );
1246 mShadowOffsetGlobalChkBx->setChecked( shadow.
offsetGlobal() );
1248 mShadowRadiusDblSpnBx->setValue( shadow.
blurRadius() );
1251 mShadowRadiusAlphaChkBx->setChecked( shadow.
blurAlphaOnly() );
1252 mShadowOpacityWidget->setOpacity( shadow.
opacity() );
1253 mShadowScaleSpnBx->setValue( shadow.
scale() );
1255 mShadowColorBtn->setColor( shadow.
color() );
1256 mShadowBlendCmbBx->setBlendMode( shadow.
blendMode() );
1258 mPreviewBackgroundBtn->setColor(
format.previewBackgroundColor() );
1259 mPreviewBackgroundBtn->setDefaultColor(
format.previewBackgroundColor() );
1268 settings.
setValue( u
"Windows/Labeling/FontPreviewSplitState"_s, mFontPreviewSplitter->saveState() );
1269 settings.
setValue( u
"Windows/Labeling/OptionsSplitState"_s, mLabelingOptionsSplitter->saveState() );
1271 int prevIndex = mLabelingOptionsListWidget->currentRow();
1272 if ( mWidgetMode ==
Text )
1274 switch ( prevIndex )
1283 settings.
setValue( u
"Windows/Labeling/Tab"_s, prevIndex );
1289 format.setColor( btnTextColor->color() );
1290 format.setFont( mRefFont );
1291 format.setSize( mFontSizeSpinBox->value() );
1292 format.setNamedStyle( mFontStyleComboBox->currentText() );
1293 format.setOpacity( mTextOpacityWidget->opacity() );
1294 format.setStretchFactor( mSpinStretch->value() );
1295 format.setBlendMode( comboBlendMode->blendMode() );
1296 format.setSizeUnit( mFontSizeUnitWidget->unit() );
1297 format.setSizeMapUnitScale( mFontSizeUnitWidget->getMapUnitScale() );
1299 format.setLineHeightUnit( mLineHeightUnitWidget->unit() );
1300 format.setPreviewBackgroundColor( mPreviewBackgroundColor );
1302 format.setAllowHtmlFormatting( mHtmlFormattingCheckBox->isChecked() );
1304 format.setTabStopDistance( mTabDistanceUnitWidget->unit() ==
Qgis::RenderUnit::Percentage ? ( mTabStopDistanceSpin->value() / 100 ) : mTabStopDistanceSpin->value() );
1305 format.setTabStopDistanceUnit( mTabDistanceUnitWidget->unit() );
1306 format.setTabStopDistanceMapUnitScale( mTabDistanceUnitWidget->getMapUnitScale() );
1311 buffer.
setEnabled( mBufferDrawChkBx->isChecked() );
1312 buffer.
setSize( spinBufferSize->value() );
1313 buffer.
setColor( btnBufferColor->color() );
1314 buffer.
setOpacity( mBufferOpacityWidget->opacity() );
1317 buffer.
setJoinStyle( mBufferJoinStyleComboBox->penJoinStyle() );
1319 buffer.
setBlendMode( comboBufferBlendMode->blendMode() );
1324 format.setBuffer( buffer );
1328 mask.
setEnabled( mEnableMaskChkBx->isChecked() );
1329 mask.
setSize( mMaskBufferSizeSpinBox->value() );
1330 mask.
setOpacity( mMaskOpacityWidget->opacity() );
1331 mask.
setSizeUnit( mMaskBufferUnitWidget->unit() );
1333 mask.
setJoinStyle( mMaskJoinStyleComboBox->penJoinStyle() );
1343 background.
setEnabled( mShapeDrawChkBx->isChecked() );
1345 background.
setSvgFile( mShapeSVGPathLineEdit->text() );
1347 background.
setSize( QSizeF( mShapeSizeXSpnBx->value(), mShapeSizeYSpnBx->value() ) );
1348 background.
setSizeUnit( mShapeSizeUnitWidget->unit() );
1351 background.
setRotation( mShapeRotationDblSpnBx->value() );
1352 background.
setOffset( QPointF( mShapeOffsetXSpnBx->value(), mShapeOffsetYSpnBx->value() ) );
1355 background.
setRadii( QSizeF( mShapeRadiusXDbSpnBx->value(), mShapeRadiusYDbSpnBx->value() ) );
1356 background.
setRadiiUnit( mShapeRadiusUnitWidget->unit() );
1359 background.
setFillColor( mShapeFillColorBtn->color() );
1364 background.
setOpacity( mBackgroundOpacityWidget->opacity() );
1365 background.
setBlendMode( mShapeBlendCmbBx->blendMode() );
1372 format.setBackground( background );
1376 shadow.
setEnabled( mShadowDrawChkBx->isChecked() );
1387 shadow.
setOpacity( mShadowOpacityWidget->opacity() );
1388 shadow.
setScale( mShadowScaleSpnBx->value() );
1389 shadow.
setColor( mShadowColorBtn->color() );
1391 format.setShadow( shadow );
1393 if ( includeDataDefinedProperties )
1424 if ( mButtons.contains( key ) )
1433void QgsTextFormatWidget::optionsStackedWidget_CurrentChanged(
int )
1435 mLabelingOptionsListWidget->blockSignals(
true );
1436 QWidget *currentPage = mLabelStackedWidget->currentWidget();
1437 if ( currentPage == mLabelPage_Text )
1438 mLabelingOptionsListWidget->setCurrentItem(
mTextItem );
1439 else if ( currentPage == mLabelPage_Formatting )
1441 else if ( currentPage == mLabelPage_Mask )
1442 mLabelingOptionsListWidget->setCurrentItem(
mMaskItem );
1443 if ( currentPage == mLabelPage_Buffer )
1444 mLabelingOptionsListWidget->setCurrentItem(
mBufferItem );
1445 if ( currentPage == mLabelPage_Background )
1447 if ( currentPage == mLabelPage_Shadow )
1448 mLabelingOptionsListWidget->setCurrentItem(
mShadowItem );
1449 if ( currentPage == mLabelPage_Callouts )
1450 mLabelingOptionsListWidget->setCurrentItem(
mCalloutItem );
1451 if ( currentPage == mLabelPage_Rendering )
1453 if ( currentPage == mLabelPage_Placement )
1455 mLabelingOptionsListWidget->blockSignals(
false );
1462 if (
auto *lExpressionContext =
mContext.expressionContext() )
1464 mPreviewExpressionContext = *lExpressionContext;
1469 const auto symbolButtonWidgets = findChildren<QgsSymbolButton *>();
1472 symbolWidget->setMapCanvas(
mContext.mapCanvas() );
1473 symbolWidget->setMessageBar(
mContext.messageBar() );
1477void QgsTextFormatWidget::collapseSample(
bool collapse )
1481 QList<int> splitSizes = mFontPreviewSplitter->sizes();
1482 if ( splitSizes[0] > groupBox_mPreview->height() )
1484 const int delta = splitSizes[0] - groupBox_mPreview->height();
1485 splitSizes[0] -= delta;
1486 splitSizes[1] += delta;
1487 mFontPreviewSplitter->setSizes( splitSizes );
1492void QgsTextFormatWidget::changeTextColor(
const QColor &color )
1498void QgsTextFormatWidget::updateFont(
const QFont &newFont )
1501 if ( newFont != mRefFont )
1510 QFont symbolFont = mRefFont;
1511 symbolFont.setPointSize( font().pointSize() );
1512 mDirectSymbLeftLineEdit->setFont( symbolFont );
1513 mDirectSymbRightLineEdit->setFont( symbolFont );
1515 blockFontChangeSignals(
true );
1516 mFontFamilyCmbBx->setCurrentFont( symbolFont );
1517 populateFontStyleComboBox();
1518 mFontUnderlineBtn->setChecked( mRefFont.underline() );
1519 mFontStrikethroughBtn->setChecked( mRefFont.strikeOut() );
1520 mKerningCheckBox->setChecked( mRefFont.kerning() );
1521 blockFontChangeSignals(
false );
1529void QgsTextFormatWidget::blockFontChangeSignals(
bool blk )
1531 mFontFamilyCmbBx->blockSignals( blk );
1532 mFontStyleComboBox->blockSignals( blk );
1533 mFontCapitalsComboBox->blockSignals( blk );
1534 mFontUnderlineBtn->blockSignals( blk );
1535 mFontStrikethroughBtn->blockSignals( blk );
1536 mFontWordSpacingSpinBox->blockSignals( blk );
1537 mFontLetterSpacingSpinBox->blockSignals( blk );
1538 mKerningCheckBox->blockSignals( blk );
1553 lblFontPreview->setFormat(
format() );
1556void QgsTextFormatWidget::scrollPreview()
1558 scrollArea_mPreview->ensureVisible( 0, 0, 0, 0 );
1563 mPreviewBackgroundColor = color;
1565 scrollArea_mPreview->widget()->setStyleSheet( u
"background: rgb(%1, %2, %3);"_s.arg( QString::number( color.red() ), QString::number( color.green() ), QString::number( color.blue() ) ) );
1568void QgsTextFormatWidget::changeBufferColor(
const QColor &color )
1577 bool showLineFrame =
false;
1578 bool showCentroidFrame =
false;
1579 bool showQuadrantFrame =
false;
1580 bool showFixedQuadrantFrame =
false;
1581 bool showPlacementPriorityFrame =
false;
1582 bool showOffsetTypeFrame =
false;
1583 bool showOffsetFrame =
false;
1584 bool showDistanceFrame =
false;
1585 bool showMaximumDistanceFrame =
false;
1586 bool showPrioritizationFrame =
false;
1587 bool showRotationFrame =
false;
1588 bool showMaxCharAngleFrame =
false;
1589 bool showCurvedLabelModeFrame =
false;
1590 bool showWhitespaceCollisionFrame =
false;
1593 const bool showPolygonPlacementOptions
1596 bool enableMultiLinesFrame =
true;
1601 showDistanceFrame =
true;
1602 mPlacementDistanceFrame->setEnabled(
true );
1603 showMaximumDistanceFrame =
true;
1610 showQuadrantFrame =
true;
1611 showFixedQuadrantFrame =
true;
1612 showOffsetFrame =
true;
1613 showRotationFrame =
true;
1617 showDistanceFrame =
true;
1618 showMaximumDistanceFrame =
true;
1619 showPlacementPriorityFrame =
true;
1620 showPrioritizationFrame =
true;
1621 showOffsetTypeFrame =
true;
1628 showLineFrame =
true;
1629 showDistanceFrame =
true;
1634 const bool offline = chkLineAbove->isChecked() || chkLineBelow->isChecked();
1635 chkLineOrientationDependent->setEnabled( offline );
1636 mPlacementDistanceFrame->setEnabled( offline );
1640 showMaxCharAngleFrame = isCurved;
1642 enableMultiLinesFrame = !isCurved;
1647 showDistanceFrame =
true;
1648 mPlacementDistanceFrame->setEnabled(
true );
1652 showRotationFrame =
true;
1655 mPlacementLineFrame->setVisible( showLineFrame );
1656 mPlacementPolygonFrame->setVisible( showPolygonPlacementOptions );
1657 mPlacementCentroidFrame->setVisible( showCentroidFrame );
1658 mPlacementQuadrantFrame->setVisible( showQuadrantFrame );
1659 mPlacementFixedQuadrantFrame->setVisible( showFixedQuadrantFrame );
1660 mPlacementCartographicFrame->setVisible( showPlacementPriorityFrame );
1661 mPlacementOffsetFrame->setVisible( showOffsetFrame );
1662 mPlacementDistanceFrame->setVisible( showDistanceFrame );
1663 mPlacementMaximumDistanceFrame->setVisible( showMaximumDistanceFrame );
1664 mPlacementPrioritizationFrame->setVisible( showPrioritizationFrame );
1665 mPlacementOffsetTypeFrame->setVisible( showOffsetTypeFrame );
1666 mWhitespaceCollisionFrame->setVisible( showWhitespaceCollisionFrame );
1667 mPlacementRotationFrame->setVisible( showRotationFrame );
1668 mPlacementRepeatGroupBox->setVisible(
1674 mPlacementMaxCharAngleFrame->setVisible( showMaxCharAngleFrame );
1675 mCurvedLabelModeFrame->setVisible( showCurvedLabelModeFrame );
1677 mMultiLinesFrame->setEnabled( enableMultiLinesFrame );
1681 switch ( currentPlacement )
1685 helperText = tr(
"Arranges label candidates in a clockwise circle around the feature, preferring placements to the top-right of the feature." );
1687 helperText = tr(
"Arranges label candidates in a cluster around the feature's centroid, preferring placements directly over the centroid." );
1691 helperText = tr(
"Arranges label candidates directly over the feature or at a preset offset from the feature." );
1693 helperText = tr(
"Arranges label candidates directly over the feature's centroid, or at a preset offset from the centroid." );
1697 helperText = tr(
"Arranges label candidates parallel to a generalised line representing the feature. Placements which fall over straighter portions of the line are preferred." );
1699 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." );
1703 helperText = tr(
"Arranges candidates following the curvature of a line feature. Placements which fall over straighter portions of the line are preferred." );
1707 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." );
1709 helperText = tr(
"Label candidates are arranged horizontally along the length of the feature." );
1714 "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."
1720 = 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." );
1724 helperText = tr(
"Arranges candidates following the curvature of the feature's perimeter. Placements which fall over straighter portions of the perimeter are preferred." );
1728 helperText = tr(
"Label candidates are placed outside of the features, preferring placements which give greatest visual association between the label and the feature." );
1731 mPlacementModeDescriptionLabel->setText( u
"<i>%1</i>"_s.arg( helperText ) );
1734void QgsTextFormatWidget::populateFontCapitalsComboBox()
1745void QgsTextFormatWidget::populateFontStyleComboBox()
1747 mFontStyleComboBox->clear();
1748 const QStringList styles = mFontDB.styles( mRefFont.family() );
1749 const auto constStyles = styles;
1750 for (
const QString &style : constStyles )
1752 mFontStyleComboBox->addItem( style );
1755 QString targetStyle = mFontDB.styleString( mRefFont );
1756 if ( !styles.contains( targetStyle ) )
1759 targetStyle = QFontInfo( f ).styleName();
1760 mRefFont.setStyleName( targetStyle );
1763 const int stylIndx = mFontStyleComboBox->findText( targetStyle );
1764 if ( stylIndx > -1 )
1769 mFontStyleComboBox->setCurrentIndex( curIndx );
1772void QgsTextFormatWidget::mFontSizeSpinBox_valueChanged(
double d )
1774 mRefFont.setPointSizeF( d );
1775 updateFont( mRefFont );
1778void QgsTextFormatWidget::mFontFamilyCmbBx_currentFontChanged(
const QFont &f )
1781 updateFont( mRefFont );
1784void QgsTextFormatWidget::mFontStyleComboBox_currentIndexChanged(
const QString &text )
1787 updateFont( mRefFont );
1790void QgsTextFormatWidget::mFontUnderlineBtn_toggled(
bool ckd )
1792 mRefFont.setUnderline( ckd );
1793 updateFont( mRefFont );
1796void QgsTextFormatWidget::mFontStrikethroughBtn_toggled(
bool ckd )
1798 mRefFont.setStrikeOut( ckd );
1799 updateFont( mRefFont );
1802void QgsTextFormatWidget::kerningToggled(
bool checked )
1804 mRefFont.setKerning( checked );
1805 updateFont( mRefFont );
1808void QgsTextFormatWidget::mFontWordSpacingSpinBox_valueChanged(
double spacing )
1810 mRefFont.setWordSpacing( spacing );
1811 updateFont( mRefFont );
1814void QgsTextFormatWidget::mFontLetterSpacingSpinBox_valueChanged(
double spacing )
1816 mRefFont.setLetterSpacing( QFont::AbsoluteSpacing, spacing );
1817 updateFont( mRefFont );
1820void QgsTextFormatWidget::mFontSizeUnitWidget_changed()
1825 mFontLimitPixelChkBox->setChecked(
false );
1831 mFontLimitPixelChkBox->setChecked(
true );
1833 updateFont( mRefFont );
1836void QgsTextFormatWidget::mFontMinPixelSpinBox_valueChanged(
int px )
1839 mFontMaxPixelSpinBox->setMinimum( px );
1840 mFontMaxPixelSpinBox->update();
1843void QgsTextFormatWidget::mFontMaxPixelSpinBox_valueChanged(
int px )
1846 if ( px < mFontMinPixelSpinBox->value() )
1848 mFontMaxPixelSpinBox->blockSignals(
true );
1849 mFontMaxPixelSpinBox->setValue( mFontMinPixelSpinBox->value() );
1850 mFontMaxPixelSpinBox->blockSignals(
false );
1852 mFontMaxPixelSpinBox->setMinimum( mFontMinPixelSpinBox->value() );
1855void QgsTextFormatWidget::mBufferUnitWidget_changed()
1857 updateFont( mRefFont );
1860void QgsTextFormatWidget::mMaskBufferUnitWidget_changed()
1862 updateFont( mRefFont );
1865void QgsTextFormatWidget::mCoordXDDBtn_changed()
1867 updateDataDefinedAlignment();
1870void QgsTextFormatWidget::mCoordXDDBtn_activated(
bool isActive )
1875 mCoordPointDDBtn->setActive(
false );
1878void QgsTextFormatWidget::mCoordYDDBtn_changed()
1880 updateDataDefinedAlignment();
1883void QgsTextFormatWidget::mCoordYDDBtn_activated(
bool isActive )
1888 mCoordPointDDBtn->setActive(
false );
1891void QgsTextFormatWidget::mCoordPointDDBtn_changed()
1893 updateDataDefinedAlignment();
1896void QgsTextFormatWidget::mCoordPointDDBtn_activated(
bool isActive )
1901 mCoordXDDBtn->setActive(
false );
1902 mCoordYDDBtn->setActive(
false );
1905void QgsTextFormatWidget::mShapeTypeCmbBx_currentIndexChanged(
int )
1913 showBackgroundRadius( isRect );
1915 mShapeSVGPathFrame->setVisible( isSVG );
1916 mBackgroundMarkerSymbolButton->setVisible( isMarker );
1917 mBackgroundFillSymbolButton->setVisible( !isSVG && !isMarker );
1921 mShapeSizeYLabel->setVisible( !isSVG && !isMarker );
1922 mShapeSizeYSpnBx->setVisible( !isSVG && !isMarker );
1923 mShapeSizeYDDBtn->setVisible( !isSVG && !isMarker );
1924 mShapeSizeXLabel->setText( tr(
"Size%1" ).arg( !isSVG && !isMarker ? tr(
" X" ) : QString() ) );
1927 mShapeFillColorBtn->setAllowOpacity( !isSVG );
1928 mShapeFillColorBtn->setButtonBackground();
1929 mShapeStrokeColorBtn->setAllowOpacity( !isSVG );
1930 mShapeStrokeColorBtn->setButtonBackground();
1933 mShapeFillColorLabel->setVisible( isSVG );
1934 mShapeFillColorLabel->setEnabled( isSVG );
1935 mShapeFillColorBtn->setVisible( isSVG );
1936 mShapeFillColorBtn->setEnabled( isSVG );
1937 mShapeFillColorDDBtn->setVisible( isSVG );
1938 mShapeFillColorDDBtn->setEnabled( isSVG );
1939 mShapeStrokeColorLabel->setVisible( isSVG );
1940 mShapeStrokeColorLabel->setEnabled( isSVG );
1941 mShapeStrokeColorBtn->setVisible( isSVG );
1942 mShapeStrokeColorBtn->setEnabled( isSVG );
1943 mShapeStrokeColorDDBtn->setVisible( isSVG );
1944 mShapeStrokeColorDDBtn->setEnabled( isSVG );
1945 mShapeStrokeWidthLabel->setVisible( isSVG );
1946 mShapeStrokeWidthLabel->setEnabled( isSVG );
1947 mShapeStrokeWidthSpnBx->setVisible( isSVG );
1948 mShapeStrokeWidthSpnBx->setEnabled( isSVG );
1949 mShapeStrokeWidthDDBtn->setVisible( isSVG );
1950 mShapeStrokeWidthDDBtn->setEnabled( isSVG );
1953 mShapeSVGParamsBtn->setVisible( isSVG );
1956 updateSvgWidgets( mShapeSVGPathLineEdit->text() );
1960 mShapeSVGUnitsLabel->setVisible( isSVG );
1961 mShapeStrokeWidthUnitWidget->setVisible(
false );
1962 mShapeStrokeUnitsDDBtn->setVisible(
false );
1963 mShapeStrokeUnitsDDBtn->setEnabled(
false );
1965 updateAvailableShadowPositions();
1968void QgsTextFormatWidget::mShapeSVGPathLineEdit_textChanged(
const QString &text )
1970 updateSvgWidgets( text );
1975 const int numOptionsChecked = ( chkLineAbove->isChecked() ? 1 : 0 ) + ( chkLineBelow->isChecked() ? 1 : 0 ) + ( chkLineOn->isChecked() ? 1 : 0 );
1977 if ( numOptionsChecked == 1 )
1980 chkLineAbove->setEnabled( !chkLineAbove->isChecked() );
1981 chkLineBelow->setEnabled( !chkLineBelow->isChecked() );
1982 chkLineOn->setEnabled( !chkLineOn->isChecked() );
1986 chkLineAbove->setEnabled(
true );
1987 chkLineBelow->setEnabled(
true );
1988 chkLineOn->setEnabled(
true );
1998void QgsTextFormatWidget::previewScaleChanged(
double scale )
2000 lblFontPreview->setScale( scale );
2003void QgsTextFormatWidget::updateSvgWidgets(
const QString &svgPath )
2005 if ( mShapeSVGPathLineEdit->text() != svgPath )
2007 mShapeSVGPathLineEdit->setText( svgPath );
2010 QString resolvedPath;
2011 bool validSVG =
true;
2012 if ( !svgPath.startsWith(
"base64:"_L1, Qt::CaseInsensitive ) )
2015 validSVG = QFileInfo::exists( resolvedPath );
2019 resolvedPath = svgPath;
2024 mShapeSVGPathLineEdit->setStyleSheet( !validSVG ? u
"QLineEdit{ color: rgb(225, 0, 0); }"_s : QString() );
2025 mShapeSVGPathLineEdit->setToolTip( !validSVG ? tr(
"File not found" ) : resolvedPath );
2027 QColor fill, stroke;
2028 double strokeWidth = 0.0;
2029 bool fillParam =
false, strokeParam =
false, strokeWidthParam =
false;
2035 mShapeSVGParamsBtn->setEnabled( validSVG && ( fillParam || strokeParam || strokeWidthParam ) );
2037 mShapeFillColorLabel->setEnabled( validSVG && fillParam );
2038 mShapeFillColorBtn->setEnabled( validSVG && fillParam );
2039 mShapeFillColorDDBtn->setEnabled( validSVG && fillParam );
2040 if ( mLoadSvgParams && validSVG && fillParam )
2041 mShapeFillColorBtn->setColor( fill );
2043 mShapeStrokeColorLabel->setEnabled( validSVG && strokeParam );
2044 mShapeStrokeColorBtn->setEnabled( validSVG && strokeParam );
2045 mShapeStrokeColorDDBtn->setEnabled( validSVG && strokeParam );
2046 if ( mLoadSvgParams && validSVG && strokeParam )
2047 mShapeStrokeColorBtn->setColor( stroke );
2049 mShapeStrokeWidthLabel->setEnabled( validSVG && strokeWidthParam );
2050 mShapeStrokeWidthSpnBx->setEnabled( validSVG && strokeWidthParam );
2051 mShapeStrokeWidthDDBtn->setEnabled( validSVG && strokeWidthParam );
2052 if ( mLoadSvgParams && validSVG && strokeWidthParam )
2053 mShapeStrokeWidthSpnBx->setValue( strokeWidth );
2059 mShapeSVGUnitsLabel->setEnabled( validSVG && strokeWidthParam );
2062void QgsTextFormatWidget::updateAvailableShadowPositions()
2064 if ( mShadowUnderCmbBx->count() == 0
2070 mShadowUnderCmbBx->clear();
2078 mShadowUnderCmbBx->setCurrentIndex( mShadowUnderCmbBx->findData( currentPlacement ) );
2079 if ( mShadowUnderCmbBx->currentIndex() == -1 )
2080 mShadowUnderCmbBx->setCurrentIndex( 0 );
2084void QgsTextFormatWidget::updateProperty()
2086 QgsPropertyOverrideButton *button = qobject_cast<QgsPropertyOverrideButton *>( sender() );
2092void QgsTextFormatWidget::createAuxiliaryField()
2097 QgsVectorLayer *vLayer = qobject_cast<QgsVectorLayer *>(
mLayer );
2105 QgsNewAuxiliaryLayerDialog dlg( vLayer,
this );
2113 QgsPropertyOverrideButton *button = qobject_cast<QgsPropertyOverrideButton *>( sender() );
2124 property.setActive(
true );
2133void QgsTextFormatWidget::updateShapeFrameStatus()
2135 mShapeFrame->setEnabled( mShapeDrawDDBtn->isActive() || mShapeDrawChkBx->isChecked() );
2138void QgsTextFormatWidget::updateBufferFrameStatus()
2140 mBufferFrame->setEnabled( mBufferDrawDDBtn->isActive() || mBufferDrawChkBx->isChecked() );
2143void QgsTextFormatWidget::updateShadowFrameStatus()
2145 mShadowFrame->setEnabled( mShadowDrawDDBtn->isActive() || mShadowDrawChkBx->isChecked() );
2148void QgsTextFormatWidget::updateCalloutFrameStatus()
2150 mCalloutFrame->setEnabled( mCalloutDrawDDBtn->isActive() || mCalloutsDrawCheckBox->isChecked() );
2153void QgsTextFormatWidget::updateDataDefinedAlignment()
2156 mCoordAlignmentFrame->setEnabled( ( mCoordXDDBtn->isActive() && mCoordYDDBtn->isActive() ) || mCoordPointDDBtn->isActive() );
2159void QgsTextFormatWidget::overlapModeChanged()
2161 QString description;
2165 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.)" );
2168 description = tr(
"If a label cannot otherwise be placed for a feature then an overlapping label is permitted." );
2171 description = tr(
"Labels from this layer may freely overlap other labels or label obstacles without penalty." );
2175 mOverlapModeDescriptionLabel->setText( u
"<i>%1</i>"_s.arg( description ) );
2178void QgsTextFormatWidget::updateCurvedLabelDescription()
2183 mCurvedModeDescriptionLabel->hide();
2186 mCurvedModeDescriptionLabel->setText( tr(
"Places individual characters from the label at each corresponding vertex in the line." ) );
2187 mCurvedModeDescriptionLabel->show();
2190 mCurvedModeDescriptionLabel->setText( tr(
"Stretches (or shrinks) character spacing so that the curved label fits the whole line." ) );
2191 mCurvedModeDescriptionLabel->show();
2194 mCurvedModeDescriptionLabel->setText( tr(
"Stretches (or shrinks) word spacing so that the curved label fits the whole line." ) );
2195 mCurvedModeDescriptionLabel->show();
2202 if ( name.isEmpty() )
2246 saveDlg.
setDefaultTags( mTextFormatsListWidget->currentTagFilter() );
2247 if ( !saveDlg.exec() )
2250 if ( saveDlg.
name().isEmpty() )
2260 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 );
2261 if ( res != QMessageBox::Yes )
2268 const QStringList symbolTags = saveDlg.
tags().split(
',' );
2275void QgsTextFormatWidget::mShapeSVGSelectorBtn_clicked()
2278 svgDlg.setWindowTitle( tr(
"Select SVG file" ) );
2279 svgDlg.svgSelector()->setSvgPath( mShapeSVGPathLineEdit->text().trimmed() );
2281 if ( svgDlg.exec() == QDialog::Accepted )
2283 const QString svgPath = svgDlg.svgSelector()->currentSvgPath();
2284 if ( !svgPath.isEmpty() )
2286 mShapeSVGPathLineEdit->setText( svgPath );
2292void QgsTextFormatWidget::mShapeSVGParamsBtn_clicked()
2294 const QString svgPath = mShapeSVGPathLineEdit->text();
2295 mLoadSvgParams =
true;
2296 updateSvgWidgets( svgPath );
2297 mLoadSvgParams =
false;
2300void QgsTextFormatWidget::mShapeRotationCmbBx_currentIndexChanged(
int index )
2306void QgsTextFormatWidget::mPreviewTextEdit_textChanged(
const QString &text )
2308 lblFontPreview->setText( text );
2312void QgsTextFormatWidget::mPreviewTextBtn_clicked()
2314 mPreviewTextEdit->setText( u
"Lorem Ipsum"_s );
2318void QgsTextFormatWidget::mPreviewBackgroundBtn_colorChanged(
const QColor &color )
2323void QgsTextFormatWidget::mDirectSymbLeftToolBtn_clicked()
2325 bool gotChar =
false;
2327 const QChar initial = !mDirectSymbLeftLineEdit->text().isEmpty() ? mDirectSymbLeftLineEdit->text().at( 0 ) : QChar();
2328 const QChar dirSymb = mCharDlg->selectCharacter( &gotChar, mRefFont, mFontDB.styleString( mRefFont ), initial );
2333 if ( !dirSymb.isNull() )
2334 mDirectSymbLeftLineEdit->setText( QString( dirSymb ) );
2337void QgsTextFormatWidget::mDirectSymbRightToolBtn_clicked()
2339 bool gotChar =
false;
2340 const QChar initial = !mDirectSymbRightLineEdit->text().isEmpty() ? mDirectSymbRightLineEdit->text().at( 0 ) : QChar();
2341 const QChar dirSymb = mCharDlg->selectCharacter( &gotChar, mRefFont, mFontDB.styleString( mRefFont ), initial );
2346 if ( !dirSymb.isNull() )
2347 mDirectSymbRightLineEdit->setText( QString( dirSymb ) );
2350void QgsTextFormatWidget::chkLineOrientationDependent_toggled(
bool active )
2354 chkLineAbove->setText( tr(
"Left of line" ) );
2355 chkLineBelow->setText( tr(
"Right of line" ) );
2359 chkLineAbove->setText( tr(
"Above line" ) );
2360 chkLineBelow->setText( tr(
"Below line" ) );
2365void QgsTextFormatWidget::mToolButtonConfigureSubstitutes_clicked()
2370 QgsSubstitutionListWidget *widget =
new QgsSubstitutionListWidget( panel );
2378 QgsSubstitutionListDialog dlg(
this );
2380 if ( dlg.exec() == QDialog::Accepted )
2387void QgsTextFormatWidget::configureTabStops()
2392 QgsTabPositionWidget *widget =
new QgsTabPositionWidget( panel );
2395 widget->
setUnit( mTabDistanceUnitWidget->unit() );
2405 QgsTabPositionDialog dlg(
this );
2407 dlg.setUnit( mTabDistanceUnitWidget->unit() );
2408 if ( dlg.exec() == QDialog::Accepted )
2417void QgsTextFormatWidget::showBackgroundRadius(
bool show )
2419 mShapeRadiusLabel->setVisible( show );
2420 mShapeRadiusXDbSpnBx->setVisible( show );
2422 mShapeRadiusYDbSpnBx->setVisible( show );
2424 mShapeRadiusUnitWidget->setVisible( show );
2426 mShapeRadiusDDBtn->setVisible( show );
2427 mShapeRadiusUnitsDDBtn->setVisible( show );
2432 if (
auto *lExpressionContext =
mContext.expressionContext() )
2433 return *lExpressionContext;
2438 expContext =
mMapCanvas->createExpressionContext();
2461 if ( mGeometryGeneratorGroupBox->isChecked() )
2475 : QDialog( parent, fl )
2477 setWindowTitle( tr(
"Text Settings" ) );
2480 mFormatWidget->layout()->setContentsMargins( 0, 0, 0, 0 );
2482 QVBoxLayout *layout =
new QVBoxLayout(
this );
2483 layout->addWidget( mFormatWidget );
2485 mButtonBox =
new QDialogButtonBox( QDialogButtonBox::Ok | QDialogButtonBox::Cancel | QDialogButtonBox::Help, Qt::Horizontal,
this );
2486 layout->addWidget( mButtonBox );
2488 setLayout( layout );
2491 connect( mButtonBox->button( QDialogButtonBox::Ok ), &QAbstractButton::clicked,
this, &QDialog::accept );
2492 connect( mButtonBox->button( QDialogButtonBox::Cancel ), &QAbstractButton::clicked,
this, &QDialog::reject );
2493 connect( mButtonBox->button( QDialogButtonBox::Help ), &QAbstractButton::clicked,
this, &QgsTextFormatDialog::showHelp );
2498 return mFormatWidget->format();
2501void QgsTextFormatDialog::showHelp()
2503 QgsHelp::openHelp( u
"style_library/label_settings.html#formatting-the-label-text"_s );
2508 mFormatWidget->setContext( context );
2519 mFormatWidget = qobject_cast<QgsTextFormatWidget *>(
widget() );
2521 if ( !mBlockSignals )
2528 return mFormatWidget->format();
2533 mBlockSignals =
true;
2534 mFormatWidget->setFormat(
format );
2535 mBlockSignals =
false;
2540 mFormatWidget->setContext( context );
2545 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 or along a line feature....
@ 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 bool isDefaultStack(QgsPaintEffect *effect)
Tests whether a paint effect matches the default effects stack.
static std::unique_ptr< QgsPaintEffect > defaultStack()
Returns a new effect stack consisting of a sensible selection of default effects.
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 std::unique_ptr< 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.
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.